Buyukweb
MongoDB Kurulumu ve Temel Operasyonlar: NoSQL Veritabanı Rehberi

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.

Büyükweb Teknik Ekibi22 Eylül 20247 dakika okuma

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:

#mongodb#kurulum rehberi#veritabanı#database#veri yönetimi

Bu yazıyı paylaş