Как ускорить монгодб вставки?

Я пытаюсь создать приложение с большими данными, используя mongodb (кодирование на Java). Моя коллекция состоит из обычных текстовых документов. Поскольку я не хочу, чтобы дубликаты и текстовые поля документов были слишком большими для создания уникального индекса, я решил рассчитать значение контрольной суммы (MessageDigest с MD5) для текста каждого документа, сохранить это поле в документе и создать уникальный индекс для этого поле.

Примерно мой документ имеет такую ​​структуру:

{
"_id": ObjectId('5336b4942c1a99c94275e1e6')
"textval": "some long text"
"checksum": "444066ed458746374238266cb9dcd20c"
"some_other_field": "qwertyuıop"
}

Поэтому, когда я добавляю новый документ в свою коллекцию, сначала я пытаюсь выяснить, существует ли он, находя документ с этим значением контрольной суммы. Если он существует, я обновляю его (другие поля), в противном случае я вставляю новый документ.

Эта стратегия работает! Но после миллиона документов в коллекции я начал получать недопустимую продолжительность вставки. Оба чексум поиска и вставки замедлились. Я могу вставить ~30000 документов почти за 1 час! Я читал о массовых вставках, но не мог решить, что делать с дублирующимися записями, если я пойду в этом направлении. Любые рекомендации по стратегии, чтобы ускорить процесс?

1 ответ

Я думаю, что было бы намного быстрее, если бы вы использовали другую коллекцию, содержащую только контрольную сумму и файл update_time. И когда вы вставляете ваш обычный документ JSON, вам также следует вставить этот короткий документ JSON:

Your normal JSON document:
{
"_id": ObjectId('5336b4942c1a99c94275e1e6')
"textval": "some long text"
"checksum": "444066ed458746374238266cb9dcd20c"
"update_time": new Date(1396220136948)
"some_other_field": "qwertyuıop"
}

The short JSON document:
{
"_id": ...
"checksum": "444066ed458746374238266cb9dcd20c"
"update_time": new Date(1396220136948)
}
Другие вопросы по тегам