Bağlantıların sorularınızı yönlendirdiği durumlarda graf veritabanları parlıyor. En uygun kullanım durumlarını, takasları ve ne zaman ilişkisel veya doküman tabanlı veritabanlarının daha uygun olduğunu öğrenin.

cypher\nMATCH (a)-[:KNOWS]->(b)-[:KNOWS]->(c)-[:KNOWS]->(a)\nRETURN a,b,c\n\n\nCypher'i kendiniz yazmasanız bile bu, grafların neden anlaşılır olduğunu gösterir: sorgu kafanızdaki resmi yansıtır.\n\n## Graf vs İlişkisel: Gerçek Fark\n\nİlişkisel veritabanları tasarlandıkları için iyidir: işlemler ve iyi yapılandırılmış kayıtlar. Veriniz tablolar halinde (müşteriler, siparişler, faturalar) düzenliyse ve çoğunlukla ID, filtre ve agregasyonlarla erişiliyorsa, ilişkisel sistemler genellikle en basit, en güvenli tercihtir.\n\n### JOIN problemi “JOIN'ler kötü” değil—derin JOIN'ler sorun\n\nJOIN'ler nadiren ve yüzeysel olduğunda sorun değildir. Sürtünme, en önemli sorularınız sürekli olarak birçok JOIN gerektirdiğinde başlar.\n\nÖrnekler:\n\n- “Hangi müşteriler bu tedarikçiyle iki aracı üzerinden bağlantılı satıcılardan alışveriş yaptı?”\n- “Bu hesabın yakın kişileri tarafından kullanılan cihazlarla aynı ağ paylaşan tüm cihazları bulun.”\n\nSQL'de bunlar uzun sorgulara, tekrarlayan self-JOIN'lere ve karmaşık mantığa dönüşebilir. Ayrıca ilişki derinliği arttıkça ayarlaması zorlaşır.\n\n### Graflar çok-adımlı “yürüyüşleri” birinci sınıf yapar\n\nGraf veritabanları ilişkileri açıkça depolar, bu yüzden çok-adımlı traversallar doğal bir işlemdir. Sorgu zamanında tabloları birbirine dikişlemek yerine bağlı düğümler ve kenarlar boyunca gezersiniz.\n\nBu genellikle şunları sağlar:\n\n- Çok-adımlı desenler için daha kısa sorgular (sorgu soruya daha çok benzer)\n- Değişken derinlikli yolları keşfederken daha öngörülebilir karmaşıklık (örn. 2 ila 6 atlama)\n\n### Pratik bir başparmak kuralı\n\nEkibiniz sıkça çok-adımlı sorular soruyorsa—“bağlı”, “aracılığıyla”, “aynı ağda”, “N adım içinde”—graf veritabanı düşünmeye değerdir.\n\nÇekirdek iş yükünüz yüksek hacimli işlemler, sıkı şemalar, raporlama ve basit JOIN'ler ise ilişkisel genellikle daha iyi bir başlangıçtır. Birçok gerçek sistem her ikisini birlikte kullanır; bkz. /blog/practical-architecture-graph-alongside-other-databases.\n\n## Graf Veritabanı Yanlış Araç Olduğunda\n\nGraf veritabanları ilişkiler “spotlight” olduğunda parlar. Uygulamanızın değeri bağlantıları dolaşmaya bağlı değilse (kim-kimi biliyor, öğeler nasıl ilişkili, yollar, mahalleler), graf ek karmaşıklık getirir ve çok az kazanç sağlar.\n\n### Çoğunlukla tek-kayıt sorgulamaları ile basit CRUD\n\nİsteklerin çoğu “ID ile kullanıcı al”, “profili güncelle”, “sipariş oluştur” gibi ise ve ihtiyaç duyulan veriler tek bir kayıtta veya öngörülebilir küçük bir tablo setinde yaşıyorsa, graf genellikle gereksizdir. Düğümleri ve kenarları modellemek, traversalları ayarlamak ve yeni sorgu tarzını öğrenmekle zaman harcarsınız; oysa ilişkisel veritabanı bu deseni verimli ve tanıdık araçlarla ele alır.\n\n### Ağırlıklı olarak agregasyon odaklı raporlama/BI\n\nAylık gelir, bölgeye göre siparişler, kanala göre dönüşüm oranı gibi toplamlar, ortalamalar ve gruplanmış metrikler içeren panolar genellikle SQL ve sütunlu analitiklere daha uygundur. Graf motorları bazı agregat sorulara cevap verebilir, ama ağır OLAP tarzı iş yükleri için nadiren en kolay veya en hızlı yol olurlar.\n\n### Güçlü işlem ihtiyaçları ve “SQL-native” özellikler\n\nKarmaşık JOIN'ler, katı kısıtlar, gelişmiş indeksleme stratejileri, saklı prosedürler veya yerleşik ACID desenlerine sıkı bağımlılık varsa ilişkisel sistemler genelde doğal tercihtir. Birçok graf veritabanı işlemleri destekler ama etrafındaki ekosistem ve operasyonel kalıplar ekiplerin alıştığıyla tam tutarlı olmayabilir.\n\n### Anlamlı bağlantıları az olan bağımsız kayıtlar\n\nVeriniz büyük ölçüde bağımsız varlıklar (biletler, faturalar, sensör okumaları) ve az çapraz bağlantı içeriyorsa graf modeli zorlayıcı gelebilir. Bu durumlarda temiz bir ilişkisel şema (veya belge modeli) üzerine odaklanın ve ilişki-ağırlıklı sorular merkezî hale gelirse grafı sonra düşünün.\n\nİyi bir kural: üst sorgularınızı “bağlı”, “yol”, “mahalle” veya “öner” gibi kelimeler kullanmadan tanımlayabiliyorsanız, graf veritabanı ilk tercih olmayabilir.\n\n## Seçmeden Önce Bilmeniz Gereken Takaslar\n\nGraf veritabanları bağlantıları hızlı izlemenizi sağlarken, bu gücün bir maliyeti var. Karar vermeden önce grafların verimli olmadığı, daha pahalı olduğu veya günlük işletimde farklı olduğu alanları anlamak yardımcı olur.\n\n### Maliyet ve ayak izi\n\nGraf veritabanları genellikle “atlamaları” hızlı yapmak için ilişkileri özel şekilde depolar ve indeksler. Bunun bedeli, yaygın aramalar için indeksler eklediğinizde ve ilişki verisini erişilebilir tuttuğunuzda ilişkisel bir kurulumla karşılaştırıldığında daha fazla bellek ve depolama olabilir.\n\n### Her sorgu daha hızlı olmaz\n\nİş yükünüz bir e-tablo gibiyse—büyük tablo taramaları, milyonlarca satır üzerinde raporlama sorguları veya ağır agregasyon—graf veritabanı aynı sonucu elde etmek için daha yavaş veya daha maliyetli olabilir. Graflar traversallar için optimize edilmiştir (“kim neye bağlı?”), bağımsız kayıtların büyük partilerini işlemeye değil.\n\n### Operasyonel farklılıklar\n\nOperasyonel karmaşıklık gerçek bir faktör olabilir. Yedeklemeler, ölçekleme ve izleme ilişkisel sistemlerde alışkın olduğunuzdan farklıdır. Bazı graf platformları en iyi şekilde dikey olarak (daha güçlü makinelerle) ölçeklenir; diğerleri yatay ölçeklemeyi destekler ama tutarlılık, çoğaltma ve sorgu desenlerinde dikkat gerektirir.\n\n### Yetenekler ve araçlar\n\nEkibiniz yeni modelleme kalıpları ve sorgu yaklaşımlarını (ör. property graph modeli ve Cypher gibi diller) öğrenmek için zamana ihtiyaç duyabilir. Öğrenme eğrisi yönetilebilir, fakat özellikle olgun SQL tabanlı raporlama iş akışlarını değiştiriyorsanız maliyetli olabilir.\n\nPratik bir yaklaşım: ilişki verisinin ürün olduğu yerlerde graf kullanın ve raporlama, agregasyon ve tablolaşmış analizler için mevcut sistemleri tutun.\n\n## Veri Modelleme Temelleri: Düğümler, Kenarlar ve Şemalar\n\nGraf modellemeyi düşünmenin kullanışlı bir yolu basit: düğümler şeylerdir, kenarlar ise şeyler arasındaki ilişkilerdir. İnsanlar, hesaplar, cihazlar, siparişler, ürünler, konumlar—bunlar düğümlerdir. “Satın aldı”, “şuradan giriş yaptı”, “birlikte çalışır”, “ebeveynidir”—bunlar kenarlardır.\n\n### Property graph vs. RDF üçlüleri\n\nÇoğu ürün-odaklı graf veritabanı property graph modelini kullanır: hem düğümler hem de kenarlar özelliklere (anahtar–değer alanlarına) sahip olabilir. Örneğin bir PURCHASED kenarı date, amount ve channel saklayabilir. Bu, “detaylı ilişkileri” modellemeyi doğal kılar.\n\nRDF bilgiyi üçlüler olarak temsil eder: subject – predicate – object. Birlikte çalışabilir sözlükler ve sistemler arası bağlantı için iyidir, ama ilişki detaylarını genellikle ek düğümlere/üçlüklere kaydırır. Pratikte, RDF sizi ortak ontolojilere ve SPARQL kalıplarına yönlendirirken property graph uygulama verisine daha yakın hissedilir.\n\n### Sorgu dilleri sade terimlerle\n\n- Cypher (property graph'larda popüler) bulmak istediğiniz deseni andıran bir okuma sunar: “(Customer)-[PURCHASED]->(Product).”\n- Gremlin adım-adım gezinme gibidir: buradan başla, kenarları böyle yürü, filtrele, sonra topla.\n- SPARQL RDF dünyasının sorgu dilidir; üçlüler üzerinde desen eşleştirme yapar ve genellikle paylaşılan sözlükleri kullanır.\n\nErken aşamada sözdizimini ezberlemeniz gerekmez—önemli olan graf sorgularının genellikle yollar ve desenler olarak ifade edildiğidir, tablo JOIN'leri olarak değil.\n\n### Graf sistemlerinde “şema” ne demektir\n\nGraflar genellikle şema esnekliği sunar; yeni bir düğüm etiketi veya özellik eklemek ağır bir geçiş gerektirmez. Ancak esneklik disiplin gerektirir: adlandırma kuralları, zorunlu özellikler (örn. id) ve ilişki türleri için kurallar belirleyin.\n\n### İlişki türleri, yön ve özellikler\n\nAnlamı açıklayan ilişki türleri seçin (“FRIEND_OF” vs “CONNECTED”). Anlamı netleştirmek için yön kullanın (örn. follower -> creator FOLLOWS) ve ilişki kendi gerçeğini taşıyorsa kenar özellikleri ekleyin (zaman, güven, rol, ağırlık).\n\n## Sorununuzun İlişkiye Dayalı Olup Olmadığını Nasıl Anlarsınız\n\nBir problem “ilişkiye dayalı”dır cuando zor kısım kayıtları saklamak değil—şeylerin nasıl bağlandığını anlamak ve bu bağlantıların aldığınız yola göre nasıl anlam değiştirdiğini kavramaktır.\n\n### Tablo değil, sorularla başlayın\n\nİlk olarak paydaşların sık sorduğu en önemli 5–10 soruyu düz dilde yazın. İyi graf adayları genellikle “bağlı”, “aracılığıyla”, “benzer”, “N adım içinde” veya “kim başkasını” gibi ifadeler içerir.\n\nÖrnekler:\n\n- “Hangi müşteriler paylaşılan cihazlar ve adresler yoluyla bu dolandırıcılık çetesine bağlı?”\n- “X'i görüntüleyen kişilerin sıklıkla birlikte satın aldığı ürünler nelerdir?”\n\n### Soruyu varlıklara ve etkileşimlere çevirin\n\nSorularınız olduğunda isimleri ve fiilleri eşleyin:\n\n- Ana varlıklar düğümler olur (Customer, Account, Device, Product, Supplier).\n- Etkileşimler ilişkiler olur (PAID_WITH, LOGGED_IN_FROM, BOUGHT, SUPPLIES).\n\nSonra neyin ilişki neyin düğüm olması gerektiğine karar verin. Pratik bir kural: eğer bir şey kendi özniteliklerine sahipse ve birçok tarafı bağlıyorsa onu düğüm yapın (ör. bir “Order” veya “Login event” detay taşıyorsa ve birçok varlığa bağlıysa).\n\n### Filtreleme ve puanlamayı kolay yapın\n\nSonuçları daraltmak ve alaka düzeyini sıralamak için ek özellikler ekleyin. Yüksek değerli tipik özellikler: zaman, tutar, durum, kanal, güven skoru.\n\nEğer önemli sorularınızın çoğu çok-adımlı bağlantılar artı bu özelliklerle filtreleme gerektiriyorsa, muhtemelen ilişkiye dayalı bir probleminiz var ve graf veritabanları uygundur.\n\n## Pratik Mimari: Grafı Diğer Veritabanlarıyla Yan Yana Kullanma\n\nÇoğu ekip her şeyi grafla değiştirmez. Daha pratik yaklaşım, “kayıt sistemi”nde (çoğunlukla SQL) olduğu gibi bırakmak ve ilişki-ağırlıklı sorular için özel bir motor olarak graf veritabanı kullanmaktır.\n\n### Kaynak gerçeği SQL'de tutun\n\nİşlemler, kısıtlar ve kanonik varlıklar (müşteriler, siparişler, hesaplar) için ilişkisel veritabanınızı kullanın. Sonra graf veritabanına sadece bağlantılı sorgular için gerekli düğüm ve kenarları yansıtın.\n\nBu, denetimi ve veri yönetişimini basit tutarken hızlı traversal sorgularının kilidini açar.\n\n### Bir özellik için graf kurun, tüm şirket için değil\n\nGraf veritabanı, şu gibi açıkça sınırlı bir özellik bağlandığında parlak olur:Bir özellik, bir ekip ve ölçülebilir bir sonuçla başlayın. Değer kanıtlanırsa sonra genişletebilirsiniz.\n\nEğer darboğaz prototip göndermekse (modeli tartışmaktan ziyade), Koder.ai gibi bir vibe-coding platformu hızlıca graf destekli basit bir uygulama kurmanıza yardımcı olabilir: sohbetle özelliği tanımlarsınız, React UI ve Go/PostgreSQL arka uç üretir ve veri ekibiniz graf şemasını ve sorguları doğrularken yineleyebilirsiniz.\n\n### Senkronizasyon stratejileri: toplu vs gerçek-zamana-yakın\n\nGrafın ne kadar güncel olması gerekiyor?
A graph database stores data as nodes (entities) and relationships (connections) with properties on both. It’s optimized for questions like “how is A connected to B?” and “who is within N steps?” rather than primarily for tabular reporting.
Çünkü ilişkiler gerçek, sorgulanabilir nesneler olarak saklanır (sadece yabancı anahtar değerleri değil). Bir ilişkiye date, amount, risk_score gibi özellikler ekleyebilir ve birden fazla atlamayı verimli şekilde izleyebilirsiniz; bu da bağlantı-ağırlıklı soruları modellemeyi ve sorgulamayı kolaylaştırır.
İlişkisel veritabanları ilişkileri dolaylı olarak (yabancı anahtarlarla) temsil eder ve çok adımlı sorular genellikle birden fazla JOIN gerektirir. Graf veritabanları bağlantıları verinin yanında tutar, bu yüzden değişken derinlikteki gezintiler (ör. 2–6 atlama) genellikle daha doğrudan ifade edilir ve bakımı daha kolaydır.
Bir graf veritabanını, çekirdek sorularınız yollar, komşuluklar ve motifler hakkında olduğunda kullanın:
Graf-dostu sorgular genelde şunları içerir:
Genellikle şu iş yüklerinde graf veritabanı yanlış tercihtir:
Bu durumlarda ilişkisel veya analitik sistemler genellikle daha basit ve daha ucuzdur.
Bir ilişkiyi kenar (edge) olarak modelleyin cuando esas görevi iki varlığı birbirine bağlamak ise ve kendi özellikleri olabilir (zaman, rol, ağırlık). Bir nesne olarak modelleyin cuando o bir olay veya birçok varlığa bağlanan, çok özniteliğe sahip bir varlık ise (ör. bir Order veya Login olayı; kullanıcı, cihaz, IP ve zamanla ilişkilendirildiğinde).
Beklenen takaslar şunlardır:
Property graph'larda hem düğümler hem de ilişkiler özelliklere (anahtar–değer alanlarına) sahip olabilir; bu, PURCHASED gibi bir kenarın date, amount, channel saklamasını doğal kılar. RDF ise bilgiyi üçlüler (subject–predicate–object) olarak temsil eder ve birlikte çalışabilir sözlükler ile veri bağlama konusunda güçlüdür; ancak ilişki detaylarını genellikle ek düğümlere/üçlüklere taşır. Seçim, uygulama-odaklı ilişki özelliklerine mı (property graph) yoksa birlikte çalışabilir anlamsal modellemeye mi (RDF) ihtiyacınız olduğuna bağlıdır.
Mevcut sistemi (çoğunlukla SQL) kaynak otoritesi olarak tutun; sonra ilişkisel görünümü graf veritabanına yansıtın—sadece bağlantı-sorguları için gerekli düğümler ve kenarlar. Senkronizasyon toplu veya akış üzerinden yapılabilir; kararlı kimlikler kullanın ve başarıyı (latency, sorgu karmaşıklığı, geliştirici zamanı) ölçün. Görünür metin: /blog/practical-architecture-graph-alongside-other-databases ve /blog/getting-started-a-low-risk-pilot-plan.
Toplu güncellemeler (saatlik/gecelik) daha basittir ve analitik, keşif ve birçok öneri motoru için yeterlidir.\n- Gerçek-zamana-yakın akışlar (dakika/saniye) dolandırıcılık algılama grafları ve operasyonel kararlar için uygundur.\n\nYaygın desen: SQL'e yazın → değişiklik olayları yayınlayın → grafı güncelleyin.\n\n### Tutarlı kimlikler ve net sahiplik\n\nKimlikler kaydığı zaman grafikler karışır.\n\nSistemler arasında eşleşen kararlı kimlikler tanımlayın (ör. customer_id, account_id) ve hangi alanın/ilişkinin kime ait olduğunu belgeleyin. Eğer iki sistem aynı kenarı oluşturabiliyorsa (ör. “knows”), hangi tarafın üstün olduğunu kararlaştırın.\n\nPilot planlıyorsanız, kademeli dağıtım için bkz. /blog/getting-started-a-low-risk-pilot-plan.\n\n## Başlarken: Düşük Riskli Pilot Planı\n\nBir graf pilotu deney gibi hissetmeli, yeniden yazma gibi değil. Amaç, ilişki-ağırlıklı sorguların daha basit ve hızlı olup olmadığını kanıtlamak—tüm veri yığınına bahis yapmak değil.\n\n### 1) Küçük, yüksek değerli bir dilim seçin\n\nZaten sıkıntı yaratan, çok fazla JOIN veya kırılgan SQL içeren sınırlı bir veri kümesiyle başlayın. Tek bir iş akışına sınırlı tutun (örneğin: müşteri ↔ hesap ↔ cihaz veya kullanıcı ↔ ürün ↔ etkileşim) ve uçtan uca cevaplanmasını istediğiniz bir avuç sorgu tanımlayın.\n\n### 2) Başlamadan önce başarı metriklerini belirleyin\n\nHızı ölçmenin ötesinde ölçün:
Sorgu karmaşıklığı: Bugün kaç satır, kaç JOIN veya ara tablo gerekiyor vs. grafta ne kadar?\n- Gecikme: Gerçekçi veri hacminde sonuç döndürme süresi.\n- Geliştirici zamanı: Gereksinimler değiştiğinde sorguları oluşturmak ve değiştirmek ne kadar sürüyor?\n\n“Önce” sayıları adlandıramazsanız “sonra”ya güvenmezsiniz.\n\n### 3) Modeli amaçlı tutun (graf yayılmasından kaçının)\n\nHer şeyi düğüm/kenar yapma tuzağına düşmeyin. “Graf yayılması”na dikkat edin: net bir sorgu ihtiyacı olmayan çok fazla düğüm/kenar tipi. Her yeni etiket veya ilişki yerini, gerçek bir sorunu çözerek kazansın.\n\n### 4) Yönetimi pilotun parçası sayın\n\nGizlilik, erişim kontrolü ve veri saklama politikasını erken planlayın. İlişki verisi bireysel kayıtlardan daha fazlasını açığa çıkarabilir (ör. davranışı ima eden bağlantılar). Kimlerin neyi sorgulayabileceğini, sonuçların nasıl denetleneceğini ve verinin gerektiğinde nasıl silineceğini tanımlayın.\n\n### 5) Mevcut veritabanınızla paralel çalıştırın\n\nGrafı beslemek için basit bir senkronizasyon (toplu veya akış) kullanın; mevcut sistem kaynak otoritesi olarak kalsın. Pilot değer kanıtladığında kapsamı dikkatle genişletebilirsiniz—her seferinde bir kullanım durumu.\n\n## Hızlı Karar Kontrol Listesi: İlişkilere Graf Kullanın\n\nBir veritabanı seçerken teknolojiyle başlamayın—cevaplamanız gereken sorularla başlayın. Graf veritabanları en zor problemleriniz bağlantılar ve yollar hakkındaysa parlar, sadece kayıt saklamak değil.\n\n### Bu ilişkiye dayalı mı diye hızlı kontrol listesi\n\nYatırım yapmadan önce uygunluğu kontrol etmek için bu listeyi kullanın:\n\n- İlişki derinliği: Cevap almak için rutin olarak 2+ atlama (A→B→C→D) takip etmeniz gerekiyor mu?\n- Sorgu desenleri: Ana sorularınız desenler (örn. “aynı işvereni ve telefonları paylaşan kişiler”) ile ilgili mi yoksa tek tablo filtreleriyle mi?\n- Güncelleme sıklığı: İlişkiler sık değişiyor mu ve bu değişikliklerin hızlı yansıması gerekiyor mu?\n- Ölçek: Veri seti yeterince büyük mü, birçok tabloyu JOIN etmek (veya uygulama kodunda birleştirmek) yavaş, maliyetli veya kırılgan hale geldi mi?\n\nÇoğuna “evet” yanıtı verdiyseniz graf güçlü bir uyum sağlayabilir—özellikle çok-adımlı desen eşleştirmeye (ör. iki varlık arasındaki en kısa yolu bulma, 3 adım içindeki cihaz bağlantılarını gösterme, komşulara dayalı öneriler) ihtiyacınız varsa.\n\n### SQL/NoSQL ile devam etmeniz gerektiği durumlar\n\nİşiniz çoğunlukla ID/email ile basit sorgular veya agregasyonlar (“aylık toplam satış”) ise ilişkisel veritabanı veya anahtar-değer/doküman deposu genellikle çalıştırması daha basit ve ucuzdur.\n\n### Kararı riskten arındırma yolları\n\nEn önemli 10 iş sorusunu düz cümlelerle yazın, sonra bunları gerçek veride küçük bir pilotta test edin. Sorguları zamanlayın, ifade etmesi zor olanları not alın ve model değişikliklerinin kısa bir kaydını tutun. Pilotunuz çoğunlukla “daha fazla JOIN” veya “daha fazla önbellekleme” oluyorsa grafın fayda sağlayabileceğinin işaretidir. Eğer çoğu soru sayım ve filtreleyse, büyük ihtimalle graf gerekli değildir.