Производительность N1QL с объединением

Я страдаю от производительности N1QL. У меня есть установка кластера с 3 узлами 4.1, с 6 ГБ на каждый узел и 1 набором реплик. Всего вставлено 2 миллиона документов среднего размера 100k. При выборе документа с помощью N1QL запрос имеет соединение в том же ведре, поэтому может выглядеть как его самосоединение. Я получаю данные за 21 минуту. Что ужасно. По ключе, который у меня есть, я уже создал index. Что еще мне не хватает. На мой взгляд, если ForestDB действительно работает, результат должен быть меньше секунды. Ищу ответ здесь. Однако не получил особой поддержки на форумах couchbase.


person siddhusingh    schedule 07.02.2016    source источник
comment
Можете ли вы сказать нам, в каком документе первичным ключом является №_, а в каком - №_ в качестве внешнего ключа? Я маскирую N и X. То есть N документов имеет No_ в качестве первичного ключа, или документы X имеют No_ в качестве первичного ключа?   -  person geraldss    schedule 07.02.2016
comment
Не могли бы вы обновить свой вопрос с помощью запроса N1QL? Это может пролить свет на проблему ...   -  person user1697575    schedule 08.02.2016
comment
Как написано, это не вопрос, и обсуждение этой оптимизации производительности находится здесь: forum.couchbase.com/t/perfomance-issue-with-n1ql-self-join/. Я не уверен, почему вы сказали, что не получили особой поддержки, поскольку мои коллеги из Couchbase пытаются вам помочь в этом.   -  person Matt Ingenthron    schedule 10.02.2016
comment
Конечно, я перевожу это туда. В основном я оцениваю производственное использование, и производительность, которую я получал, была в минутах, даже не в секундах. Вот почему я также разместил здесь, чтобы получить поддержку и некоторые очевидные ответы от других. Похоже, я только один пытаюсь использовать N1QL.   -  person siddhusingh    schedule 10.02.2016


Ответы (1)


Создайте следующий индекс и попробуйте запрос под ним.

    CREATE INDEX idx_gle_type_balance2 ON NAV(No_, Balance, Type) WHERE (Type = 'GLEntry') USING GSI;

select 
X.No_ AS No_,
IFNULL(Sum(X.Balance),0) as Balance
from NAV X USE INDEX (idx_gle_type_balance2)
Where X.Type = "GLEntry" 
and X.Balance IS NOT MISSING
AND X.No_ IS NOT MISSING
Group by X.No_;

----- Обновление от Siddu: с новым индексом запрос выполняется примерно за 1,7 секунды.

person Keshav Murthy    schedule 12.02.2016