
MongoDB Kurulumu ve Temel Operasyonlar: NoSQL Veritabanı Rehberi
MongoDB kurulumu ve temel CRUD operasyonları. Collection oluşturma, belge ekleme, sorgulama, index oluşturma ve aggregation pipeline rehberi.
MongoDB Kurulumu ve Temel Operasyonlar
MongoDB, en popüler NoSQL (belge tabanlı) veritabanıdır. JSON benzeri belgelerle çalışır, esnek şema yapısı sunar ve yatay ölçekleme için idealdir.
MongoDB Ne Zaman Tercih Edilir?
| SQL (MySQL/PostgreSQL) | NoSQL (MongoDB) |
|---|---|
| Yapılandırılmış veri | Yarı yapılandırılmış/esnek veri |
| Karmaşık JOIN'ler | Gömülü belge yapısı |
| ACID işlemleri | Yüksek yazma hızı |
| Finans, ERP | Blog, katalog, IoT, log |
Kurulum
Ubuntu/Debian:
# MongoDB resmi deposunu ekle
curl -fsSL https://www.mongodb.org/static/pgp/server-7.0.asc | gpg -o /usr/share/keyrings/mongodb-server-7.0.gpg --dearmor
echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-7.0.gpg ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/7.0 multiverse" | tee /etc/apt/sources.list.d/mongodb-org-7.0.list
apt update
apt install mongodb-org
systemctl enable --now mongod
mongosh # Bağlan
RHEL/Rocky Linux:
# /etc/yum.repos.d/mongodb-org-7.0.repo oluşturun
cat > /etc/yum.repos.d/mongodb-org-7.0.repo << 'EOF'
[mongodb-org-7.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/9/mongodb-org/7.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-7.0.asc
EOF
dnf install -y mongodb-org
systemctl enable --now mongod
Docker ile:
docker run -d --name mongodb -p 27017:27017 -e MONGO_INITDB_ROOT_USERNAME=admin -e MONGO_INITDB_ROOT_PASSWORD=sifre mongo:7.0
mongosh (MongoDB Shell)
# Bağlan
mongosh
# Kimlik doğrulama ile
mongosh --username admin --password sifre --authenticationDatabase admin
# Uzak sunucu
mongosh "mongodb://admin:sifre@192.168.1.100:27017"
// Yardım
help
db.help()
// Veritabanları
show dbs
use sitem_db
// Koleksiyonlar
show collections
// Çıkış
exit
Veritabanı ve Koleksiyon Oluşturma
// MongoDB otomatik oluşturur (ilk veri ekleyince)
use sitem_db
// Koleksiyon oluştur
db.createCollection("urunler")
// Veya otomatik (ilk insert'te)
db.kullanicilar.insertOne({...})
CRUD Operasyonları
Create (Oluşturma):
// Tek belge ekle
db.kullanicilar.insertOne({
isim: "Ahmet Yılmaz",
email: "ahmet@sitem.com",
yas: 30,
adres: {
sehir: "Bursa",
ulke: "Türkiye"
},
etiketler: ["musteri", "premium"],
kayit_tarihi: new Date()
});
// Birden fazla belge ekle
db.urunler.insertMany([
{ isim: "Laptop", fiyat: 15000, kategori: "elektronik", stok: 50 },
{ isim: "Mouse", fiyat: 250, kategori: "elektronik", stok: 200 },
{ isim: "Masa", fiyat: 3500, kategori: "mobilya", stok: 15 }
]);
Read (Okuma):
// Tüm belgeler
db.kullanicilar.find()
db.kullanicilar.find().pretty()
// Filtre ile
db.urunler.find({ kategori: "elektronik" })
db.urunler.find({ fiyat: { $gt: 500 } }) // 500'den büyük
db.urunler.find({ fiyat: { $gte: 250, $lte: 5000 } }) // Aralık
// Projeksiyon (belirli alanlar)
db.kullanicilar.find({}, { isim: 1, email: 1, _id: 0 })
// Tek belge
db.urunler.findOne({ isim: "Laptop" })
// Sıralama
db.urunler.find().sort({ fiyat: -1 }) // Azalan
// Limit ve skip
db.urunler.find().limit(10).skip(20) // Sayfalama
// Sayma
db.urunler.countDocuments({ kategori: "elektronik" })
Update (Güncelleme):
// Tek güncelle
db.urunler.updateOne(
{ isim: "Laptop" },
{ $set: { fiyat: 16000, guncelleme: new Date() } }
);
// Birden fazla güncelle
db.urunler.updateMany(
{ kategori: "elektronik" },
{ $inc: { stok: -1 } } // Stoktan 1 azalt
);
// Upsert (yoksa ekle, varsa güncelle)
db.kullanicilar.updateOne(
{ email: "yeni@sitem.com" },
{ $set: { isim: "Yeni Kullanıcı" } },
{ upsert: true }
);
// Diziye eleman ekle
db.kullanicilar.updateOne(
{ email: "ahmet@sitem.com" },
{ $push: { etiketler: "vip" } }
);
Delete (Silme):
// Tek sil
db.urunler.deleteOne({ isim: "Mouse" })
// Çok sil
db.urunler.deleteMany({ stok: 0 })
// Tüm koleksiyonu temizle
db.urunler.deleteMany({})
// Koleksiyonu sil
db.urunler.drop()
Index Yönetimi
// Index oluştur
db.kullanicilar.createIndex({ email: 1 }, { unique: true })
db.urunler.createIndex({ kategori: 1, fiyat: -1 })
// Text index (tam metin arama)
db.urunler.createIndex({ isim: "text", aciklama: "text" })
db.urunler.find({ $text: { $search: "laptop bilgisayar" } })
// Tüm indexler
db.kullanicilar.getIndexes()
// Index sil
db.kullanicilar.dropIndex("email_1")
// Sorgu planı (index kullanımı)
db.urunler.find({ kategori: "elektronik" }).explain("executionStats")
Aggregation Pipeline
// Kategoriye göre gruplay ve ortalama fiyat hesapla
db.urunler.aggregate([
{ $match: { stok: { $gt: 0 } } }, // Filtre
{ $group: {
_id: "$kategori",
ortalama_fiyat: { $avg: "$fiyat" },
toplam: { $sum: 1 }
}},
{ $sort: { ortalama_fiyat: -1 } } // Sırala
]);
// Join benzeri (lookup)
db.siparisler.aggregate([
{ $lookup: {
from: "kullanicilar",
localField: "kullanici_id",
foreignField: "_id",
as: "kullanici_bilgi"
}}
]);
Güvenlik Yapılandırması
// Admin kullanıcı oluştur
use admin
db.createUser({
user: "admin",
pwd: "guclu_sifre",
roles: [{ role: "userAdminAnyDatabase", db: "admin" }]
});
// Uygulama kullanıcısı
use sitem_db
db.createUser({
user: "app_kullanici",
pwd: "app_sifresi",
roles: [{ role: "readWrite", db: "sitem_db" }]
});
# /etc/mongod.conf
security:
authorization: enabled
net:
bindIp: 127.0.0.1 # Sadece lokal
Yedekleme
# Veritabanı yedekle
mongodump --db sitem_db --out /backups/
# Geri yükle
mongorestore --db sitem_db /backups/sitem_db/
# BSON yerine JSON
mongoexport --db sitem_db --collection urunler --out urunler.json
mongoimport --db sitem_db --collection urunler urunler.json
Büyükweb VDS sunucularında MongoDB full root erişimiyle tam kontrol sizde. Node.js, Python veya PHP uygulamalarınız için MongoDB kurulumu yapabilirsiniz.
Veritabani Performans Optimizasyonu
Veritabani web uygulamalarinin kalbidir.
MySQL/MariaDB Tuning
innodb_buffer_pool_size'i RAM'in %60-70'ine ayarlayin. slow_query_log ile yavas sorgulari tespit edin. max_connections optimize edin.
Indeksleme
WHERE, JOIN, ORDER BY sutunlarina indeks ekleyin. EXPLAIN ile sorgu planlari analiz edin. Composite index kullanin.
Baglanti Havuzu
ProxySQL ile gelismis baglanti yonetimi. Connection pooling ile maliyet azaltma. Persistent connections kullanin.
Replikasyon
Master-Slave ile okuma yukunu dagitin. Galera Cluster ile multi-master yuksek erisilebilirlik. Semi-senkron replikasyon degerlendirin.
Yedekleme
mysqldump mantiksal, xtrabackup fiziksel yedek. Binary log ile point-in-time recovery. Incremental yedekleme ile tasarruf.
Sik Sorulan Sorular
MySQL mi PostgreSQL mi?
MySQL cogu web uygulamasi ile uyumlu. PostgreSQL gelismis veri tipleri ve JSON icin ideal. CMS'ler genelde MySQL kullanir.
Veritabanim buyudu ne yapmaliyim?
Gereksiz verileri temizleyin, tablo optimize edin, arsivleme yapin, partitioning kullanin.
Ne siklikla yedek almaliyim?
Kritik veritabanlari saatlik, standart siteler gunluk. Buyuk degisikliklerden once manuel yedek.
Sonuc
Veritabani optimizasyonu uygulama performansini dogrudan etkiler. Indeksleme, tuning ve yedekleme ile veri katmaninizi guclendirin.
Veritabani Boyut Yonetimi
Buyuk Tablolar icin Stratejiler
- Partitioning: Tarihe gore tablolari bolumlendirin. Sorgu performansi artar.
- Arsivleme: Eski verileri arsiv tablolarina tasiyin.
- Sikistirma: InnoDB sikistirmasi ile disk kullanimini %50-75 azaltin.
WordPress Veritabani Optimizasyonu
- wp_options autoload: Gereksiz autoload kayitlari temizleyin.
- Post revisions: wp-config.php'de WP_POST_REVISIONS sinirlayin.
- Transient veriler: Suresi dolmus verileri duzenli temizleyin.
- Spam yorumlar: Toplu silin.
Veritabani Guvenlik
- Varsayilan portu degistirin
- Uygulama bazli kullanici olusturun
- Minimum gerekli yetki verin
- SSL ile baglanti sifreleyin
- Duzenli guvenlik taramasi yapin
Neden Buyukweb?
Buyukweb, 2009 yilindan bu yana Turkiye'nin guvenilir hosting firmasidir. Bursa Pendc Tier 3 veri merkezinde profesyonel barindirma hizmetleri sunmaktadir.
Teknik Altyapi Avantajlari
- NVMe SSD Diskler: Geleneksel disklere gore 10x daha hizli okuma/yazma
- LiteSpeed Web Server: Apache'ye kiyasla 10x performans artisi
- CloudLinux Izolasyonu: Her hesap icin ayri kaynak limiti
- Imunify360 Guvenlik: Otomatik malware tarama ve engelleme
- DDoS Korumasi: L3, L4, L7 katmanlarinda kapsamli koruma
Musteri Memnuniyeti
5.200'den fazla aktif musteri ile %99.8 uptime garantisi sunuyoruz. 7/24 Turkce teknik destek ekibimiz tum sorulariniza hizla yanit verir. Ucretsiz site tasima hizmeti ile mevcut hosting saglayicinizdan kolayca gecis yapabilirsiniz.
Fiyat-Performans Dengesi
Rekabetci fiyatlarla profesyonel hosting altyapisi sunuyoruz. Yillik odemede ek indirimler, ucretsiz SSL sertifikasi ve gunluk otomatik yedekleme tum paketlerde standarttir.
Kolay Yonetim
cPanel ve Plesk kontrol panelleri ile web sitenizi, e-postalarinizi ve veritabaninizi tek panelden kolayca yonetin. Softaculous ile 400'den fazla uygulamayi tek tikla kurun.
Hosting Sektoru ve Gelecek Trendleri
Dijitallesme ile birlikte hosting sektoru hizla donusuyor. Edge computing, serverless mimariler ve container teknolojileri geleneksel hosting yaklasimlarini tamamliyor. Ancak guvenilir bir fiziksel altyapi her zaman temel gereksinim olmaya devam edecek.
Yapay Zeka ve Hosting
AI destekli guvenlik sistemleri, otomatik optimizasyon araclari ve akilli izleme cozumleri hosting kalitesini artiriyor. Imunify360 gibi AI tabanli guvenlik yazilimlari, saldiri kaliplarini ogrenererek proaktif koruma sagliyor.
Surdurulebilir Hosting
Yesil enerji kullanan veri merkezleri, enerji verimli sunucular ve karbon notr barindirma hizmetleri gelecekte daha onemli hale gelecek. Verimli donanim ve akilli sogutma sistemleri ile enerji maliyetleri azaltiliyor.
5G ve Mobil Oncelik
5G teknolojisinin yayginlasmasi ile mobil trafik daha da artacak. Mobile-first hosting cozumleri, edge caching ve AMP destegi onemini koruyacak. Web sitelerinin mobilde 2 saniyenin altinda yuklenmesi standart beklenti haline geliyor.
Etiketler:

