Neo4J

nazli bal
inventiv
Published in
4 min readApr 2, 2019

Neo4j RDBMS (ilişkisel) ve noSql dblerin güçlü özelliklerini bir araya getiren “Graph Database” dir. Java ile yazılmıştır. Sunduğu rest apileri ile tüm projelerinizde kullanabilirsiniz.

Neo4j’nin ‘Cypher’ adında bir sorgulama dili vardır. Bu dilde yazdığımız sorgularımızı api ile Neo4J’de çalıştırabiliriz.

Neo4J ‘nin Sağladıkları

Esnek Şema, Ölçeklendirme ve Performans, Popüler diller ve frameworkler için api desteği, Cypher Query dili, Data Import, Backup gibi birçok özelliği vardır.

Günümüzde birçok kurumsal firma Fraud Tespiti, Gerçek zamanlı öneri sistemleri, Master data yönetimi (MDM), Network ve IT operasyonları, Kimlik ve erişim yönetimi(IAM) gibi alanlarda Neo4J’yi tercih etmiştir.

Biz projemizde geliştirdiğimiz öneri sistemi için Neo4J’yi tercih ettik. SQL sorguları ile getiremediğimiz verilerimizi Neo4J ile kısa sürede getirebildik. Performans açısından oldukça başarılı oldu. Ayrıca sunduğu tooldaki görsel graphları ile öneri sonucu oluşan dataları daha anlamlı görebilmezi sağladı.

Kullanım Alanları

Bilimsel Araştırma, Eşleştirme, Ağ ve sistem yönetimi, Yazılım analizi, Routing, Proje yönetimi, Tavsiyeler, Sosyal Ağlar… vb. bir çok alanda kullanılabilmektedir.

GraphDB Yapısı

Nodes(Entitylerimiz), Labels(Node Grupları ), RelationShip (Nodelar arasındaki ilişkiler)

Cypher

Sorgularımızı bu dil ile yazacağımız için syntax’ını öğrenmemiz gerekiyor. Sql syntaxına benzer bir syntaxı vardır, bu yüzden kolayca öğrenebilirsiniz.

Öğrenmek için tooldaki örnekten yararlanabilirsiniz.

Yukarıdaki adresten toolu kurmalısınız. Add Graph’a tıklayıp bir graph ekleyin. Neo4JBrowser’a tıklayın.

Example graphs’ta Movie graph’a tıklayın size adım, adım basic seviyeden başlayarak sorgularınızı nasıl yazmanız gerektiğini öğretecektir.

Match => (SELECT)Sorgulama koşulu kullanılarak veri çekmek için kullanılan komut

Create=> Node,relationship ve property oluşturmak için kullanılan komut

Merge=> Eğer belirtilen kritere uygun bir node veya relationship yok ise; yaratmayı , eğer var ise yeni node ile eski node’un birleştirimesi için kullanılan komut

On Create Set=> Merge işleminde bir node veya relationship yaratıldıktan hemen sonra özelliklerini değiştirmek için kullanılan komut.

On Match Set=> Merge işleminde bir node bulunduğu zaman özelliklerini değiştirmek için kullanılan komut

MERGE (keanu:Person { name: 'Keanu Reeves' })
ON CREATE SET keanu.created = timestamp()
ON MATCH SET keanu.lastSeen = timestamp()
RETURN keanu.name, keanu.created, keanu.lastSeen
keanu node'u oluşturulup createddate'i set et eğer bu node var ise lastSeen'i set et.

Örneğin aşağıdaki query’de Tom Hanks’in oynadığı tüm filmlerin listesini buluyoruz.

Neo4J Api Bağlantısı

C# web uygulamamızda cypher dilinde hazırladığımız queryleri Neo4j api’si ile çalıştıracağız.

Yukarıda post edeceğimiz ve dönen response’u cast edeceğimiz modellerimizi oluşturduk.

CSV den data okuma konusunda detaylı bilgi için aşağıdaki linki inceleyebilirsiniz.

ImportData metodumuz ile excelden okuduğumuz datamızı import ettik.

Neo4J bulk data import için aşağıdaki linki inceleyebilirsiniz.

Recommendation metodumuz da ise basit bir recommendation sorgusu oluşturduk. Tom Hanks ve Tom Cruise’un ayrı ayrı oynadığı filmler ve bu filmlerde ortak oynadığı oyuncuları bulalım.(Tom Hanks ve Tom Cruise’un birlikte oynadığı filmler hariç).

Sorgumuzu satır, satır okursak;

Tom Hanks’in oynadığı filmler ve bu filmlerdeki diğer oyuncular. Tom Cruise’un bu diğer oyuncular ile oynadığı filmler. Person node name Tom Hanks ve Tom Cruise olanlar ve Tom Hanks’in Tom Cruise ile oynamadığı filmler.

RestRequest metodumuzda normal bir rest api request’i oluşturuyoruz.

Aşağıda graph hali ile sonucu görebilirsiniz.

Okuduğunuz için teşekkürler…

--

--