Neo4j Dersleri (2)

Buğra
3 min readOct 30, 2020

--

WHERE/OPTIONAL/SET

Tekrar merhaba

bir önceki yazıda senden denemeni istediklerimin cevapları

1- Neo4j case-sensitive olarak çalıştı, yani büyük küçük harf’e duyarlı. İleride bunu daha detaylı bir şekilde göreceğiz.

2- Node tipi vermeden de elbette çalışıyor bunun dezavantajı büyük bir veritabanı altında çok geç response vermesi olacaktır. Çünkü nerede araması gerektiğini söylemedik ve bütün nodelar arasında arama yaptı gibi düşünebilirsin. Oldukça kullanışlı bir özellik, tek bir sorgu ile bütün veritabanına sorgu atabilirsin. Zaman zaman ihtiyacımız olacak.

3- The Matrix filmini getirdi çünkü Neo4j tarafından node’a atamış bir id mevcut ve bu id 0'dı. Bu sebeple ilk node’u bize getirdi. Neo4j Browser üzerinde node’a tıklarsan <id>:0 değerini göreceksin.

Şimdi işimize bakalım

WHERE

SQL veritabanlarından aşina olduğumuz WHERE komutu ile de sorgumuzu yazmak mümkün. Buraya ‘OR’ ekleyerek ufak bir değişiklik yaptım.

Şimdi aynı sorguyu farklı bir şekilde tekrar yazalım.

Dikkat edersen aynı sonucu aldık ama bu sefer {} kullanarak sorguyu yazdık. Şimdi bir örnek daha gösterip bu kullanım ile WHERE arasındaki farklı daha net görmeni sağlayacağım.

Alt alta 2 MATCH sorgusu yazdık ve yine aynı sonucu elde ettik. Yavaş yavaş konuyu buraya getirmemin sebebine şimdi geliyoruz.

İlk MATCH sorgusuna veritabanında olmayan bir film girdim ve veritabanı bana bir sonuç dönmedi. Gördüğün üzere ilk MATCH sorgusu çalışmadığı için aslında bir sonraki sorgu işleme girmedi. Peki ya bunu nasıl çözeriz?

OPTIONAL

Bu komut yazdığımız MATCH sorgusunun zorunlu olmadığını, bir sonuç bulamazsa bile devam etmesini sağlıyor.

Şimdi biraz geri saralım ve sorguyu WHERE ile tekrar deneyelim.

Evet şimdi aradaki farkı görmen daha kolay olmuş olmalı, WHERE komutu ile OPTIONAL kullanmadan aynı sonucu elde ettik.

Hadi bir şeyleri değiştirelim

SET

Bu komut veriyi güncellememizi sağlıyor. Hemen basit bir örnek yapalım.

İşte bu kadar basit, gördüğün gibi veriyi güncelledik. Peki ya tek seferde birden fazla güncelleme yapmak istersek ?

Gördüğün gibi araya virgül atarak veriyi tek kalemde güncelledik. Hadi aynı sorgunun farklı bir yazımına daha bakıp bu yazıyı noktalayalım.

Virgül kullanmadan da aynı sorguyu yazdık, bunu göstermek istememin sebebi cypher query dili oldukça esnek bir yapıya sahip, Aynı sonuca ulaşmanın birden fazla yolu mevcut.

En iyi query en okunaklı olan mıdır?

Tabiki hayır, bu örnek için neredeyse arada bir fark yok gibi görünse de klavyende bastığın her harf bir bit daha demek. Belki bunu sana daha önce söyleyen olmamıştır, hangi veritabanı ile uğraştığının bir önemi yok. En performanslı query’i yazdıktan sonra olabildiğince az karakter kullanman daha az veri transfer ettiğin anlamına geliyor.

Bu söylediklerimin şimdilik bir önemi yok ama dakikada milyonlarca query’nin işlendiği bir sistemi kurgulayacak olursan ciddi önem kazanmaya başlıyor. Öğrenme aşamasında en okunaklı olanı yaz ama production’a çıkacak bir ürün için bu söylediklerim aklının bir kenarında dursun.

Bir sonraki yazıda görüşürüz.

--

--