Giriş
Bir şekilde bu yazıya denk geldiysen doğru yerdesin dostum, lafı uzatmayı pek sevmem seni uzun yazılar arasında boğup öğrenmene engel olmak istemiyorum. Graph veritabanları konusunda türkçe kaynak bulmak oldukça zor bu sebeple bu yazı dizisine başlıyorum.
Graph veritabanların son zamanlarda popülerliği giderek artıyor. Özellik veri bilimi ve yapay zeka alanında çalışıyorsan inanılmaz şeyler yapabileceğini söyleyebilirim. Bu konularla hiç ilgin olmasa bile Neo4j veya diğer graph veritabanları ile çalışmaya başladığında ürün ve yazılım geliştirme konusunda çok farklı bir bakış açısı kazanacağını ve bu konuya daldığın için hiç pişman olmayacağının teminatını rahatlıkla verebilirim.
Başlamadan okumak istersen sana neler yapabileceğin konusunda bazı güzel konu başlıkları bırakıyorum.
- Fraud detection (Dolandırıcılık tespiti)
- Real-time recommendation engines (Gerçek zamanlı tavsiye sistemleri) ilerleyen zamanlarda bu konuda süper işler yapacağız birlikte.
İşte veri bu şekilde görüyoruz. Oldukça okunaklı ve veriyi anlamlandırmak çok kolay değil mi ?
Hadi öğrenmeye başlayalım.
Kurulum zımbırtısı
Neo4j kurması en kolay veritabanlarından bu nedenle bu aşamaları geçiyorum. Bir şekilde bunun üstesinden gelebileceğini düşünüyorum. Ben bu işleri biraz biliyorum diyorsan Docker üzerinde de başlatabilirsin ama direk bilgisayarına kurmanın bazı avantajları var. Bunu ilerleyen zamanlarda tecrübe edeceksin.
Neo4j’yi bilgisayarına kurduğunda içinde hazır olarak gelen Movie Database isminde bir veritabanı göreceksin. Bunu başlat ve Neo4j Browser yani sorgu yazdığımız ve görüntülediğimiz arayüzü açman yeterli olacaktır.
Hızlıca ilk terime bakalım.
Node: Veritabanı üzerinde veriyi tutma şeklimiz diyebiliriz sanırım. SQL veritabanlarına benzetecek olursak tablo olarak da düşünebilirsin. Bu Node’lara isim vererek veriyi sınıflandırıyoruz. Örneğin ‘Movie’, ‘Person’, ‘User’ gibi. Ancak tablo demek tanımını yapmak için yeterli değil çünkü oluşturduğun Node’lara isim vermek zorunda değilsin. Ya da birden fazla isim de verebilirsin. (Biliyorum biraz ilginç çok kafanı takma şimdilik)
Hadi ilk sorgumuzu yazıp olayı anlamaya başlayalım.
MATCH
Bu komut bize veritabanı üzerinde istediğimiz veriyi getirmeye yarıyor.
( ) : Bu şekilde node aradığını belirtiyorsun.
m : Bizim tanımladığımız değişken ismi, m yerine istediğini yazabilirsin.
:Movie : Aradığımız node’un tipini belirtiyoruz.
Özetle bana bir film getir ve bunu m değişkenine aktar demiş olduk.
return : Sorgunun sonucunda bulduğumuz m değişkenindeki node’u istediğimizi söylüyoruz.
limit : limit 1 yani bana bir tane getir yeter kardeşim dedik.
Hadi şimdi işin en güzel yerlerine dalalım beraber.
Bence bu sorguya baktığın zaman olayı anlamışsındır.
[]: İlişki aradığımızı bu şekilde belirtiyoruz. Bu arkadaşa da sınıflandırma yapmak için bir isim veriyoruz. 2 node arasında istediğin kadar ilişki kurabilir ve bu ilişkilerin altında istediğin gibi veri saklayabilirsin. Belki tahmin etmişsindir. [r:ACTED_ID] bu şekilde sorguyu düzenleseydik. Aradaki köprü altında tuttuğumuz veriyi de bir değişkene aktarabilirdik.
<> : Bu da aradığımız ilişkinin yönünü belirmemizi sağlıyor. Bunu koymadan da ilişki arayabilirsin ama bazen aradığın ilişki üzerinde yön belirtmen gerekebilir.
Örneğin:
Tamam şimdi son bir örnek daha yapıp mevzuya bir sonraki yazıda devam edelim.
Yukardaki örnekte bir film aradığımızı söylemiştik ama veritabanı bize bulduğu ilk filmi getirdi.
{} : Bu vatandaş ise aradığımızın node’u içindeki veriye göre getirmemize yardımcı oluyor.
Özetle şunu demiş olduk, Bana film tipinde node bul ve bu filmin ismi ‘The Matrix’ olsun bunu da m değişkenine aktar, bana getir.
Şimdi bir sonraki derse geçmeden denemeni istediğim bazı şeyler var.
1- ‘The Matrix’ yerine ‘the matrix’ yaz ve dene
2- :Movie bu sınıflandırmayı kullanmadan deneme yap.
Yani (m {title: “The Matrix”})
3- İlk yazdığımız sorguda Movie tipinde bir node istemiştik ve bir koşul belirtmedik. Veritabanı bize The Matrix filmini getirdi ama neden? Biraz kurcala ve bunun sebebini bulmaya çalış bakalım.
Yazıları kısa kısa tutarak seni ileri seviyeye kadar taşımayı planlıyorum. Bir sonraki yazıda görüşmek üzere umarım giriş için faydalı olmuştur.