MongoDB’ye Tam Rehber: VPS’de Kurulum, Özellikler ve En İyi Uygulamalar
MongoDB, dünyanın en güçlü ve en yaygın olarak benimsenen NoSQL veritabanlarından biridir — ve bunun iyi nedenleri vardır. Esnek, belge odaklı mimarisi, hızlı ölçeklenmesi gereken modern, veri yoğun uygulamalar oluşturan geliştiriciler için tercih edilen seçimdir. Bir startup MVP çalıştırıyor olsanız veya kurumsal düzey altyapıyı yönetiyor olsanız, yüksek performanslı bir barındırma ortamıyla eşleştirilmiş MongoDB, uygulamalarınızın talep ettiği hız, esneklik 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ğinizi ve MongoDB shell 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, geliş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ış veri | Yapılandırılmış, ilişkisel veri |
| Ö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şme olasılığı olan herhangi bir uygulama dahil olmak üzere çok çeşitli kullanım durumları için idealdir.
MongoDB Neden VPS’de Barındırılmalı?
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 Hosting planı ile şunları elde edersiniz:
- Tam root erişimi MongoDB’yi uygulamanızın tam olarak gerektirdiği şekilde yapılandırmak için
- Adanmış RAM ve CPU kaynakları talep gören okuma/yazma iş yüklerini işlemek için
- İzole edilmiş ortam paylaşılan barındırmada yaygın olan “gürültülü komşu” sorununu ortadan kaldıran
- Sorunsuz dikey ve yatay ölçeklendirme verileriniz büyüdükçe
- Ö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 Dedicated Servers tam donanım yalıtımı ile bare-metal performans sunar — üretim MongoDB dağıtımları için altın standart.
Bölüm 1: MongoDB’nin Temel Mimarisini Anlamak
Kuruluma geçmeden önce, MongoDB’nin verileri nasıl organize ettiğini ve yönettiğini anlamak önemlidir.
Belgeler
MongoDB’deki verilerin temel birimi bir belge — iç içe 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; bunlar SQL veritabanlarındaki tablolara benzerdir. Ancak SQL tablolarından farklı olarak, koleksiyonlar sabit bir şema uygulamaz — aynı koleksiyon içindeki belgeler tamamen farklı alanlara sahip olabilir.
Veritabanları
Bir MongoDB sunucusu, her biri kendi koleksiyonlar setini içeren birden fazla veritabanına ev sahipliği yapabilir. Bu, tek bir sunucu örneğinde farklı uygulamalar veya ortamlar (örneğin, geliştirme, hazırlama, üretim) için verileri 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 olabileceğinden, geliştiriciler uygulama gereksinimleri değiştikçe veritabanı şemasını organik olarak geliştirebilir — karmaşık ALTER TABLE göçlerini çalıştırmak veya kapalı kalma süresiyle karşı karşıya kalmak zorunda kalmadan.
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çeklendirmeye yönelik yerel desteğidir. Sharding, verileri birden fazla sunucu (shard olarak adlandırılır) arasında 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 arttıkça neredeyse doğrusal ölçeklenebilirliği sağlar.
Yüksek trafikli üretim ortamları için, MongoDB’yi AlexHost’un Dedicated Servers üzerinde barındırmak, her shard’ın izole, yüksek performanslı donanım kaynaklarına erişimini sağlar.
2.3 Replica Sets ile Yüksek Kullanılabilirlik
MongoDB, replica sets 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
- Birincil düğümden 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 ikincil düğümlerden yeni bir birincil düğüm 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ğıdakileri içeren zengin bir işlem seti destekler:
- Alan düzeyinde filtreleme karşılaştırma, mantıksal ve eleman operatörleriyle
- Projeksiyon yalnızca belirli alanları döndürmek için
- Sıralama ve sayfalandırma
sort(),limit()veskip()ile - Tam metin arama tam metin dizinleriyle
- 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 daha birçok işlemi destekler — karmaşık SQL GROUP BY ve JOIN işlemlerine karşılaştırılabilir işlevsellik sunarak.
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 alan 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 sona ermesi için (oturum verileri veya günlükler için faydalı)
Bölüm 3: Ubuntu’da MongoDB Kurulumu (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, root veya sudo erişimine sahip 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 Hosting 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 imzalanmıştı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’yi Kurun
MongoDB’nin en son kararlı sürümünü tüm gerekli bileşenlerle kurun:
sudo apt install -y mongodb-orgBu aşağıdaki paketleri kurar:
mongod— MongoDB veritabanı daemon’umongos— MongoDB sharding yönlendiricisimongosh— MongoDB shell (eskimongoshell’inin modern değiştirmesi)- 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ı sağlayın:
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şlatıldıysa, ayrıca 27017 portunda dinlediğini doğrulayan bir satır da göreceksiniz.
Adım 6: MongoDB Kurulumunuzu Güvenli Hale Getirin (Önerilir)
MongoDB’yi herhangi bir üretim veya internet’e açık ortamda kullanmadan önce, kimlik doğrulamayı etkinleştirmek kritik önem taşır. Varsayılan olarak, MongoDB bir kullanıcı adı veya parola gerektirmez.
Bir yönetici kullanıcısı oluşturun:
mongoshMongoDB shell’inin 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 yapılan tüm bağlantılar geçerli kimlik bilgilerini gerektirecektir.
Bölüm 4: MongoDB Kullanımı — Temel Komutlar ve İşlemler
MongoDB yüklü ve güvenli hale getirildiğine göre, günlük olarak kullanacağınız en önemli işlemleri keşfedelim.
Adım 1: MongoDB Shell’e Erişim
Modern mongosh shell’i 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 geçiş yapın:
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
Belge Ekleme
Tek bir belge ekleyin:
db.users.insertOne({
name: "Alice",
age: 30,
email: "alice@example.com",
role: "developer"
})Birden fazla belgeyi aynı anda 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" }
])Belge Okuma
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 pageBelge Güncelleme
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 } }
)Belge Silme
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 indeks oluşturmak sorgu performansını önemli ölçüde iyileştirir.
Tek alan indeksi oluşturun:
db.users.createIndex({ email: 1 })Bileşik indeks oluşturun:
db.users.createIndex({ role: 1, age: -1 })Benzersiz indeks oluşturun:
db.users.createIndex({ email: 1 }, { unique: true })Bir koleksiyondaki tüm indeksleri listeleyin:
db.users.getIndexes()Adım 6: Toplama Pipeline’ı
Toplama çerçevesi, MongoDB 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: Filtrele, grupla ve role göre 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 indeksler kullanın —
db.collection.explain("executionStats")ile yavaş sorguları analiz edin ve buna göre indeksler 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 — Uygulamanızın MongoDB sürücüsünü bağlantı havuzlaması kullanacak şekilde yapılandırın ve bağlantı yükünü azaltın.
- Koleksiyonları düzenli olarak sıkıştırın — Büyük silme işlemlerinden 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.
mongodump ile Yedek Oluşturma
mongodump --uri="mongodb://adminUser:password@localhost:27017" --out=/backup/mongodb/$(date +%Y%m%d)mongorestore ile Yedekten Geri Yükleme
mongorestore --uri="mongodb://adminUser:password@localhost:27017" /backup/mongodb/20240115/Cron ile Yedeklemeleri Otomatikleştirme
Günlük yedeklemeleri otomatik olarak çalıştırmak için bir cron işi ekleyin:
sudo crontab -eHer gün saat 2:00’de bir yedekleme çalıştırmak için aşağıdaki satırı ekleyin:
0 2 * * * mongodump --uri="mongodb://adminUser:password@localhost:27017" --out=/backup/mongodb/$(date +%Y%m%d) >> /var/log/mongodb-backup.log 2>&1AlexHost’ta MongoDB için Doğru Planı Seçmek
Doğru hosting planı, uygulamanızın ölçeğine, trafiğine ve veri gereksinimlerine bağlıdır:
| Kullanım Durumu | Önerilen Plan | Neden |
|---|---|---|
| Geliştirme / Test | VPS Hosting | Uygun fiyatlı, tam kontrol, kolay kurulum |
| Küçük ve Orta Ölçekli Üretim | VPS Hosting | Ölçeklenebilir kaynaklar, SSD depolama, root erişimi |
| Yüksek Trafikli Üretim | Dedicated Servers | Bare-metal performans, kaynak paylaşımı yok |
| MongoDB ile ML/AI | GPU Hosting | Veri işleme iş yükleri için GPU hızlandırması |
| Web Uygulaması + MongoDB | cPanel ile VPS | Veritabanınızın yanında kolay yönetim arayüzü |
Web ön ucu, e-posta bildirimleri veya SSL ile güvenli bağlantılar gerektiren uygulamalar için AlexHost, altyapı yığınını tamamlamak üzere SSL Certificates ve Email Hosting sunmaktadır.
Sık Sorulan Sorular
S: MongoDB ücretsiz mi?
Evet. MongoDB Community Edition, Server Side Public License (SSPL) altında ücretsiz ve açık kaynaktır. MongoDB Enterprise ve MongoDB Atlas (bulut) ek özellikleri ücretli olarak sunmaktadır.
S: MongoDB varsayılan olarak hangi portu kullanır?
MongoDB varsayılan olarak 27017 portunu dinler. Bunu /etc/mongod.conf içinde değiştirebilirsiniz.
S: MongoDB’yi paylaşılan hosting planında çalıştırabilir miyim?
MongoDB, düzgün şekilde yüklemek ve yapılandırmak için root veya yönetici erişimi gerektirir; bu, standart paylaşılan hosting’de mevcut değildir. VPS veya özel sunucu gereklidir. AlexHost’un Paylaşılan Web Hosting hizmeti PHP/MySQL uygulamaları için daha uygundur; MongoDB dağıtımları VPS veya özel sunucu kullanmalıdır.
S: Uzak bir uygulamadan MongoDB’ye nasıl bağlanırım?
bindIp içinde /etc/mongod.conf dosyasını sunucunuzun IP adresini içerecek şekilde güncelleyin, güvenlik duvarınızı 27017 portundan yalnızca güvenilir IP’lere izin verecek şekilde yapılandırın ve şu biçimde bir bağlantı dizesi kullanın: mongodb://username:password@your-server-ip:27017/dbname.
S: MongoDB ile MySQL arasındaki fark nedir?
MySQL, yapılandırılmış tablolar ve SQL kullanan ilişkisel bir veritabanıdır. MongoDB, esnek JSON benzeri belgeler depolayan bir NoSQL belge veritabanıdır. MongoDB, yapılandırılmamış veya yarı yapılandırılmış veriler ve yatay ölçeklendirme ile başa çıkmada mükemmeldir; MySQL ise karmaşık ilişkisel veriler ve katı ACID uyumluluğu gereksinimleri olan uygulamalar için daha uygundur.
Sonuç
MongoDB, geliştiricilerin katı ilişkisel şema kısıtlamaları olmadan modern, ölçeklenebilir uygulamalar oluşturmasını sağlayan dönüştürücü bir veritabanı teknolojisidir. Belge odaklı modeli, sharding aracılığıyla yerel yatay ölçeklendirme, replica setler aracılığıyla yerleşik yüksek kullanılabilirlik ve güçlü aggregation framework’ü, onu günümüzün en çok yönlü veritabanlarından biri haline getirmektedir.
MongoDB’yi bir AlexHost VPS Hosting planında barındırarak, MongoDB’yi etkili bir şekilde çalıştırmak için gereken tam kontrol, özel kaynaklar ve güvenilir altyapı elde edersiniz — ilk uygulamanızı prototipleştiriyor olsanız da yüksek trafikli bir üretim sistemini yönetiyor olsanız da.
MongoDB örneğinizi çalışır duruma getirmek, ilk günden itibaren uygun güvenlik önlemleri uygulamak ve performanslı, veriye dayalı uygulamalar oluşturmak için indexing ve aggregation pipeline’ından yararlanmak amacıyla bu kılavuzdaki kurulum ve yapılandırma adımlarını izleyin.
MongoDB kurulumunuz hakkında sorularınız mı var veya doğru hosting planını seçmede yardıma mı ihtiyacınız var? AlexHost’un uzman destek ekibi her adımda size yardımcı olmak için 24/7 olarak hazırdır.
tasarruf edin