Graph Database ve Neo4j: 40 Kayıtlı Örnek Veri Seti ile Cypher Sorguları



Graf veritabanları, verileri graf yapısı olarak depolayan ve işleyen veritabanlarıdır. Bu veritabanları, düğümler (nodelar), kenarlar (edgeler) ve özellikler (properties) kullanarak veriler arasındaki ilişkileri ifade eder. Graf veritabanlarının en bilinen örneklerinden biri Neo4j'dir.


Neo4j, açık kaynak kodlu bir graf veritabanı yönetim sistemidir. Neo4j, verileri graf yapısında saklar ve bu yapının avantajlarını, özellikle karmaşık ilişkiler ve bağlantılar içeren veri setleri için kullanır. Neo4j'nin bazı önemli özellikleri şunlardır:


Esnek Veri Modeli: Neo4j, verileri düğümler, kenarlar ve özellikler olarak depolar. Bu esnek yapı, çeşitli veri tiplerini ve karmaşık ilişkileri kolayca modellemeye olanak tanır.


Sorgu Dili (Cypher): Neo4j, Cypher adında özel bir sorgu dili kullanır. Cypher, graf verilerini sorgulamak ve manipüle etmek için güçlü ve kullanıcı dostu bir arayüz sunar.


Performans: Graf veritabanları, özellikle ilişkisel veritabanlarına kıyasla, ilişkisel sorguları çok daha hızlı işleyebilir. Neo4j, veri ilişkileri üzerinden hızlı sorgulama ve veri erişimi sağlar.


Skalabilite ve Güvenilirlik: Neo4j, büyük veri setlerini işleyebilir ve yüksek kullanılabilirlik ve veri bütünlüğü sağlar.


Uygulama Alanları: Sosyal ağ analizi, öneri sistemleri, sahtekarlık tespiti, ağ analizi ve karmaşık veri ilişkilerinin analizi gibi birçok alanda kullanılır.


Neo4j'nin kurulumu ve kullanımı görece basittir. Topluluk sürümü ücretsiz olarak sunulurken, daha gelişmiş özelliklere sahip ticari sürümleri de mevcuttur. Neo4j, veri ilişkilerini anlamak ve analiz etmek için güçlü bir araçtır ve günümüzde birçok sektörde popülerdir.


Hangi durumlarda sql databaselerden kaçınıp graph db kullanmalıyız?


SQL veritabanları ve graf veritabanları, farklı veri yapılarına ve kullanım senaryolarına hizmet eder. Belirli durumlarda SQL veritabanlarından kaçınıp graf veritabanlarını tercih etmek daha uygun olabilir. İşte bu durumlardan bazıları:


Karmaşık İlişkisel Veriler: Veri setiniz karmaşık ilişkisel yapılar içeriyorsa ve bu ilişkiler ana odak noktanızsa, graf veritabanları daha uygun olabilir. Örneğin, sosyal ağlar, öneri sistemleri veya ağ analizleri gibi.


Derinlemesine Bağlantı Analizi: Eğer veri setinizdeki bağlantıları derinlemesine analiz etmeniz gerekiyorsa (örneğin, bir kullanıcının arkadaşlarının arkadaşları gibi), graf veritabanları bu tür sorguları çok daha etkili bir şekilde işleyebilir.


Dinamik Şema Gereksinimi: Graf veritabanları, şemasız veya yarı şemalı verileri işlemek için daha uygun olabilir. Eğer veri yapınız sürekli değişiyorsa ve esnek bir şema gerekiyorsa, graf veritabanları tercih edilebilir.


Performans İhtiyaçları: Graf veritabanları, özellikle ilişkisel veritabanlarına göre, bağlantılı veriler üzerinde yapılan sorgularda genellikle daha yüksek performans sunar. Eğer çok sayıda bağlantılı veri üzerinde sorgu yapmanız gerekiyorsa, graf veritabanları daha verimli olabilir.


