Документы в Couchbase хранятся в ключевом порядке? Другими словами, позволят ли они выполнять эффективные запросы для извлечения всех документов с ключами, попадающими в определенный диапазон? В частности, мне нужно знать, верно ли это для Couchbase lite.
Является ли Couchbase упорядоченным хранилищем ключей и значений?
Ответы (1)
Эффективность запросов коррелирует с построением представлений, которые добавляются на сервер.
Couchbase/Couchbase Lite хранит только индексы, указанные и сгенерированные программистом в этих представлениях. Поскольку Couchbase ребалансирует, он перемещает документы между узлами, поэтому кажется непрактичным, чтобы порядок ключей мог быть гарантирован или согласован.
(Немногие базы данных/хранилища данных гарантируют порядок документов или строк на диске, поскольку индексы обеспечивают эту функциональность дешевле.)
Поиск документов Couchbase выполняется с помощью запросов map/reduce в представлениях:
Представление создает индекс данных в соответствии с определенным форматом и структурой. Представление состоит из определенных полей и информации, извлеченной из объектов в Couchbase. Представления создают индексы для вашей информации, что позволяет выполнять операции поиска и выбора данных.
источник: введение к представлениям
Представление создается путем повторения каждого отдельного документа в корзине Couchbase и вывода указанной информации. Результирующий индекс сохраняется для использования в будущем и обновляется новыми данными, сохраняемыми при доступе к представлению. Этот процесс является инкрементальным и, следовательно, оказывает незначительное влияние на производительность. Создание нового представления для существующего большого набора данных может занять много времени, но обновление данных происходит быстро.
источник: Основные сведения о Views
и, наконец, раздел о преобразовании SQL в map/reduce. может быть полезно:
В общем, для каждого предложения WHERE вам нужно включить соответствующее поле в ключ сгенерированного представления, а затем использовать ключ, ключи или комбинации startkey/endkey для указания данных, которые вы хотите выбрать.
В заключение, представления Couchbase постоянно обновляют свои индексы, чтобы обеспечить оптимальную производительность запросов. Couchbase Lite похож на запрос, однако механика сервера немного отличается:
Индексы просмотра обновляются по запросу при запросе. Таким образом, после изменения документа следующий запрос к представлению вызовет функцию отображения этого представления для нового содержимого документа, обновив индекс представления. (Но помните, что вы не должны писать код, который делает предположения о том, когда вызываются функции сопоставления.)
Как улучшить индексацию вашего представления: главное, что вы можете контролировать, — это производительность вашей функции карты, как время ее выполнения, так и количество объектов, которые она выделяет. Попробуйте профилировать свое приложение во время индексации представления и посмотрите, много ли времени тратится на функцию карты; если да, оптимизируйте его. Посмотрите, сможете ли вы обойти функцию карты и отказаться от нее раньше, если документ не относится к типу, который будет создавать какие-либо строки. Также посмотрите, можете ли вы выдавать меньше данных. (Если вы передаете весь документ как значение, не делайте этого.)