Yepyeni Bir Veritabanı Sistemi: Neo4j

neo4j

Yıllar önce verilerimizi metin dosyalarında sakladığımız dönemlerden bu yana epey zaman geçti. Bu süreçte birçok yeni teknoloji ve algoritma geliştirildi. Şu an geldiğimiz noktada veritabanları açısından baktığımızda en popüler olanları RDBMS (ilişkiye dayalı) ve noSql (kümeli veri) sistemler. Ancak her iki yapının da bazı eksileri ve artıları var. İşte “Graph Database” ler tam da bu noktada sahneye çıkıyor. Bu iki yapının zayıf yanlarını ortadan kaldırmayı ve güçlü yanlarını birleştirmeyi hedefleyen bir sistem “Graph Database”ler. Bunun da production’a geçmiş bir örneği ve şu an belki de en çok konuşulan ismi Neo4j.

Peki Neo4j nasıl çalışır?

Neo4j ile neler yapılabilir?

Neo4j adının sonundaki ‘j’ harfinden çıkarım yapabileceğimiz üzere Java ile yazılmıştır. Dolayısıyla eğer bir java uygulama geliştiriyorsanız uygulamanız içine Neo4j’yi entegre edip kullanabilirsiniz. Bunun yanında bize bir RESTapi sağladığı için istediğiniz herhangi bir dille, istediğiniz bir platformda yazdığınız herhangi bir kodla da kullanabilirsiniz. REST api’yi kullanırken karmaşık sorgular gönderebilmeniz için “cypher” adında sql benzeri fakat sql’e göre fazlaca gelişmiş bir sorgu dili geliştirilmiştir. Cypher’ı öğrenmeniz ve güçlü bir şekilde kullanabilmeniz, çalışma alanınızı genişleterek size özgürlük sağlayacaktır.

Veri Yapısı

neo4j yazı

 

Neo4j’deki veri yapısı temel iki kavram üzerine oturtulmuştur; düğümler ve bağlantılar.

Düğümler verileri, bağlantılar ise düğümler arasındaki ilişkileri gösterir. Herhangi bir düğümün veya bağlantının birden fazla özelliği olabilir.

Bir örnekle açıklayacak olursak;

Ahmet; bir düğüm,

Ayşe; bir düğüm,

Evlilik; bir bağlantı olsun.

Evlilik bağlantısını Ahmet ile Ayşe arasında kurabiliriz ve bu bağlantıya tarih, konum vs.. gibi ek bilgiler ekleyebiliriz. Bununla beraber hem Ahmet hem Ayşe için doğum tarihleri, anne, baba adı gibi ek bilgiler ekleyebiliriz. Görüldüğü üzere, Neo4j  hem RDBMS veritabanlarının ilişkisel yapısını hem de noSql veritabanlarının veriyi alt alta kümeleyebilme özelliğini içinde barındırmaktadır.

Hız

Hız ile ilgili olarak birçok tartışma devam ediyor olsa da yapılan ölçümler bize bilgi vermeye yetecek düzeydedir. Neo4j ile bir sorgu attığınızda bu sorgu çok basit olsa bile 12 – 35ms aralıklarında sonuç döndürdüğünü görürsünüz. Oysa noSql ve RDBMS sistemlerde 1-2ms gibi süreler ölçmek mümkündür. Bu ilk başta canınızı sıkabilir ancak büyük resme baktığınızda 3 veya 4 join attığınız ve 200.000 civarı veri içeren mysql tablolarda ilişkili bir veriyi getirmek için harcayacağınız süre 200ms’nin üzerine çıkarken Neo4j’de 80ms civarında kalacaktır. Ayrıca veriyi indexleme işlemi cacheleme vs gibi işlemler Neo4j’de otomatik olarak yapılır (v2.0 ve sonrası)

Esneklik

Neo4j size noSql veritabanları kadar esnek bir yapı sunar. Yukarıda da bahsettiğim gibi hem düğümlere (node) hem de bağlantılara (relation) istediğiniz gibi veri girebilirsiniz. Herhangi bir şemaya bağımlı kalmadan yapınızı oluşturabilirsiniz. Bir şemaya bağımlı kalmamak bazı yazılımcılarca hataya açık bir ortam oluşturmak gibi görünse de günümüz sistemleri artık internet ortamındaki sayısız veriyi taşımakta yetersiz kalmaktadır. Bir şemaya bağımlı kalmak da bu verilerin akışında ek işlemler ortaya çıkarıp akışı yavaşlatmaktadır. Ayrıca veri yapısında kısıtlamalara gidilmesine neden olmaktadır.

Graph Database” felsefesinin çıkış tarihi çok eskidir fakat günlük kullanımda yeni yeni popüler olmaya başlamıştır. Bunun en büyük sebebi, artık RDBMS sistemlerin Solr, ElasticSearch gibi yan bir servis olmadan hatırı sayılır büyüklükte veriyi istenen sürelerde işleyememesidir. Her kullanılan servis de sunucuya ek bir maliyet getirir.
Neo4j’ye uygulamalarınızda bir şans vermeniz dileğiyle. Hoşçakalın.

Onur Eren Elibol