Мне любопытно, знает ли кто-нибудь или может догадаться, какую структуру данных использует Google Firestore для индексации произвольных документов NoSQL по каждому полю. Я хочу построить что-то подобное, сделав его максимально эффективным.
Некоторая информация о том, как работает их индекс по умолчанию:
- все поля индексируются по умолчанию, но работает только для поиска равенства, а не диапазона (‹,>)
- поиск любого диапазона требует дополнительных индексов
- Источник: https://firebase.google.com/docs/firestore/query-data/indexing
Маловероятно, что это стандартный индекс btree для каждого поля, потому что поиск по диапазону будет работать без добавления требования для другого индекса. Кроме того, если вы добавите новое поле (легко с хранилищем документов), потребуется время, чтобы создать индекс и коллекции с миллиардами элементов.
Одна теория: 1 большой указатель на документ. Индексируйте «field_name: value» для каждого поля в каждом документе. Индекс сопоставляется с идентификаторами документов отсортированного списка, которые содержат эту пару поле / значение. Он сможет выполнять поиск равенства (мое объединение отсортированных идентификаторов документов для каждого требования равенства), но не поиск по диапазону. В основном перевернутый индекс.
Есть ли какие-либо предложения по поводу более эффективных способов реализации подобного паттерна?