Какие факторы могут отличать количество элементов от количества идентификаторов элементов в базе диванов? - PullRequest
0 голосов
/ 06 марта 2020

В 3-узловом кластере Couchbase Community Edition 5.0.1 build 5003 couchbase указывает, что он содержит 12268503 элементов. Однако при подсчете идентификаторов результат равен 6132875.

Какие факторы могут отличать количество элементов от количества идентификаторов элементов в couchbase?

Точнее, когда следующий N1QL запрос выполняется в контейнерах - скажем, Product

SELECT count(1) FROM Product

Он дает

12268503

В то время как при подсчете элементов идентификаторы

SELECT count(META(Product).id) FROM Product

Он возвращает:

6132875

То есть количество идентификаторов составляет менее 50% от количества элементов.

Кроме того, они не выполняли никаких операций (0 операций / с) на ведро в течение нескольких часов, что исключает возможность того, что первичный индекс не догонит из-за пика traffi c.

Я порылся в блоге couchbase & do c, не найдя никаких подсказок относительно этого подсчета разница. Любой указатель высоко ценится.

1 Ответ

3 голосов
/ 06 марта 2020

Если в запросе нет предиката / нет соединения, а в проекции используется единственное число выражений (*), count (константа), запрос получает результаты из статистики сегмента и предоставляет информацию (занимает менее миллисекунд).

   SELECT count(*) FROM Product;
   SELECT count(1) FROM Product;

Следующее почти аналогично, но аргумент COUNT является выражением, поэтому он должен использовать индекс и выполнять агрегацию (как в этом случае ключ документа, который уникален и должен быть строкой, оптимизатор должен был рассматриваться как предыдущий подход, На данный момент оптимизация отсутствует )

SELECT count(META(Product).id) FROM Product

Во втором случае он использует индекс, возможно, в вашем индексе есть ожидающие элементы, и они не были зафиксированы. Попробуйте использовать scan_consistency. Проверьте индексную статистику, начните с.

...