Фоновая индексация
Область применения: Виртуальные ядра MongoDB
Фоновая индексация — это метод, позволяющий системе базы данных выполнять операции индексирования в коллекции без блокировки других запросов или обновлений. Azure Cosmos DB для виртуального ядра MongoDB принимает запрос фонового индексирования и асинхронно выполняет его в фоновом режиме.
При работе с меньшими уровнями или рабочими нагрузками с более высокими потребностями ввода-вывода рекомендуется предопределить индексы пустых коллекций и избежать использования фонового индексирования.
Внимание
Рекомендуется создавать unique
индексы в пустой коллекции, так как они создаются на переднем плане, что приводит к блокировке операций чтения и записи.
Рекомендуется создавать индексы на основе предикатов запросов заранее, а коллекция по-прежнему пуста. Он предотвращает удобочитание ресурсов при отправке на чтение и запись большой коллекции.
Мониторинг сборки индекса
Мы можем узнать о ходе сборки индекса с помощью команды currentOp()
.
db.currentOp("db_name":"<db_name>", "collection_name":"<collection_name>")
db_name
является необязательным параметром.collection_name
необязательный параметр.
// Output for reviewing build status
{
inprog: [
{
shard: 'defaultShard',
active: true,
type: 'op',
opid: '10000003049:1701252500485346',
op_prefix: Long("10000003049"),
currentOpTime: ISODate("2024-06-24T10:08:20.000Z"),
secs_running: Long("2"),
command: {createIndexes: '' },
op: 'command',
waitingForLock: true
},
{
shard: 'defaultShard',
active: true,
type: 'op',
opid: '10000003050:1701252500499914',
op_prefix: Long("10000003050"),
currentOpTime: ISODate("2024-06-24T10:08:20.000Z"),
secs_running: Long("2"),
command: {
createIndexes: 'BRInventory', },
indexes: [
{
v:2,
key: {vendorItemId: 1, vendorId: 1, itemType: 1},
name: 'compound_idx'
}
],
'$db': 'test'
op: 'command',
waitingForLock: false,
progress: {
blocks_done: Long("12616"),
blocks_done: Long("1276873"),
documents_d: Long("0"),
documents_to: Long("0")
},
msg: 'Building index.Progress 0.0098803875. Waiting on op_prefix: 10000000000.'
}
],
ok: 1
}
Ограничения
- Уникальные индексы не могут быть созданы в фоновом режиме. Лучше всего создать их в пустой коллекции, а затем загрузить данные.
- Фоновая индексация выполняется последовательно в одной коллекции. Однако число одновременных сборок индекса в разных коллекциях настраивается (по умолчанию: 2).