MongoDB’ye Tam Rehber: VPS’de Kurulum, Özellikler ve En İyi Uygulamalar
MongoDB, dünyadaki en güçlü ve yaygın olarak benimsenen NoSQL veritabanlarından biridir — ve bunun iyi nedenleri vardır. Esnek, belge yönelimli mimarisi, hızlı ölçeklenmesi gereken modern, veri yoğun uygulamalar oluşturan geliştiriciler için tercih edilen seçimdir. İster bir startup MVP çalıştırıyor ister kurumsal düzeyde altyapıyı yönetiyor olun, yüksek performanslı bir barındırma ortamı ile eşleştirilmiş MongoDB, uygulamalarınızın talep ettiği hızı, esnekliği ve güvenilirliği sağlar.
Bu kapsamlı kılavuzda, MongoDB’nin ne olduğunu, geleneksel ilişkisel veritabanlarından nasıl öne çıktığını, Ubuntu’ya nasıl yükleyeceğini ve MongoDB kabuğunu kullanarak temel işlemleri nasıl gerçekleştireceğinizi öğreneceksiniz.
MongoDB Nedir ve Neden Kullanmalısınız?
MongoDB, verileri BSON (Binary JSON) adı verilen esnek, JSON benzeri belgeler halinde depolayan açık kaynaklı, belge yönelimli bir NoSQL veritabanıdır. Katı tablo-satır-sütun yapılarına dayanan geleneksel ilişkisel veritabanlarından farklı olarak, MongoDB, bir koleksiyondaki her belgenin kendi benzersiz yapısına sahip olmasını sağlar. Bu, değişen veya öngörülemeyen veri modellerine sahip uygulamalar için son derece uygun hale getirir.
MongoDB’nin Geleneksel SQL Veritabanlarına Göre Temel Avantajları
| Özellik | MongoDB (NoSQL) | Geleneksel SQL |
|---|---|---|
| Veri Modeli | Esnek belgeler (BSON) | Sabit şema (tablolar/satırlar) |
| Ölçeklenebilirlik | Yatay (sharding) | Öncelikle dikey |
| Şema Değişiklikleri | Şemasız, dinamik | Geçişler gerektirir |
| Sorgu Dili | Zengin MQL + aggregation | SQL |
| En İyi Kullanım | Dinamik, yapılandırılmamış veriler | Yapılandırılmış, ilişkisel veriler |
| Ölçekte Performans | Sharding ile mükemmel | Ayarlama olmadan düşebilir |
MongoDB, gerçek zamanlı analitik, içerik yönetim sistemleri, e-ticaret platformları, IoT veri alımı, mobil arka uçlar ve veri yapılarının zaman içinde değişmesi muhtemel olan herhangi bir uygulama dahil olmak üzere çok çeşitli kullanım durumları için idealdir.
MongoDB’yi Neden VPS’de Barındırmalısınız?
MongoDB’yi özel bir sanal özel sunucuda barındırmak, paylaşılan ortamların basitçe sağlayamayacağı bir kontrol, performans ve güvenlik düzeyi sağlar. AlexHost’tan bir VPS Barındırma planı ile şunları elde edersiniz:
- Tam kök erişimi MongoDB’yi uygulamanızın tam olarak gerektirdiği şekilde yapılandırmak için
- Ayrılmış RAM ve CPU kaynakları talep gören okuma/yazma iş yüklerini işlemek için
- İzole ortam paylaşılan barındırmada yaygın olan “gürültülü komşu” sorununu ortadan kaldırır
- Verileriniz büyüdükçe sorunsuz dikey ve yatay ölçeklendirme
- Özel güvenlik duvarı ve ağ kuralları veritabanı erişimini kilitlemek için
Olağanüstü yüksek verim gereksinimleri olan uygulamalar için, AlexHost’un Özel Sunucuları tam donanım izolasyonu ile çıplak metal performansı sunar — üretim MongoDB dağıtımları için altın standart.
Bölüm 1: MongoDB’nin Temel Mimarisini Anlamak
Kuruluma dalmadan önce, MongoDB’nin verileri nasıl organize ettiğini ve yönettiğini anlamak önemlidir.
Belgeler
MongoDB’deki temel veri birimi bir belgedir — iç içe geçmiş alanlar, diziler ve karışık veri türleri içerebilen JSON benzeri bir nesnedir. Örneğin:
{
"_id": ObjectId("64b1f2c3e4b0a1d2e3f4a5b6"),
"name": "Alice",
"age": 30,
"email": "alice@example.com",
"address": {
"city": "New York",
"zip": "10001"
},
"tags": ["developer", "mongodb", "nodejs"]
}Koleksiyonlar
Belgeler koleksiyonlarda gruplandırılır; bu, SQL veritabanlarındaki tablolara benzerdir. Ancak SQL tablolarından farklı olarak, koleksiyonlar sabit bir şemayı zorunlu kılmaz — aynı koleksiyondaki belgeler tamamen farklı alanlara sahip olabilir.
Veritabanları
Bir MongoDB sunucusu, her biri kendi koleksiyonlar setini içeren birden fazla veritabanı barındırabilir. Bu, farklı uygulamalar veya ortamlar (örneğin, geliştirme, hazırlama, üretim) için verileri tek bir sunucu örneğinde izole etmeyi kolaylaştırır.
Bölüm 2: MongoDB’nin Temel Özellikleri
2.1 Belge Yönelimli Depolama
MongoDB’nin belge modeli, en güçlü özelliklerinden biridir. Her belge farklı bir yapıya sahip olabildiğinden, geliştiriciler veritabanı şemasını uygulama gereksinimleri değiştikçe organik olarak geliştirebilir — karmaşık ALTER TABLE geçişleri çalıştırmadan veya kapalı kalma süresi yaşamadan.
Bu esneklik, gereksinimlerin sık sık değiştiği çevik geliştirme ortamlarında veya birden fazla heterojen kaynaktan veri toplayan uygulamalarda özellikle değerlidir.
2.2 Sharding ile Yatay Ölçeklenebilirlik
MongoDB’nin tanımlayıcı yeteneklerinden biri, sharding aracılığıyla yatay ölçeklendirme için yerel desteğidir. Sharding, verileri birden fazla sunucuya (shardlar olarak adlandırılır) dağıtarak, MongoDB’nin tek bir makineyi bunaltacak veri setleri ve verim seviyelerini işlemesini sağlar.
Her shard toplam verilerin bir alt kümesini tutar ve bir mongos yönlendiricisi, yapılandırılabilir bir shard anahtarına dayalı olarak sorguları uygun shard(lar)a yönlendirir. Bu mimari, veri hacminiz ve sorgu yükünüz büyüdükçe neredeyse doğrusal ölçeklenebilirliği sağlar.
Yüksek trafikli üretim ortamları için, MongoDB’yi AlexHost’un Özel Sunucularında barındırmak, her shardın izole, yüksek performanslı donanım kaynaklarına erişebilmesini sağlar.
2.3 Replica Setleri ile Yüksek Kullanılabilirlik
MongoDB, replica setleri aracılığıyla yerleşik hata toleransı sağlar — aynı verilerin özdeş kopyalarını koruyan MongoDB örnekleri grupları. Bir replica set şunlardan oluşur:
- Tüm yazma işlemlerini alan bir birincil düğüm
- Birincilden verileri çoğaltan bir veya daha fazla ikincil düğüm
- Veri depolamadan seçimlere katılan isteğe bağlı bir hakem
Birincil düğüm başarısız olursa, replica set otomatik olarak mevcut ikincillerden yeni bir birincil seçer, kapalı kalma süresini en aza indirir ve veri dayanıklılığını sağlar.
2.4 Güçlü Sorgu Dili ve Aggregation Framework
MongoDB’nin MongoDB Query Language (MQL) aşağıdakiler dahil olmak üzere zengin bir işlem setini destekler:
- Alan düzeyinde filtreleme karşılaştırma, mantıksal ve eleman operatörleri ile
- Projeksiyon yalnızca belirli alanları döndürmek için
- Sıralama ve sayfalandırma
sort(),limit()veskip()ile - Metin arama tam metin dizinleri ile
- Coğrafi sorgular konum tabanlı uygulamalar için
Aggregation Framework, veri dönüştürme ve analizi için bir boru hattı tabanlı yaklaşım sağlar; $match, $group, $sort, $project, $lookup (birleştirmeler), $unwind ve çok daha fazlasını destekler — karmaşık SQL GROUP BY ve JOIN işlemlerine benzer işlevsellik sunar.
2.5 Esnek İndeksleme
MongoDB, sorgu performansını optimize etmek için birden fazla dizin türünü destekler:
- Tek alan dizinleri basit sorgular için
- Bileşik dizinler çok alanlı sorgular için
- Çok anahtarlı dizinler dizi alanları için
- Metin dizinleri tam metin arama için
- Coğrafi dizinler konum sorguları için
- TTL dizinleri otomatik belge süresi dolması için (oturum verileri veya günlükler için kullanışlı)
Bölüm 3: Ubuntu’ya MongoDB Yükleme (Adım Adım)
Bu bölüm, Ubuntu 20.04 LTS (Focal Fossa) üzerinde tam bir MongoDB kurulumunda size rehberlik eder. Bu adımlar, kök veya sudo erişimi olan bir AlexHost VPS ortamı için optimize edilmiştir.
Ön Koşullar
- Ubuntu 20.04 LTS sunucusu
sudoayrıcalıklarına sahip bir kullanıcı hesabı- Linux komut satırı hakkında temel bilgi
Henüz bir sunucunuz yoksa, AlexHost VPS Barındırması ile dakikalar içinde tam olarak yapılandırılmış bir Ubuntu VPS başlatabilirsiniz.
Adım 1: MongoDB GPG Genel Anahtarını İçe Aktarın
MongoDB paketleri, orijinalliğini doğrulamak için bir GPG anahtarı ile imzalanır. Anahtarı aşağıdaki komutla içe aktarın:
wget -qO - https://www.mongodb.org/static/pgp/server-6.0.asc | sudo apt-key add -Anahtarın başarıyla içe aktarıldığını doğrulayan çıktı olarak OK görmelisiniz.
Adım 2: MongoDB Deposunu Ekleyin
Resmi MongoDB deposunu sisteminizin paket kaynaklarına eklemek için bir liste dosyası oluşturun:
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/6.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list> Not: Bu komut MongoDB 6.0 deposunu ekler. Farklı bir sürüme ihtiyacınız varsa sürüm numarasını ayarlayın.
Adım 3: Paket Veritabanını Güncelleyin
Yeni eklenen MongoDB deposunu içerecek şekilde yerel paket dizininizi yenileyin:
sudo apt updateAdım 4: MongoDB Yükleyin
MongoDB’nin en son kararlı sürümünü tüm gerekli bileşenlerle yükleyin:
sudo apt install -y mongodb-orgBu aşağıdaki paketleri yükler:
mongod— MongoDB veritabanı daemonmongos— MongoDB sharding yönlendiricisimongosh— MongoDB kabuğu (eskimongokabuğunun modern değiştiricisi)- MongoDB araçları ve kütüphaneleri
Adım 5: MongoDB Hizmetini Başlatın ve Etkinleştirin
MongoDB hizmetini hemen başlatın:
sudo systemctl start mongodMongoDB’nin sistem önyüklemesinde otomatik olarak başlamasını etkinleştirin:
sudo systemctl enable mongodMongoDB’nin doğru şekilde çalıştığını doğrulayın:
sudo systemctl status mongodHizmetin active (running) olduğunu gösteren çıktı görmelisiniz. MongoDB başarıyla başladıysa, port 27017 üzerinde dinlediğini doğrulayan bir satır da göreceksiniz.
Adım 6: MongoDB Kurulumunuzu Güvenli Hale Getirin (Önerilir)
Herhangi bir üretim veya internete açık ortamda MongoDB kullanmadan önce, kimlik doğrulamayı etkinleştirmek kritiktir. Varsayılan olarak, MongoDB bir kullanıcı adı veya parola gerektirmez.
Yönetici kullanıcısı oluşturun:
mongoshMongoDB kabuğunun içinde:
use admin
db.createUser({
user: "adminUser",
pwd: "YourStrongPasswordHere",
roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ]
})MongoDB yapılandırma dosyasını düzenleyerek kimlik doğrulamayı etkinleştirin:
sudo nano /etc/mongod.confsecurity bölümünü bulun ve ekleyin:
security:
authorization: enabledDeğişiklikleri uygulamak için MongoDB’yi yeniden başlatın:
sudo systemctl restart mongodBu noktadan itibaren, MongoDB’ye tüm bağlantılar geçerli kimlik bilgileri gerektirecektir.
Bölüm 4: MongoDB Kullanımı — Temel Komutlar ve İşlemler
MongoDB yüklü ve güvenli hale getirildikten sonra, günlük olarak kullanacağınız en önemli işlemleri keşfedelim.
Adım 1: MongoDB Kabuğuna Erişin
Modern mongosh kabuğunu kullanarak MongoDB örneğinize bağlanın:
mongoshKimlik doğrulama etkinse, kimlik bilgileriyle bağlanın:
mongosh -u adminUser -p YourStrongPasswordHere --authenticationDatabase adminAdım 2: Veritabanı İşlemleri
Tüm veritabanlarını listeleyin:
show dbsBir veritabanı oluşturun veya buna geçin:
use mydatabase> MongoDB, ilk kez veri eklediğinizde veritabanını otomatik olarak oluşturur.
Şu anda seçili olan veritabanını kontrol edin:
dbBir veritabanını silin:
db.dropDatabase()Adım 3: Koleksiyon İşlemleri
Açıkça bir koleksiyon oluşturun:
db.createCollection("users")Geçerli veritabanındaki tüm koleksiyonları listeleyin:
show collectionsBir koleksiyonu silin:
db.users.drop()Adım 4: Belge CRUD İşlemleri
#### Belgeleri Ekleyin
Tek bir belge ekleyin:
db.users.insertOne({
name: "Alice",
age: 30,
email: "alice@example.com",
role: "developer"
})Aynı anda birden fazla belge ekleyin:
db.users.insertMany([
{ name: "Bob", age: 25, email: "bob@example.com", role: "designer" },
{ name: "Carol", age: 35, email: "carol@example.com", role: "manager" },
{ name: "Dave", age: 28, email: "dave@example.com", role: "developer" }
])#### Belgeleri Okuyun
Bir koleksiyondaki tüm belgeleri bulun:
db.users.find()Belirli bir koşulla belgeleri bulun:
db.users.find({ role: "developer" })Birden fazla koşulla belgeleri bulun:
db.users.find({ role: "developer", age: { $gte: 28 } })Yalnızca belirli alanları döndürün (projeksiyon):
db.users.find({ role: "developer" }, { name: 1, email: 1, _id: 0 })Tek bir belge bulun:
db.users.findOne({ name: "Alice" })Sonuçları sıralayın:
db.users.find().sort({ age: 1 }) // Ascending
db.users.find().sort({ age: -1 }) // DescendingSonuçları sınırlayın ve sayfalandırın:
db.users.find().limit(10).skip(20) // Page 3 with 10 results per page#### Belgeleri Güncelleyin
Tek bir belgeyi güncelleyin:
db.users.updateOne(
{ name: "Alice" },
{ $set: { age: 31, role: "senior developer" } }
)Birden fazla belgeyi güncelleyin:
db.users.updateMany(
{ role: "developer" },
{ $set: { department: "Engineering" } }
)Sayısal bir alanı artırın:
db.users.updateOne(
{ name: "Bob" },
{ $inc: { age: 1 } }
)#### Belgeleri Silin
Tek bir belgeyi silin:
db.users.deleteOne({ name: "Dave" })Bir koşulla eşleşen birden fazla belgeyi silin:
db.users.deleteMany({ role: "designer" })Adım 5: Performans için İndeksleme
Sık sorgulanan alanlarda dizin oluşturmak sorgu performansını önemli ölçüde iyileştirir.
Tek alan dizini oluşturun:
db.users.createIndex({ email: 1 })Bileşik dizin oluşturun:
db.users.createIndex({ role: 1, age: -1 })Benzersiz dizin oluşturun:
db.users.createIndex({ email: 1 }, { unique: true })Bir koleksiyondaki tüm dizinleri listeleyin:
db.users.getIndexes()Adım 6: Aggregation Pipeline
Aggregation framework, MongoDB’nin içinde doğrudan karmaşık veri analizi gerçekleştirmenize olanak tanır.
Örnek: Kullanıcıları role göre say ve sayıya göre sırala:
db.users.aggregate([
{ $group: { _id: "$role", count: { $sum: 1 } } },
{ $sort: { count: -1 } }
])Örnek: Role göre filtrele, grupla ve ortalama yaşı hesapla:
db.users.aggregate([
{ $match: { department: "Engineering" } },
{ $group: { _id: "$role", avgAge: { $avg: "$age" }, total: { $sum: 1 } } },
{ $sort: { avgAge: 1 } }
])Bölüm 5: MongoDB Yapılandırması ve Performans Ayarlaması
mongod.conf Yapılandırması
MongoDB’nin birincil yapılandırma dosyası /etc/mongod.conf konumunda bulunur. İncelenecek ve optimize edilecek temel ayarlar:
# Network settings
net:
port: 27017
bindIp: 127.0.0.1 # Restrict to localhost for security; use server IP for remote access
# Storage settings
storage:
dbPath: /var/lib/mongodb
journal:
enabled: true
wiredTiger:
engineConfig:
cacheSizeGB: 2 # Set to ~50% of available RAM
# Logging
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
# Security
security:
authorization: enabled
# Replication (for replica sets)
replication:
replSetName: "rs0"Performans En İyi Uygulamaları
- Yeterli RAM ayırın — MongoDB’nin WiredTiger depolama motoru bellek içi önbellek kullanır.
cacheSizeGBdeğerini mevcut sistem RAM’inin yaklaşık %50’sine ayarlayın. - Uygun dizinleri kullanın —
db.collection.explain("executionStats")ile yavaş sorguları analiz edin ve buna göre dizinler oluşturun. - MongoDB Atlas veya mongostat ile izleyin — Gerçek zamanlı performansı izlemek için
mongostatvemongotopkomut satırı araçlarını kullanın. - Journaling’i etkinleştirin — Journaling varsayılan olarak etkindir ve kilitlenme kurtarması sağlar; üretimde devre dışı bırakmayın.
- Bağlantı havuzlaması kullanın — Bağlantı yükünü azaltmak için uygulamanızın MongoDB sürücüsünü bağlantı havuzlaması kullanacak şekilde yapılandırın.
- Koleksiyonları düzenli olarak sıkıştırın — Büyük silmelerden sonra disk alanını geri kazanmak için
db.runCommand({ compact: "collectionName" })kullanın.
Bölüm 6: MongoDB’yi Yedekleme ve Geri Yükleme
Düzenli yedeklemeler, herhangi bir üretim veritabanı için gereklidir. MongoDB bu amaç için yerleşik araçlar sağlar.
