MongoDB ve NoSQL

MongoDB NoSQL mi? SQL’den Farkı Nedir?

MongoDB, verileri BSON belgeleri içinde saklayan belge tabanlı bir NoSQL veritabanıdır. SQL sistemleriyle arasındaki temel fark, veriyi koleksiyonlarda belge olarak ya da tablolarda satır olarak modellemesidir.

Veri Tabanım Editörlüğü · 5 dk okuma
Bu yazıda neler var?
  1. MongoDB neden NoSQL veritabanıdır?
  2. MongoDB verileri BSON belgelerinde nasıl saklar?
  3. MongoDB ile SQL veritabanları arasındaki farklar
  4. MongoDB’de şema ve ilişkiler nasıl tasarlanır?
  5. MongoDB sorguları nasıl çalışır?
  6. Hangi durumda MongoDB, hangi durumda SQL seçilir?
  7. MongoDB kullanırken sık yapılan hatalar

Evet, MongoDB bir NoSQL veritabanıdır; daha özel olarak belge tabanlıdır. Verileri BSON belgelerinde saklar ve bu belgeleri koleksiyonlarda düzenler. İlişkisel SQL sistemleri ise veriyi tablolardaki satır ve sütunlarla modeller.

MongoDB neden NoSQL veritabanıdır?

NoSQL, ilişkisel tablo modelini temel almayan veritabanı yaklaşımlarını kapsayan geniş bir terimdir. MongoDB bu yaklaşımlar içinde belge modelini kullanır. Her belge, alan adı ve değer çiftlerinden oluşur.

Örneğin bir ürün belgesinde ad, fiyat ve stok alanlarını tutabilirsiniz. Aynı koleksiyondaki başka bir ürün belgesi renk ya da beden alanı taşıyabilir. Alanların farklı olması, veri kurallarını kaldırmaz; doğrulama kurallarıyla alanları ve türlerini belirleyebilirsiniz.

MongoDB verileri BSON belgelerinde nasıl saklar?

MongoDB’de veritabanı koleksiyonları, koleksiyonlar da belgeleri içerir. Koleksiyonlar tabloları andırsa da belgelerdeki alanlar aynı olmak zorunda değildir. BSON, JSON benzeri verileri ikili biçimde temsil eder; iç içe belgeleri ve dizileri destekler.

Örneğin müşteri belgesinde ad ve e-posta alanlarını tutup adresi iç içe bir belge olarak saklayabilirsiniz. Bir sipariş belgesinde de ürünleri bir dizi içinde gösterebilirsiniz.

Birlikte okuduğunuz bilgileri aynı belgede toplamak, veri modelini uygulamanın sorgularına göre kurmanızı sağlar. Alan türlerini tutarlı belirleyin; örneğin fiyatı sayı, e-posta adresini metin olarak tanımlayın. Gerekli alanları doğrulama kurallarıyla zorunlu kılın.

MongoDB ile SQL veritabanları arasındaki farklar

Temel fark, verinin nasıl düzenlendiği ve sorgulandığıdır. İlişkisel bir SQL veritabanında kayıtları tablolara yerleştirir, tabloları anahtarlarla ilişkilendirirsiniz. MongoDB’de belgeleri koleksiyonlarda tutar; ilişkili bilgileri iç içe belgeyle veya başka belgeye başvuruyla modelllersiniz.

ÖzellikMongoDBİlişkisel SQL veritabanı
Veri birimiBSON belgesiTablo satırı
Alan düzeniBelgeler farklı alanlar taşıyabilir; doğrulama kuralı eklenebilirSütunlar ve veri türleri tanımlanır
İlişkilerİç içe belge veya belge başvurusuAnahtarlar ve JOIN sorguları
SorgulamaMongoDB Query API ve aggregation pipelineSQL sorguları

Tablodaki ayrım, tüm ürünlerin her özelliğinin aynı olduğu anlamına gelmez. PostgreSQL ve MySQL ilişkisel veritabanlarıdır; MongoDB belge modelini kullanır. İlişkisel sistemler de JSON benzeri verileri saklayabilir. Bu özellik, onları MongoDB ile aynı veri modeline dönüştürmez.

MongoDB’de şema ve ilişkiler nasıl tasarlanır?

Veri modelini, uygulamanın hangi kayıtları birlikte okuyup güncellediğine göre kurun. Bir müşterinin adresi yalnızca o müşteriyle birlikte kullanılıyorsa adresi aynı belgeye yerleştirebilirsiniz. Birçok kayıtta paylaşılan veya bağımsız güncellenen bilgiye kimlik üzerinden başvurun.

Aynı bilgiyi birden fazla belgeye kopyalarsanız tüm kopyaları güncel tutmanız gerekir. Başvuru kullanırsanız ilgili bilgiyi almak için ek sorgu veya aggregation işlemi tasarlayın. Önce okuma ve yazma örneklerinizi listeleyin, sonra belge sınırlarını belirleyin.

Esnek şema, uygulamadaki veri kurallarını ortadan kaldırmaz. Aynı alanı bir belgede sayı, diğerinde metin olarak saklamak sorguları zorlaştırır. Alan adlarını ve türlerini tutarlı seçin; gerekli değerleri doğrulama kurallarıyla denetleyin.