Yol Bulma ve Ağ Analizi: Graf veritabanları, en kısa yol bulma, ağ analizi ve benzeri görevler için daha uygun olabilir. Örneğin, lojistik, ulaşım ağları veya iletişim ağları gibi alanlarda kullanılabilir.


Polimorfik İlişkiler: Graf veritabanları, birden fazla türdeki nesneler arasındaki ilişkileri modellemek için daha esnektir. Eğer veri modeliniz polimorfik ilişkiler içeriyorsa, graf veritabanları bu ihtiyaca daha iyi yanıt verebilir.


Gerçek Zamanlı Tavsiye Sistemleri: Özellikle e-ticaret, içerik önerisi ve benzeri alanlarda, gerçek zamanlı ve dinamik öneri sistemleri için graf veritabanları daha etkili olabilir.


Her iki veritabanı türünün de avantajları ve dezavantajları vardır. Seçim yaparken, veri modelinizin gereksinimleri, uygulamanızın ölçeklendirilebilirliği, sorgu türleri ve performans ihtiyaçları gibi faktörleri dikkate almanız önemlidir.

40 kayıtlık örnek veri seti ver

Bir örnek veri seti oluşturmak için genellikle veri setinin kullanılacağı bağlam ve ihtiyaçlar önemlidir. Ancak, genel bir örnek olarak, basit bir sosyal ağ veri seti tasarlayabiliriz. Bu veri seti, 40 kullanıcıyı (düğüm) ve bu kullanıcılar arasındaki arkadaşlık ilişkilerini (kenar) içerebilir. Her kullanıcı için temel özellikler (ad, yaş, konum gibi) belirleyebiliriz.


Aşağıda, bu tür bir veri seti için basit bir örnek verilmiştir:


Kullanıcılar (Düğümler)

Kullanıcı ID: 1, Adı: "Ahmet", Yaşı: 25, Konum: "İstanbul"

Kullanıcı ID: 2, Adı: "Ayşe", Yaşı: 30, Konum: "Ankara"

Kullanıcı ID: 3, Adı: "Mehmet", Yaşı: 22, Konum: "İzmir"

...

Kullanıcı ID: 40, Adı: "Elif", Yaşı: 28, Konum: "Bursa"

Arkadaşlık İlişkileri (Kenarlar)

Kullanıcı 1 - Kullanıcı 2

Kullanıcı 1 - Kullanıcı 3

Kullanıcı 2 - Kullanıcı 4

...

Kullanıcı 39 - Kullanıcı 40

Bu veri seti, her kullanıcı için ID, Adı, Yaşı ve Konum gibi özellikleri içerir. Ayrıca, kullanıcılar arasındaki arkadaşlık ilişkileri de kenarlar olarak tanımlanmıştır. Gerçek dünya veri setleri genellikle çok daha karmaşık ve büyük olabilir, ancak bu örnek, graf veritabanlarındaki temel yapıyı ve ilişkileri göstermek için yeterlidir.


Bir Neo4j veritabanına bu veri setini yüklemek için Cypher sorgu dilini kullanabilirsiniz. Öncelikle düğümleri oluşturmak için CREATE komutlarını, ardından ilişkileri kurmak için MATCH ve CREATE komutlarını kullanabilirsiniz.


Bu veri setinden  Cypher sorgu dilini kullanarak kullanıcı 1 in arkadaşlarını sorgular mısın?


Elbette, Neo4j'de Cypher sorgu dilini kullanarak belirli bir kullanıcının arkadaşlarını sorgulamak oldukça basittir. Örneğin, kullanıcı 1'in arkadaşlarını bulmak için aşağıdaki Cypher sorgusunu kullanabiliriz:


cypher

Copy code

MATCH (u:User {id: 1})-[:FRIEND]->(friend:User)

RETURN friend

Bu sorgu, şu adımları izler:


MATCH komutu, veritabanındaki düğümler ve kenarlar arasındaki deseni eşleştirmek için kullanılır.


(u:User {id: 1})-[:FRIEND]->(friend:User) deseni, id özelliği 1 olan bir User düğümü (u) ile arkadaş (FRIEND ilişkisi) olan başka User düğümleri (friend) arasındaki ilişkiyi ifade eder.


