У нас есть Couchbase
версия сервера Community Edition 5.1.1 build 5723
В нашем Cars
ведре у нас есть Car Make
и Cars
, которые он изготовил.
Соединение между ними - это Id
из Car Make
, которое мы сохраняем как другое поле в документе Car (как внешний ключ в таблице MySQL).
В ведре всего 330 000 документов.
Запросы занимают много времени - десятки секунд для очень простого запроса , например
select * from cars where model="Camry" <-- we expect to have about 50,000 results for that
Мы выполняем запросы двумя способами:
- Пользовательский интерфейс Couchbase
- Загрузочное приложение Spring, которое постоянно получает TimeOutException через 7,5 секунд
Мы думали, что проблема в отсутствующем индексе.
Итак, мы добавили индекс:
CREATE INDEX cars_idx ON cars(makeName, modelName, makeId, _class) USING GSI;
Мы видим этот индекс при запуске
SELECT * FROM system:indexes
Что нам здесь не хватает? Это разумное количество раз для таких запросов в NoSQL DB?