MongoDB sorguları nasıl çalışır?

MongoDB sorguları SQL sözdizimiyle yazılmaz. MongoDB Query API ile belgeleri filtreleyebilir, sıralayabilir ve güncelleyebilirsiniz. Uygulamanız bu işlemleri kullandığınız programlama dili için sunulan MongoDB sürücüsü üzerinden gönderir.

Veriyi süzmek, dönüştürmek veya gruplamak için aggregation pipeline kullanın. Örneğin siparişleri müşteri kimliğine göre gruplayıp her müşteri için toplam tutarı hesaplayabilirsiniz. Sık aradığınız alanlara uygun indeksleri değerlendirin; gereksiz indeksler yazma işlemlerine ek yük getirir.

SQL bilginiz tablo ve ilişki mantığını anlamanıza yardım eder, ancak MongoDB komutlarının yerini tutmaz. MongoDB’de veri yapısını ve sorgu biçimini birlikte öğrenin. SQL hakkında daha fazla bilgi için SQL öğrenme rehberine bakabilirsiniz.

Hangi durumda MongoDB, hangi durumda SQL seçilir?

Kayıtların alanları türüne göre değişiyorsa veya uygulama iç içe belgeleri sık okuyorsa MongoDB’yi değerlendirin. Ürün kataloğunda telefonun depolama kapasitesi, giysinin bedeni gibi farklı özellikleri ayrı alanlarla saklayabilirsiniz. Etkinlik kayıtları ve uygulama içeriği de belge modeline örnek olabilir.

Birbiriyle ilişkili kayıtları ayrı tablolarda sorgulamanız gerekiyorsa ilişkisel SQL veritabanını değerlendirin. Örneğin sipariş, müşteri ve ödeme kayıtlarını ayrı tablolarda tutup raporlayabilirsiniz. Karar öncesinde gereken sorguları ve güncelleme adımlarını yazın; iki modeli bu örneklerle karşılaştırın.

  • MongoDB’yi değerlendirin: Birlikte okunan, iç içe veya alanları değişken kayıtlarınız varsa belge modelini inceleyin.
  • SQL veritabanını değerlendirin: Ayrı tablolardaki kayıtlar ve ilişkisel sorgular ön plandaysa ilişkisel modeli inceleyin.
  • Modelleri karşılaştırın: Gerçek sorgularınızı örnek verilerle deneyip okuma, güncelleme ve raporlama adımlarını sınayın.

PostgreSQL’in ilişkisel yapısı için PostgreSQL rehberini, MySQL hakkında bilgi için MySQL açıklamasını inceleyebilirsiniz. Seçiminizi ürün adından çok veri modelinize ve sorgu gereksinimlerinize göre yapın.

MongoDB kullanırken sık yapılan hatalar

Yaygın bir hata, NoSQL ifadesini “şemasız” diye yorumlamaktır. MongoDB belgeleri farklı alanlar taşıyabilir; yine de alan adlarını, türleri ve zorunlu değerleri yönetmeniz gerekir. Kuralları uygulama kodunda veya doğrulama kurallarında belirleyin.

Bir diğer hata, tablo tasarımını koleksiyonlara olduğu gibi taşımaktır. Belge modelinde birlikte okunan verileri aynı belgede toplamak uygun olabilir. Buna karşılık, her ilişkili kaydı tek belgeye doldurmak güncellemeyi ve belge yönetimini zorlaştırabilir.

Sorgu ihtiyacını belirlemeden koleksiyon tasarlamayın. Arama alanlarını, sıralama biçimini ve raporlama gereksinimlerini örnek sorgularla tanımlayın. Ardından belge yapısını ve indeksleri bu sorgulara göre düzenleyin. MongoDB’nin temel sorguları için SQL yerine Query API kullanın.

Sık sorulan sorular

MongoDB birden fazla belgeyi kapsayan işlemleri destekler mi?
Evet. MongoDB, birden fazla belgeyi kapsayan işlemler için transaction desteği sunar. Birden fazla kayıttaki değişikliğin birlikte yürütülmesi gerekiyorsa bu özelliği değerlendirin. İşlem tasarımını veri modeliniz ve uygulamanın tutarlılık gereksinimleriyle birlikte planlayın.
SQL veritabanındaki veriler MongoDB’ye aktarılabilir mi?
Evet, ancak tabloları koleksiyonlara doğrudan kopyalamak veri modelini doğru aktarmayabilir. Önce tabloları, anahtarları, veri türlerini ve uygulama sorgularını inceleyin. İlişkileri iç içe belgelere mi yoksa başvurulara mı dönüştüreceğinizi belirleyin. Örnek verilerle aktarımı ve sorguları sınayın.
MongoDB’de büyük dosyalar saklanabilir mi?
Evet. Büyük dosyaları MongoDB’de saklamak için GridFS kullanılabilir. Dosya erişim biçimini, uygulamanın dosyaları nasıl sunacağını ve yedekleme planını aktarım öncesinde belirleyin. Küçük dosyalar için ikili veri saklama veya ayrı dosya depolaması seçeneklerini de değerlendirebilirsiniz.

Kaynaklar

  1. Welcome to the MongoDB Docs - MongoDB Documentation - MongoDB Docs