Два поиска FULLTEXT в кластере ArangoDb: задействован V8 - PullRequest
0 голосов
/ 23 мая 2018

Я исследую кластер ArangoDb и выяснил, что в случае использования двух запросов FULLTEXT () один из них задействует движок V8.Мои данные:

[
{
"TITL": "Attacks induced by bromocryptin in Parkinson patients",
"WORD": [
        "hascites",
        "Six patients with Parkinson's disease"
         ],
"ID":1,
},
{
"TITL": "Linear modeling of possible mechanisms for Parkinson tremor generation",
"WORD": [
        "hascites",
        "jsubsetIM"
         ],
"ID":2,
},
{
"TITL": "Drug-induced parkinsonism in the rat- a model for biochemical ...",
"WORD": [
        "hascites",
        "Following treatment with reserpine or alternatively with ...",
        "hasabstract"
        ],
"ID":3,
}
]

Простейший запрос:

FOR title IN FULLTEXT(pmshort,"TITL","parkinson")
    FOR word IN FULLTEXT(pmshort,"WORD","hascites")
        FILTER title.ID==word.ID
    RETURN title

Другими словами, я пытаюсь найти все документы, которые имеют parkinson в TITL и hascites в WORD.Этот пример серьезно упрощен, поэтому использование чего-то вроде

FILTER word.WORD=='hascites'

невозможно.Для обеспечения необходимой функциональности требуется два или более поиска FULLTEXT.Коллекция включает в себя около 520 000 документов.Полнотекстовые индексы устанавливаются для каждого поля.

Я обнаружил, что каждый из запросов FULLTEXT, выполняемый отдельно, включает в себя индекс:

Execution plan:
 Id   NodeType        Site         Est.   Comment
  1   SingletonNode   DBS             1   * ROOT
  5   IndexNode       DBS        526577     - FOR title IN pmshort   /* fulltext index scan */
  8   RemoteNode      COOR       526577       - REMOTE
  9   GatherNode      COOR       526577       - GATHER 
  4   ReturnNode      COOR       526577       - RETURN title

Но в случае использования сначала FORодин обрабатывается V8 (JavaScript) и выполняется на координаторе, а не на DBS:

Execution plan:
 Id   NodeType            Site           Est.   Comment
  1   SingletonNode       COOR              1   * ROOT
  2   CalculationNode     COOR              1     - LET #2 = FULLTEXT(pmshort   /* all collection documents */, "TITL", "parkinson")   /* v8 expression */
  3   EnumerateListNode   COOR            100     - FOR title IN #2   /* list iteration */
 10   ScatterNode         COOR            100       - SCATTER
 11   RemoteNode          DBS             100       - REMOTE
  9   IndexNode           DBS        52657700       - FOR word IN pmshort   /* fulltext index scan */
  6   CalculationNode     DBS        52657700         - LET #6 = (title.`ID` == word.`ID`)   /* simple expression */   /* collections used: word : pmshort */
  7   FilterNode          DBS        52657700         - FILTER #6
 12   RemoteNode          COOR       52657700         - REMOTE
 13   GatherNode          COOR       52657700         - GATHER 
  8   ReturnNode          COOR       52657700         - RETURN title

Конечно, это сильно замедляет работу системы.Итак, мои вопросы: 1. Почему кластер ArangoDb не может обрабатывать оба условия на DBS, а не на координаторе (COOR)?2. Как избежать такой ситуации, поскольку производительность падает в 300-500 раз?3. Может быть, кто-то может указать на некоторые дополнительные материалы, чтобы прочитать об этом.

Любая помощь приветствуется.Спасибо!

Ответы [ 2 ]

0 голосов
/ 25 мая 2018

Спасибо большое!Он должен быть доступен в 3.3.10 и в будущих 3.4, верно?

0 голосов
/ 24 мая 2018

Похоже, что оптимизатор запросов прекращает поиск дальнейших улучшений полнотекста после применения одного полнотекстового преобразования в каждом запросе / подзапросе.

Потенциальное исправление для этого можно найти в этом запросе на извлечение (который нацелен на 3.3.10).

...