Закрытые коллекции и _id автоиндекс
Каково обоснование наличия автоматического индексации в поле _id для ограниченных коллекций по умолчанию? Мы можем найти в документах, что:
Без этих издержек индексирования ограниченные коллекции могут поддерживать более высокую пропускную способность вставки.
Был пост о производительности вставок с ограниченным набором, и мои собственные тесты также показали, что для вставок с ограниченным набором без индекса это самый быстрый вариант, затем идет обычный сбор, а самый медленный вариант - это ограниченный набор с индексом. Так почему же автоматический индекс был добавлен вместе с полями _id в версии 2.2, если он снижает производительность, а ограниченные коллекции предлагаются в качестве быстрой альтернативы обычным коллекциям в определенных сценариях?
1 ответ
Что ж, мы, конечно же, не можем исключать преимущества _id в ограниченных коллекциях. Это поможет вам и фактически требуется для репликации.
MongoDB включил его по умолчанию, поскольку развертывание MongoDB в конфигурации набора реплик в настоящее время является очень нормальным явлением. Вы можете найти больше информации в документации, пожалуйста, ищите autoIndexId
Я полагаю, что причиной медленности является индекс, а не само поле. Так что, если ваши требования оправдывают особые потребности, вы всегда можете отключить автоматический индекс.
Но...
Вам все еще нужно указать поле _id с нулевым (0) значением.
например, сбор 2 ГБ с отключенным автоматическим индексированием.
db.createCollection("people", { capped: true, size: 2147483648, autoIndexId: false } )
Я уверен, что этот трюк вернет скорость вставки.