RETURN friend komutu, sorgu sonucunda bulunan arkadaş düğümlerini döndürür.


Bu sorgu, kullanıcı 1'in tüm arkadaşlarını listeleyecektir. Burada, User düğümleri için id, name, age, location gibi özellikler tanımlanmış olabilir ve FRIEND ilişkisi, iki kullanıcı arasındaki arkadaşlık bağını temsil eder.


Unutmayın ki bu sorgu, yukarıda tanımladığımız örnek veri seti yapılandırmasına dayanmaktadır. Gerçek bir Neo4j veritabanında, düğüm ve ilişki türleri, özellik isimleri ve yapıları veritabanınızın tasarımına bağlı olarak değişebilir.


Örnek 2


Çeşitli büyük teknoloji şirketlerine başvuran kişiler, kişilerin özellikleri, şirketler, kişilerin şirketlerle yaptığı mülakatlar, mülakat sonuçlarını tanımlayan veri setleri ve ilişkiler


Bir veri seti oluşturmak için öncelikle düğüm (node) ve kenar (edge) tiplerini tanımlamak gerekir. Bu örnekte, düğümler olarak 'Adaylar' (Candidates), 'Şirketler' (Companies) ve 'Mülakatlar' (Interviews) kullanılabilir. Kenarlar, bu düğümler arasındaki ilişkileri tanımlar. Aşağıda, bu veri setinin bir örneğini ve bu düğümler arasındaki potansiyel ilişkileri bulabilirsiniz.


Düğümler (Nodes)

Adaylar (Candidates)

Özellikler: ID, Adı, Yaşı, Eğitim, Teknik Beceriler, Deneyim Yılı

Şirketler (Companies)

Özellikler: ID, Şirket Adı, Sektör, Konum

Mülakatlar (Interviews)

Özellikler: ID, Tarih, Mülakat Türü (Teknik, HR, vs.), Durum (Beklemede, Kabul, Red)

Kenarlar (Edges)

Aday-Şirket İlişkisi

Adayın başvurduğu şirket

Aday-Mülakat İlişkisi

Adayın katıldığı mülakat

Şirket-Mülakat İlişkisi

Şirketin gerçekleştirdiği mülakat

Örnek Veri Seti

Adaylar

ID: 1, Adı: "Aylin", Yaşı: 28, Eğitim: "Bilgisayar Mühendisliği", Teknik Beceriler: ["Python", "SQL"], Deneyim Yılı: 5

ID: 2, Adı: "Emre", Yaşı: 32, Eğitim: "Yazılım Mühendisliği", Teknik Beceriler: ["Java", "C++"], Deneyim Yılı: 7

...

Şirketler

ID: 1, Şirket Adı: "TeknoDev", Sektör: "Yazılım", Konum: "İstanbul"

ID: 2, Şirket Adı: "DataCorp", Sektör: "Veri Analizi", Konum: "Ankara"

...

Mülakatlar

ID: 1, Aday ID: 1, Şirket ID: 1, Tarih: "2023-01-15", Mülakat Türü: "Teknik", Durum: "Beklemede"

ID: 2, Aday ID: 2, Şirket ID: 2, Tarih: "2023-01-20", Mülakat Türü: "HR", Durum: "Kabul"

...

Bu veri seti, teknoloji şirketlerine başvuran adayların, şirketlerin ve yapılan mülakatların temel özelliklerini içerir. Bu veri seti üzerinde, adayların hangi şirketlere başvurduğunu, hangi mülakatlara katıldığını ve mülakat sonuçlarını sorgulamak mümkündür. Neo4j gibi bir graf veritabanında, bu tür verilerin ilişkisel yapısını ve karmaşıklığını etkili bir şekilde yönetebilir ve analiz edebilirsiniz.


Kenarlara örnek veri ver


