2015-01-30 25 views
5

Grafiklerimi depolamak için en son Neo4j (2.2.0-M03) topluluğunu kullanıyorum. Python'dan erişmeyi düşünüyorum. Resmi Neo4j documentation uyarınca, çeşitli alternatifler var. 2015'te Python'dan Neo4j'i kullanmanın en uygun yolu

Dokümanları kontrol ederek, biraz oynayarak ve this post numaralı telefonu denetleyerek anladığım kadarıyla, Py2neo, Neo4j 2'yi (ve etiketlerini) destekleyen tek kişidir. Ancak, Neo4j üzerinde özel algoritmalar yazmak ve çalıştırmak istediğimde, Gremlin'i Ampuller aracılığıyla kullanmalıyım, ancak Neo4j'yi desteklemiyor gibi görünmektedir. 2

Şu anda bazı özel algoritmalar kullanmak istemiyorum. Neo4j'de, Yayılma Aktivasyonu gibi. Java'da Neo4j'de doğrudan algoritmalar yazıyor ve bunları Py2neo'dan tek alternatifle cypher komutlarını kullanarak Python'dan çalıştırıyor musunuz? Bir şey mi eksik?

Şakalar

PS. Ben alıntı yaptım tüm yazılım bağlantıları göndermek istedim ama ne yazık ki 2'den fazla bağlantı göndermek için en az 10 itibara ihtiyacım var ...

+0

"Yazma algoritmaları" ile ne demek istediğimi anlatabilir misiniz? Ne tür? Evet, genel olarak py2neo gidilecek yoldur, ancak yapmaya çalıştığınız şeyi belirtmezseniz size tavsiyede bulunmak zor olacaktır. – FrobberOfBits

+0

Teşekkürler @FrobberOfBits, soruyu düzenledim. Özel algoritmalar kullanmak istiyorum, örneğin Spreading Activation. – redsk

+0

Bu, "Java'da Neo4j'de doğrudan algoritmalar yazıyor ve bunları Python'dan tek alternatifle mi çalıştırıyor?" –

cevap

4

Bu çok zor bir soru, tasarım kılavuzuna hızlı bir neo4j soru değil gibi görünüyor . Yayılma aktivasyonunu nasıl kullandığınıza bağlı olarak, sunucuyu değiştirmemek daha iyi olabilir, ancak kullanım durumunuzun büyük olasılıkla dahil olduğu için bunu anlayamıyorum. Neo4j'yi her zaman bir grafik mağazası olarak kullanabileceğinizi ve daha sonra uygulama kodunuza sunucuda değil, etkinleştirme yayılması gibi daha üst düzey kavramlar yerleştirebileceğinizi unutmayın.

Soru, sanırım sunucuya koymak istediğinizi düşünüyor. Peki seçenekler neler? Genel olarak, bir sunucu eklentisi yazabilir ve RESTful API'yi (py2neo ile size yardımcı olmaz) genişletebilirsiniz. Öte yandan, kendi özel cypher işlevinin tanımlanmasının şu anda desteklendiğini düşünmüyorum. cypher dilini kendisi değiştirin, sonra yeni bir fantezi işlevi kullanmak için py2neo bağlamaları kullanın. Advice given elsewhere, yayılma etkinleştirme için bir unmanaged extension düşünebilirsiniz. Bunu yaptıysan, bir kez daha, py2neo'nun sana nasıl yardımcı olacağını anlamıyorum.

Kısa süreli, sana DEĞİL kendisi Neo4j değiştirerek değil, belki py2neo kullanan piton kodunda sizin yayma aktivasyon koyarak düşünmelisiniz düşünüyorum. Uzun vadeli, eğer neo4j, daha iyi bir seçenek olsa da, geliştirme yol haritasındaki (belki?) Anladığım, cipher kullanıcı tanımlı fonksiyonları (UDF'ler) yapmanın bir yolu ile geliyorsa, ancak çok fazla tavsiye etmem daha fazla gereksinim ve detaylar.

+0

Teşekkür ederim @FrobberOfBits. Uygulamam için iyi bir tasarım tasarlarken hangi alternatifin hesaba katılacağını anlamaya çalışıyordum. Neo4j yönetilmeyen uzantıları gerçekten iyi bir öneridir. – redsk

+0

Olası bir alternatif, [Gremlin] (https://github.com/tinkerpop/gremlin/wiki) grafik dilini (muhtemelen [tinkerpop3] (http://www.tinkerpop.com/) (http://www.tinkerpop.com/) aracılığıyla kullanacaktır. Neo4j 2.2 afaik) Bu durumda, p2neo bir Gremlin betiğini [spesifik bir uzantı] (http://py2neo.org/2.0/ext/gremlin.html) aracılığıyla çağırmayı destekler. – redsk

+0

Son olarak, önerdiğiniz gibi, Yayılma Etkinleştirmesi (veya diğer grafik algoritmaları) Python'da (muhtemelen py2neo, muhtemelen) uygulanabilir. Bununla birlikte, bu durumda, algoritmanın her adımının verileri Neo4j'den Python uygulamasına geri ve ileriye iletmeyi gerektireceği için performansın biraz düşmesini beklerdim. – redsk