Kurs
Dijital çağda üretilen veri miktarı patlarken, veritabanları büyük miktarda veriyi depolamak, yönetmek ve analiz etmek için kritik öneme sahiptir. Genel olarak iki tür veritabanı vardır: SQL ve NoSQL veritabanları.
SQL veritabanları yapılandırılmış bir format kullanır ve veriler şemalara sahip tablolarda düzenlenir. SQL veritabanlarından farklı olarak, NoSQL veritabanları yarı yapılandırılmış ve yapılandırılmamış verileri depolamak için esnek şema sunar. Günümüzün dijital ortamında üretilen muazzam veriyi yönetmek ve ondan yararlanmak için gerekli altyapıyı sağlarlar.
Bu kapsamlı rehber, NoSQL veritabanlarının temellerini ve sektörde mevcut örneklerle farklı NoSQL veritabanı türlerini ele alacaktır. Bu temelleri kavradıktan sonra, popüler bir NoSQL veritabanı olan MongoDB'ye dalacak ve CRUD (Create, Retrieve, Update ve Delete) işlemlerinin nasıl yapılacağını öğreneceğiz.
NoSQL nedir?
NoSQL, “Not Only SQL” ifadesinin kısaltmasıdır ve ilişkisel veritabanlarının sınırlamalarını gidermek için oluşturulmuştur. İlişkisel veritabanları katı bir yapıyı izler, tablo biçimindedir ve veri işleme için SQL (Structured Query Language) kullanır.
NoSQL veritabanları, yarı yapılandırılmış ve yapılandırılmamış verileri depolamak için daha esnek bir yaklaşım sunar.
NoSQL veritabanlarının temel avantajı, değişen yapılara sahip büyük veri hacimlerini işlemek için uygun olmalarıdır. NoSQL veritabanları şemasızdır; bu da daha fazla çeviklik ve ölçeklenebilirlik sağlar.
Ancak bu faydalar bazı ödünlerle gelir. Tutarlılıkları zayıftır ve karmaşık sorgular için sınırlı destek sunarlar. Bu sınırlamalara rağmen sağladıkları avantajlar nedeniyle yaygın olarak kullanılırlar ve SQL veritabanlarını tamamlarlar.
SQL ve NoSQL veritabanları arasındaki temel farklar ve hangisini ne zaman seçeceğinize dair bazı ipuçlarını ayrı bir eğitimden okuyabilirsiniz.
NoSQL Veritabanı Türleri
Farklı kullanım senaryolarının ihtiyaçlarını karşılamak için NoSQL veritabanları, verileri düzenlemek ve erişmek amacıyla çeşitli veri modelleri kullanır. İşte 4 yaygın NoSQL veritabanı türü.
- Anahtar-değer çifti tabanlı NoSQL veritabanlarının en basit biçimidir. Veriler anahtar ve değer çiftleri olarak saklanır ve anahtar kullanılarak alınabilir. Örnekler arasında Redis ve Amazon DynamoDB bulunur.
- Sütun odaklı veritabanları verileri satırlar yerine sütunlarda düzenler. Bu yapı, verilerin sütunlara göre alınmasında etkilidir. Apache Cassandra, HBase ve Google Bigtable sütun odaklıdır.
- Graf tabanlı veritabanları verileri düğümler, kenarlar ve özelliklerden oluşan grafik yapılarında saklar. Neo4j ve Amazon Neptune popüler graf tabanlı veritabanlarıdır.
- Belge odaklı verileri JSON benzeri belgeler olarak saklar. Bir belgenin yapısı değişebilir ve hatta iç içe geçmiş veriler içerebilir. Bu, yaygın olarak kullanılan bir NoSQL veritabanı türüdür. Örnekler arasında MongoDB ve CouchDB yer alır.
Farklı veritabanı türleri hakkında daha fazla bilgi edinmek için NoSQL Veritabanları: Her Veri Bilimcisinin Bilmesi Gerekenler eğitimimize bakmanızı öneririz.
NoSQL'in ne olduğunu ve NoSQL veritabanı türlerini öğrendikten sonra, sıra NoSQL veritabanlarıyla uygulamalı çalışmaya geliyor.
NoSQL Eğitimi: Bir Blog Platformu için NoSQL Veritabanı Tasarlama
Ele aldığımız kavramları kavramak ve denemek için pratik, gerçek dünyadan bir örneğe dalmak çok önemlidir. Hadi bir NoSQL eğitimini adım adım inceleyelim.
Diyelim ki kendi blog platformunuzu kurmakla ilgileniyorsunuz. Blog yazıları oluşturmak, yorumlara izin vermek ve bunları güncel tutmak istiyorsunuz. Verilerin yapılandırılmamış olduğunu bildiğiniz için, elinizdeki kullanım durumu için MongoDB gibi bir NoSQL veritabanının uygun olacağına dair bir fikriniz var.
MongoDB, açık kaynaklı bir NoSQL veritabanıdır. Tablolar yerine verileri JSON benzeri belgelerde saklar. Bu, karmaşık yapıların ve ilişkilerin kolayca temsil edilmesini sağlar. Bloglarda bulunması muhtemel metin, sayı veya görsel gibi farklı veri türlerini yönetmek kolaydır.
Hadi, makinenize MongoDB kurulumuyla başlayalım.
1. MongoDB'yi kurma
MongoDB'yi kurmak oldukça basittir. resmi MongoDB web sitesinden indirip kurabiliriz. Yönergeler farklı işletim sistemleri için değişir, bu nedenle resmi dokümanlardaki işletim sisteminize uygun kurulum talimatlarını kontrol edin.
Kurulumdan sonra MongoDB'yi başlatın. İşletim sisteminize göre terminali açıp aşağıdakileri yazmanız yeterlidir:
// Linux
sudo systemctl start mongod
//Mac OS
brew services start mongodb-community@7.0
Aşağıda gösterildiği gibi “Successfully started” diyen bir çıktı alacağız.
![]()
Çıktı: MongoDB başlatılıyor. (Bu ve aşağıdaki tüm görseller Yazar'a aittir)
MongoDB kurulumu, MongoDB veritabanıyla etkileşim kurmak için kullanabileceğimiz mongosh adlı bir MongoDB kabuğunu içerir. Dolayısıyla ek bir kurulum olmadan kullanabiliriz.
Aşağıdaki komutu terminalinizde çalıştırarak MongoDB kabuğunu başlatın:
mongosh
mongosh komutunu çalıştırmak, veritabanınıza bağlantıyı belirten aşağıdaki çıktıyı verecektir.

MongoDB kabuğunu başlatın.
MongoDB kurulu olduğuna göre, veri modelimizi tanımlamaya geçeceğiz.
2. Veri modelini tanımlama
“blog” adlı bir veritabanı ve “posts” ile “comments” adlarında iki koleksiyon oluşturacağız. “posts” koleksiyonu blog girişlerini, “comments” koleksiyonu ise bu yazılara yapılan yorumları saklamak içindir.
Her gönderi belgesinde başlık, içerik, yazar ve oluşturulma tarihi alanları; her yorum belgesinde ise yorum içeriği, yazar ve ilişkili gönderi kimliği alanları bulunacaktır.
Mevcut tüm veritabanlarını listelemek için kabukta show dbs komutunu çalıştırın. MongoDB'yi ilk kez kullanıyorsanız aşağıdaki çıktıyı göreceksiniz.

Mevcut veritabanlarını listeleyin.
Varsayılan olarak test veritabanını kullanıyor olacağız. Test veritabanında olsak da, veritabanı ancak ona bir koleksiyona belge eklediğimizde oluşturulur.
Yeni bir veritabanı oluşturmak için use <database_name> komutunu çalıştırın.
Örneğimizde veritabanımızın adı olarak “blog” kullanacağız. Yeni veritabanını oluşturmak için use blog komutunu çalıştırın. Yukarıda belirtildiği gibi, veritabanına bir koleksiyon ekleyene kadar show dbs komutu yeni veritabanını göstermeyecektir. Bu nedenle bir koleksiyon oluşturmak için aşağıdaki komutları çalıştırın.
// create database
use blog
// create collection
db.createCollection("posts")
db.createCollection("comments")
use blog komutunu çalıştırmak veritabanını “test”ten “blog”a geçirir.

Çıktı: Veritabanı ve koleksiyon oluşturma.
Koleksiyonları oluşturduktan sonra, show dbs komutuyla bunu doğrulayabiliriz.

Veritabanlarının listesi.
Bir veritabanı ve koleksiyonları başarıyla oluşturduk.
3. CRUD işlemlerini uygulama
MongoDB, verilerle etkileşim için dört temel CRUD (Create, Read, Update, Delete) işlemini destekler:
- Create: MongoDB'de bir belge oluşturmak için, onu
insertOne()veyainsertMany()yöntemiyle bir koleksiyona ekleriz. Belgeler herhangi bir geçerli JSON verisini içerebilir; bu da esnek şema tasarımına olanak tanır. - Read: MongoDB'den veri okumak için
find()yöntemiyle sorgu yaparız. Sorgular belirtilen ölçütlere göre belgeleri filtreleyip sonuçları döndürür. - Update: Belgeleri güncellemek için
updateOne()veyaupdateMany()kullanılabilir. Bu yöntem, esnek veri manipülasyonu sağlar. - Delete: Bir koleksiyondan belgeleri silmek için
deleteOne()veyadeleteMany()kullanırız. Silme işlemleri, belirli bir alan değerinin eşleşmesi gibi belirtilen ölçütlere göre gerçekleştirilir.
Komutları gördüğümüze göre, bunları blog örneğimiz üzerinden pratiğe dökelim.
4. Bir blog yazısı oluşturma
MongoDB veritabanına belge eklemenin iki yöntemi vardır.
insertOne(): Bu yöntem belgeleri tek tek eklerinsertMany(): Bu yöntemle birden fazla belgeyi tek seferde ekleyebiliriz.
Her iki yöntemi de kullanarak veritabanına blog yazıları ekleyelim. Aşağıdaki kodda, “posts” koleksiyonunda belgeler oluşturuyoruz. Her belgede başlık, içerik, yazar ve oluşturulma tarihi bulunur.
// use insertOne() method to insert one document to the "posts" collection
db.posts.insertOne({
title: "Introduction to NoSQL with MongoDB",
content: "MongoDB is a NoSQL database that stores data in JSON format",
author: "Arunn Thevapalan",
createdAt: new Date()
})
// array of blog post documents
var postsData = [
{
title: "Getting Started with MongoDB",
content: "Learn the basics of MongoDB",
author: "Arunn Thevapalan",
createdAt: new Date()
},
{
title: "Advanced MongoDB Techniques",
content: "Explore advanced features of MongoDB",
author: "Jim Murphy",
createdAt: new Date()
}
];
// use insertMany() to insert multiple documents
db.posts.insertMany(postsData);
Bu çıktı, MongoDB sunucusunun insertOne isteğini başarıyla aldığını ve işlediğini gösterir.
Çıktı: Bir koleksiyona tek belge ekleme.
Benzer şekilde, aşağıdaki çıktı insertMany isteğinin başarıyla işlendiğini gösterir.
Çıktı: Bir koleksiyona birden fazla belge ekleme.
Create işlemine hakim olduğumuza göre, sırada Read işlemi var.
5. Blog yazılarını sorgulama
Koleksiyonlardan veri almak için find() yöntemini kullanabiliriz. “posts” koleksiyonumuzdan yukarıdaki blog yazılarını almak için aşağıdaki komutu çalıştırın.
db.posts.find()
find yöntemi “posts” koleksiyonundaki tüm belgeleri getirir. Aşağıdaki çıktı, önceki adımda eklediğimiz tüm belgeleri gösterir.

Çıktı: Bir koleksiyondan belgeleri alma.
6. Bir gönderiye yorum ekleme
Bir gönderiye birkaç yorum eklemek istediğimizi varsayalım; “comments” koleksiyonuna bir belge ekleyebiliriz. Yorumlar bloglarla ilişkilidir, bu nedenle gönderi kimliğine bir referans tutacağız.
// use an object id from any of the above entries
var postId = ObjectId("664bfc27f74ef93812b2179e")
// insert one comment
db.comments.insertOne({
postId: postId,
content: "Informative article!",
author: "Anne Smith",
createdAt: new Date()
})
Bu çıktı, MongoDB sunucusunun isteği aldığını ve işlediğini gösterir.

Çıktı: Başka bir belgeye referans veren bir belge oluşturma.
7. Bir gönderinin yorumlarını sorgulama
Belirli bir blog yazısıyla ilişkili yorumları almak için find() yöntemi sorgu filtresiyle kullanılabilir:
// retrieve the above comment
db.comments.find({postId: postId})
Aşağıdaki çıktı, önceki adımda eklediğimiz yorumu gösterir.

Çıktı: find sorgusunu kullanarak bir belge bulma.
Kullanıcılar blog yazıları oluşturduktan sonra, bunları daha sonra güncelleyebilmek isterler. Şimdi mevcut belgeleri nasıl güncelleyebileceğimize bakalım.
8. Bir blog yazısını güncelleme
Eklemede olduğu gibi, güncelleme de tekil veya toplu olarak yapılabilir.
updateOne(): Bu yöntem belgeleri tek tek güncellerupdateMany(): Bu yöntem birden çok belgeyi aynı anda günceller.
“Introduction to NoSQL with MongoDB” başlıklı blog yazısının başlığını “Absolute Beginner Guide to NoSQL with MongoDB” olarak değiştirmeyi deneyin.
Önceki adımlardan gönderi kimliğini bildiğimiz için, başlığı değiştirmek üzere aşağıdaki kodu çalıştırın. postId değerini kendi belge kimliğinizle güncellediğinizden emin olun.
var postId = ObjectId("664bfc27f74ef93812b2179e");
db.posts.updateOne(
{ _id: postId },
{ $set: { title: "Absolute Beginner guide to NoSQL with MongoDB"} }
);
// verify update
db.posts.find({_id: postId})
Çıktı, isteğin başarıyla işlendiğini gösterir. 1 eşleşen belge bulundu ve 1 belge değiştirildi.

Çıktı: Bir belgeyi güncelleme.
9. Bir blog yazısını silme
Bir blog yazısını silmek için deleteOne() kullanılabilir. Önceki işlemlere benzer şekilde, isteğe bağlı olarak deleteMany() ile birden çok belgeyi aynı anda silebiliriz.
var postId = ObjectId("664bfc27f74ef93812b2179e");
// delete post
db.posts.deleteOne({ _id: postId });
// verify deletion -> no output
db.posts.find({_id: postId})
Çıktı, silme işleminin başarıyla tamamlandığını doğrular.

Çıktı: Bir koleksiyondan belge silme
Elbette, genellikle öne çıkarma, beğeni, alkış, öneri vb. gibi çeşitli diğer işlemlerle daha karmaşık olan bir blog platformu tasarımını basitleştirdik. Ancak bunların tümü temel CRUD işlemlerinden birine dayanır ve artık bu temel kavramları iyi kavradık. Şimdi bu işlemler temelinde daha fazla özelliği keşfetme ve deneme sırası sizde.
Sonuç
Bu eğitim sizi NoSQL veritabanlarıyla tanıştırdı. Temel kavramlarla, NoSQL veritabanlarının tanımıyla, ilişkisel veritabanlarından nasıl farklılaştıklarıyla ve türleriyle başladık.
Bunu, yaygın olarak kullanılan belge tabanlı bir veritabanı olan MongoDB'yi kapsayacak şekilde genişlettik. Son olarak, blog platformumuz için bir veritabanı tasarlamak üzere basit bir örnekle pratiğe döktük.
Yeni bir kullanım durumu için veritabanı tasarlarken takılmanız normaldir; güncel işlevler ve örnekleri öğrenmek için resmi dokümantasyona başvurmanızı öneririz.
NoSQL bilginizi genişletmek istiyorsanız işte daha derinlemesine bazı kurslar ve eğitimler.
Kıdemli veri bilimcisi olarak, işletmelerin veriye dayalı daha iyi kararlar almasına yardımcı olmak için büyük ölçekli makine öğrenimi çözümleri tasarlıyor, geliştiriyor ve uyguluyorum. Veri bilimi yazarı olarak, öğrendiklerimi, kariyer tavsiyelerimi ve ayrıntılı uygulamalı eğitimleri paylaşıyorum.

