Эффективно создавать индексы в couchbase - PullRequest
0 голосов
/ 13 февраля 2020

У меня огромная база данных, по которой пользователи могут делать запросы, используя несколько фильтров. У меня есть около 10 фильтров, которые пользователь может использовать, и несколько фильтров могут быть применены. Каков эффективный способ создания индексов на основе этих фильтров? Я go о создании индекса для всех возможных комбинаций? Если я go иду по этому пути, каковы возможные последствия создания слишком большого числа индексов?

1 Ответ

2 голосов
/ 13 февраля 2020

На этот вопрос сложно ответить, не зная вашей системы. Вот мои рекомендации:

1) Couchbase 6.5 имеет средство рекомендации индекса, установите его на свой компьютер и выполните там самые распространенные запросы. Это даст вам правильный индекс для каждого.

2) После того, как у вас есть все рекомендации по индексам, попробуйте объединить их с одним и тем же типом документа

3) У вас должен быть хотя бы один индекс для каждого типа документа

4) Удалите основной индекс из производственной среды (если у вас уже есть хотя бы один индекс для каждого тип документа)

5) Сортировка - дорогостоящая операция, рассмотрите возможность сохранения уже отсортированных данных в вашем индексе:

CREATE INDEX `us_users_sorted` ON
`user_profile`(
`countryCode`,
`firstName` DESC,
`lastName` DESC)
WHERE (((`type` = "user")
and (`enabled` = true))
and (`countryCode` = "US"))

6) Избегайте по возможности выбирайте * и используйте частичные и закрывающие индексы

7) Если у вас есть документы с слишком большим количеством полей для индексации, рассмотрите возможность использования адаптивных индексов

Побочным эффектом создания слишком большого числа индексов, естественно, является более высокая нагрузка на диск, процессор и память. Однако это зависит от размера ваших данных и кластера.

Если у вас есть кластер с> = 5 узлами, вы можете также рассмотреть возможность разделения индекса и запроса от узла данных.

...