Kenarlar, graf veritabanlarında düğümler (nodelar) arasındaki ilişkileri temsil eder. Önceki örneğimizde belirttiğimiz 'Adaylar', 'Şirketler' ve 'Mülakatlar' düğümleri için kenarlar oluşturacağız. Bu kenarlar, adayların şirketlere yaptığı başvuruları ve katıldıkları mülakatları temsil edecek.


Kenar Örnekleri

Aday-Şirket Kenarları (Başvurular)

Bu kenarlar, adayların hangi şirketlere başvurduğunu gösterir.


Aday ID: 1 - Şirket ID: 1 (Aylin, TeknoDev'e başvurdu)

Aday ID: 2 - Şirket ID: 2 (Emre, DataCorp'a başvurdu)

...

Aday-Mülakat Kenarları

Bu kenarlar, adayların hangi mülakatlara katıldığını gösterir.


Aday ID: 1 - Mülakat ID: 1 (Aylin, TeknoDev ile mülakat yaptı)

Aday ID: 2 - Mülakat ID: 2 (Emre, DataCorp ile mülakat yaptı)

...

Şirket-Mülakat Kenarları

Bu kenarlar, şirketlerin hangi mülakatları gerçekleştirdiğini gösterir.


Şirket ID: 1 - Mülakat ID: 1 (TeknoDev, Aylin ile mülakat yaptı)

Şirket ID: 2 - Mülakat ID: 2 (DataCorp, Emre ile mülakat yaptı)

...

Bu örnekler, bir graf veritabanında nasıl ilişkisel bağlantılar kurulacağını gösterir. Kenarlar, düğümler arasında mantıksal bağlantılar oluşturarak, veri setindeki karmaşık ilişkileri anlamamıza yardımcı olur. Özellikle, bu tür bir veri seti, işe alım süreçlerinin analizinde veya işe alım süreçlerinin iyileştirilmesinde kullanılabilir. Neo4j'de bu tür verileri sorgulamak ve ilişkileri incelemek için Cypher sorgu dilini kullanabilirsiniz.


Cypher ile Aylinin mülakat yaptığı ve başarılı olduğu şirketleri listele


Aylin'in mülakat yaptığı ve başarılı olduğu şirketleri listelemek için Cypher sorgu dilini kullanabiliriz. Bu sorgu, Aylin'in mülakatlarına ve bu mülakatların sonuçlarına odaklanacaktır. Aşağıdaki sorgu, Aylin'in (varsayalım ki Aylin'in ID'si 1) başarılı olduğu mülakatları ve bu mülakatları gerçekleştiren şirketleri döndürür:


cypher

Copy code

MATCH (c:Candidate {id: 1})-[:HAS_INTERVIEW]->(i:Interview {status: "Accepted"})-[:CONDUCTED_BY]->(company:Company)

RETURN company

Bu sorgu şu şekilde çalışır:


MATCH komutu, belirli bir deseni (pattern) eşleştirmek için kullanılır.


(c:Candidate {id: 1})-[:HAS_INTERVIEW]->(i:Interview {status: "Accepted"}) deseni, ID'si 1 olan Candidate düğümü (Aylin) ile 'Accepted' (Kabul edildi) durumunda olan Interview (Mülakat) düğümleri arasındaki ilişkiyi ifade eder.


-[:CONDUCTED_BY]->(company:Company) kısmı, bu mülakatları gerçekleştiren Company (Şirket) düğümleri ile olan ilişkiyi tanımlar.


RETURN company komutu, sorgu sonucunda bulunan şirket düğümlerini döndürür.


Bu sorgu, Aylin'in başvurduğu ve başarılı olduğu mülakatları yapan şirketlerin listesini verecektir. Unutmayın ki bu sorgunun çalışması için veritabanınızda Candidate, Interview, ve Company düğümlerinin yanı sıra HAS_INTERVIEW ve CONDUCTED_BY gibi ilişkilerin doğru şekilde tanımlanmış olması gerekmektedir.

Please Select Embedded Mode To Show The Comment System.*

Daha yeni Daha eski

نموذج الاتصال