2016-09-21 50 views
6

ArangoDB grafiğimde, konuyla ilişkili ileti konuları ve bu ileti dizilerinin içindeki iletilerim var. Grafiği, ileti dizisi ile ilişkili verileri ve ileti dizisinin içindeki iletilerin sayısını döndürecek şekilde çaprazlamak istiyorum.ArangoDB: Grafik geçişi yoluyla toplama sayıları

Veriler oldukça basit bir şekilde yapılandırılmıştır: Konu düğümü, tarih ve kategoriyle ilişkilendirilmiş iş parçacığı düğümüne uzanan bir kenar ve iş parçacığı düğümünden ileti düğümüne bir kenarım var.

İplik düğümünde saklanan verileri ve iş parçacığına eklenen iletilerin sayısını döndürmek istiyorum.

Bunu, for v, e, p in 1..2 outbound sözdizimi ile nasıl yapacağınızdan emin değilim. İçinde iç içe bir grafik bulunan for v, e, p in outbound mu yapmalıyım? Bu hala performans mı? Gecikme için üzgünüm

cevap

7

, biz 3.1 sürümü üzerinde çalışıyoruz;

) Sana doğru çözüme zaten düşünüyorum: bir 1..2 OUTBOUND açıklamada başarmak istiyoruz ifade etmek kolayca mümkün değildir . İki 1..1 OUTBOUND deyiminde formüle etmek daha kolay. senin açıklama itibaren

i aşağıdaki sorgu kullanmak ne olduğunu düşünüyorum:

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 
    } 

bazı açıklama için: i ilk ilişkili iplik seçin. Ardından, bir iş parçacığı için iletiler alabilmek için bir alt sorgu yapıyorum. Son olarak ihtiyacım olan bilgiyi geri verdim. Performans açısından

: veri erişimi açısından (Büyük olasılıkla "darboğaz" operasyonu olan) FOR x IN 1..2 OUTBOUND [...] ve FOR x IN 1 OUTBOUND [...] FOR y IN 1 OUTBOUND x [...] hiçbir fark yoktur ikisi de tam olarak aynı belgelere bakmak gerekir. Sorgu eniyilemesi daha sonraki durumda biraz daha yavaş olabilir, ancak fark 1ms'un altındadır.

+0

Bu, ekibimin yaptığı şeydir. Şu anda, bu kümelenmeler her biri yaklaşık 5 saniye sürüyor, ancak altı kez aynı anda çalıştırılıyorsa, sunucu önemli ölçüde yavaşlıyor ve sorgular 30-40 saniye sürüyor. Bu, 70.000 iletiye kadar 60 iş parçacığı içindir. Muhtemelen bir kümeye gittiğimizde, bunun yaklaşık 5 saniyeye gittiğini göreceğiz, ancak daha hızlı almayı gerçekten istiyoruz. –

+0

Tamam anlaşıldı;) Bize anonimleştirilmiş bir veri seti verebilir miydiniz, böylece neler olup bittiğini optimize etmeyi deneyebiliriz? Bizim için bir "gerçek" veri kümesinde, bir tane üretmekten daha kolaydır. Bunun için bir NDA imzalamaya istekliyiz (devam eden tüm iletişimlerle ilgili ayrıntılı bilgi vermeyeceğim, bu yüzden sizden böyle bir veri seti aldıkça ellerimi alıp sorunuzu hızlandıracağız) Ben de mutsuzum 1’lerin üzerindeki her şey. – mchacki

+0

Ekibim bunu ayarlamak için çalışıyor! –