Grafiğimin bir kısmı, iki büyük koleksiyon arasında dev birleştirme kullanılarak oluşturuldu ve her toplamada bir belge eklediğimde bunu çalıştırıyorum. Sorgu, bir older post dayanmaktadır.ArangoDB: Sorgunun işlevini örnek olarak ekleyin.
FOR fromItem IN fromCollection
FOR toItem IN toCollection
FILTER fromItem.fromAttributeValue == toItem.toAttributeValue
INSERT { _from: fromItem._id, _to: toItem._id, otherAttributes: {}} INTO edgeCollection
Veri kümemi tamamlamak için yaklaşık 55.000 saniye sürüyor. Bunu daha hızlı yapmak için önerileri kesinlikle memnuniyetle karşılarım.
- Bir Upsert gerekir:
Ama iki ilişkili sorunları var. Normalde,
upsert
iyi olurdu, ama bu durumda, anahtarın ön tarafını bilmemden dolayı, bana yardımcı olmaz. Anahtarın ön tarafını almak için, başka bir özdeş, mevcut kenarın anahtarını bulmak için örnek olarak sorgulamam gerekir. Performansımı öldürmediği müddetçe makul görünüyor ama AQL'de eşdeğeri, eşdeğer bir kenar yoksa, eşdeğer bir kenar eklemek için nasıl bir kenar ekleyeceğini bilmiyorum, ancak eşdeğer bir kenar yoksa hiçbir şey yapmıyor var. Bunu nasıl yapabilirim? - Veri toplama işlemlerine her eklendiğinde bunu çalıştırmam gerekir. Bunu sadece en yeni veriler üzerinde çalıştırmanın bir yoluna ihtiyacım var, böylece tüm koleksiyona katılmaya çalışmaz. Sadece yeni eklenen kayıtlara katılmamı sağlayan AQL'yi nasıl yazabilirim? Arangoimp ile eklendiler ve hangi sırayla güncellenecekleri konusunda bir garantim yok, bu yüzden düğümleri oluştururken kenarları aynı anda oluşturamıyorum. Sadece yeni verilere nasıl katılabilirim? Her kayıt eklendiğinde 55k saniye harcamak istemiyorum.
db._explain(<your query here>);
hangi gösterileri çıkışında bakarak görülebileceği gibi
Diğer veritabanlarında da aynı sorunla ilgili sorgular yaptım, yeniden bağlarken veri kümesinin boyutunu nasıl azaltabilirsiniz. Benim için çalışan çözüm, 'fromCollection' ve' toCollection' koleksiyonlarında 'linked = false' gibi bir alan eklemek. –
... Sonra her iki koleksiyona yeni belgeler eklediğinizde, her zaman 'connected' öğesini false olarak ayarlayın. Belgeleri bağladığınızda, aynı zamanda geri dönüp 'connected'' 'true' olarak ayarlayın. Hızlandırmak için, 'linked' üzerinde bir indeks koymak istersiniz. Bunu işleyişinizi büyük ölçüde hızlandırırsınız, ancak her şey sizin için bir değer olacaktır, çünkü her şey "linked = false" değerine sahip olacaktır. –
Sizin için bir Foxx uygulaması yazabilirsin, bir başkasının sorusu için bir örnek Foxx uygulamasını belgeledim, şu an mevcut (burada) (http://stackoverflow.com/questions/39897954/arangodb-aql-recursive-graph- traversal) StackOverflow üzerinde. Foxx'i güzel ve hızlı olabileceğini ve tanımladığınız gibi bir fonksiyonun mükemmel bir kullanım durumu olduğunu öğrenmek için biraz zaman ayırmaya değer. İşlev bile herhangi bir parametreye ihtiyaç duymaz, sadece çalışır ve sadece bu kayıtları 'linked = false 'ile tarar. –