Neo4j nedir? Neo4j faydaları nelerdir?

Neo4j , büyük ve ilişkisel dataları depolama ve işleme özelliğine sahip, kullanımı çok zor olmayan (hatta cypher adını verdikleri sql'e baya benzer bir sorgu dilleri var) ve DB-Engines sıralamasında üst sıralarda bulunan bir grafik veritabanıdır. Kendi deyişlerine göre ise "The Fastest Path to Graph" olarak tanımlayabiliriz.  Neo4j nedir? sorusuna yanıt bulduktan yapımızı belirlerken kullandığımız bir kaç önemli terim var, onların üzerinden ilerleyelim.

Nodes nedir? Labels nedir?

Neo4j veri tabanını kullanmadan önce nodes nedir ve labels nedir sorularına yanıt bulalım.

Nodes

Her kayıt bizim için bir node oluyor. Bunlar ana kayıtlarımız ve bu kayıtlarımız içerisine "Properties" dediğimiz özelliklerimizi ekleyebiliyoruz: id, name, title gibi. Bunları kullanırken label özelliği ile hepsini daha düzenli bir şekilde kullanabiliyoruz.

Labels

Labels yani etiketler ise, bu node gruplarına verdiğimiz addır. Bir grup olarak belirtebileceğimiz 'Person', 'Company' vb. bilgilerinini hepsi ayrı node'ları temsil eden etiketler olacak.

Etiketi olmayan bir node'u

Create (n)

diye oluştururken, etiketi olan node'u ise

Create (n:Person)

diye oluşturabiliriz.  Veya bu node'u özellikle birlikte eklemek istersek

Create (n:Person {id:1, companies: [1,2,3], name: 'Burak'})

şeklinde oluşturabiliyoruz. Ben örneğimizde Person ve Company bilgisini kullanacağım için aşağıda gibi bir kaç toplu kayıt oluşturdum.

Create (q:Person {id:1, companies: |1,2,3|, name: 'Burak'}),
(w:Person {id:2, companies: [1], name: 'Uzay'}),
(e:Person {id:3, companies: [2], name: 'Yaprak'}),
(r:Person {id:4, companies: [3], name: 'Ali'}),
(t:Person {id:5, companies: [2,4], name: 'Veli'}),
(y:Company {id:1, name: 'X Company'}),
(u:Company {id:2, name: 'Y Company'}),
(o:Company {id:3, name: 'Z Company'}),
(p:Company {id:4, name: 'Q Company'})
Burada Person label'ine ait 5 kayıt ve Company label'inde 4 node oluşmuş oldu.


Person node'larımız şöyle oluşmuş oldu;

Company node'larımız ise şu şekilde;


Bir node'un birden fazla label'ı olabilir veya hiç olmayabilir. Bunlar sadece gruplama işlemini yaptığı için ekstra bir özellik tutamaz. Tüm özellikleri node bilgisi tutabiliyor.

Relationships

Neo4j 'nin en önemli özelliği ise relationships dediğimiz ilişkilerimiz. Burada yazdığımız sorguya göre 1-1 ilişkilerin yanı sıra 2., 3. ve daha üst leveller arası ilişkiyi yaparken hızıyla bize muhteşem sonuçlar dönebiliyor.

Üstteki örnekten gidersem, her person'un bir veya daha fazla company ile bağlı olduğu görülüyor. Burada PersonCompany adını vereceğimiz ilişkimizi, sql mantığında where şartı ile birleştirip, bu ilişkilerimizi aşağıdaki gibi oluşturabiliriz.

Match (a:Person), (b:Company)
where (b.id IN a.companies)
create (a) - [r:PersonCompany {name:a.name+'<->'+b.name}] -> (b)
return type(r), a,b
İlişkilerimizi oluşturduktan sonra Neo4j içerisindeki son görüntümüz şu şekilde olmuş oldu;



En basit seviyede Neo4j veri tabanının ne olduğunu ve kullanım esnasında sağladığı kazanımlar konusuna bu şekilde bir giriş yapmış olduk. Bunları ihtiyaca göre geliştirmek ve kullanmak sizin elinizde.

Kolay gelsin!