2016-09-21 16 views
6

Na moim wykresie ArangoDB mam temat, wątki wiadomości związane z tym tematem i wiadomości wewnątrz wątków wiadomości. Chciałbym przechodzić przez wykres w taki sposób, aby zwracać dane związane z wątkiem wiadomości, a także liczbę wiadomości wewnątrz wątku wiadomości.ArangoDB: Liczba agregacji za pośrednictwem wykresu

Dane są zbudowane dość prosto: Mam węzeł tematyczny, krawędź rozciągającą się do węzła wątku z datą i kategorią powiązaną oraz krawędź od węzła wątku do węzła komunikatów.

Chciałbym zwrócić dane przechowywane w węźle wątku i liczbę wiadomości dołączonych do wątku.

Nie jestem pewien, jak to zrobić ze składnią for v, e, p in 1..2 outbound. Czy powinienem po prostu zrobić for v, e, p in outbound z zagnieżdżonym wykresem w środku? Czy to nadal działa?

Odpowiedz

7

Przepraszamy za opóźnienie, ciężko pracujemy na 3,1 uwolnienia;)

myślę, że jesteś już w odpowiednim roztworze: Nie jest łatwo można wyrazić to, co chcesz osiągnąć w 1..2 OUTBOUND rachunku . Łatwiej jest sformułować w dwóch oświadczeniach 1..1 OUTBOUND.

ze swojego wyjaśnienia myślę następujące zapytanie jest to, czego można użyć:

FOR thread IN 1 OUTBOUND @start @@threadEdges 
    LET nr = COUNT(FOR message IN 1 OUTBOUND thread @@messageEdges RETURN 1) 
    RETURN { 
    date: thread.date, 
    category: thread.category, 
    messages: nr 
    } 

Od pewnego wyjaśnienia: ja najpierw wybrać powiązanych wątku. Następnie wykonuję podzapytanie, aby po prostu wiadomości dla jednego wątku. Wreszcie zwracam informacje, których potrzebuję.

Pod względem wydajności: Pod względem dostępu do danych (co jest najprawdopodobniej „wąskie gardło” operacji) nie ma różnicy w FOR x IN 1..2 OUTBOUND [...] i FOR x IN 1 OUTBOUND [...] FOR y IN 1 OUTBOUND x [...] zarówno przyjrzeć się dokładnie tych samych dokumentów. Optymalizacja zapytań może być nieco wolniejsza w późniejszym przypadku, ale różnica jest znacznie poniżej 1ms.

+0

To jest to, co robił mój zespół. Obecnie agregacja ta trwa około 5 sekund, ale gdy sześć jest uruchamianych jednocześnie, serwer zwalnia znacznie, a zapytania zaczynają się 30-40 sekund. Dotyczy to około 60 wątków zawierających do 70 000 wiadomości. Przypuszczalnie kiedy pójdziemy do klastra, zobaczymy, że cofnie się to do około 5 sekund, ale chcielibyśmy, aby było szybciej. –

+0

Ok understand;) Czy to możliwe, że możesz podać nam jakiś anonimowy zestaw danych, abyśmy mogli spróbować zoptymalizować, co się dzieje? Dla nas zawsze łatwiej jest z "prawdziwym" zestawem danych, niż gdybyśmy go wygenerowali. Jesteśmy skłonni podpisać NDA za to (nie jestem szczegółowo informowany o całej komunikacji, więc jeśli mamy już taki zbiór danych od ciebie, to dostanę się do tego i szybciej otrzymam twoje zapytanie) Jestem również niezadowolony z wszystko powyżej 1s. – mchacki

+0

Mój zespół pracuje nad ustawieniem! –

Powiązane problemy