15%

Tüm Hosting Hizmetlerinde %15 indirim

Becerilerini test et ve herhangi bir hosting planında İndirim kazan

Kodu kullanın:

Skills
Başlayın
01.11.2024
2 +1

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ı

ÖzellikMongoDB (NoSQL)Geleneksel SQL
Veri ModeliEsnek belgeler (BSON)Sabit şema (tablolar/satırlar)
ÖlçeklenebilirlikYatay (sharding)Öncelikle dikey
Şema DeğişiklikleriŞemasız, dinamikGeçişler gerektirir
Sorgu DiliZengin MQL + aggregationSQL
En İyi KullanımDinamik, yapılandırılmamış verilerYapılandırılmış, ilişkisel veriler
Ölçekte PerformansSharding ile mükemmelAyarlama 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() ve skip() 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
  • sudo ayrı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 update

Adı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-org

Bu aşağıdaki paketleri yükler:

  • mongod — MongoDB veritabanı daemon
  • mongos — MongoDB sharding yönlendiricisi
  • mongosh — MongoDB kabuğu (eski mongo kabuğ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 mongod

MongoDB’nin sistem önyüklemesinde otomatik olarak başlamasını etkinleştirin:

sudo systemctl enable mongod

MongoDB’nin doğru şekilde çalıştığını doğrulayın:

sudo systemctl status mongod

Hizmetin 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:

mongosh

MongoDB 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.conf

security bölümünü bulun ve ekleyin:

security:
  authorization: enabled

Değişiklikleri uygulamak için MongoDB’yi yeniden başlatın:

sudo systemctl restart mongod

Bu 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:

mongosh

Kimlik doğrulama etkinse, kimlik bilgileriyle bağlanın:

mongosh -u adminUser -p YourStrongPasswordHere --authenticationDatabase admin

Adım 2: Veritabanı İşlemleri

Tüm veritabanlarını listeleyin:

show dbs

Bir 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:

db

Bir 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 collections

Bir 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 })  // Descending

Sonuç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ı

  1. Yeterli RAM ayırın — MongoDB’nin WiredTiger depolama motoru bellek içi önbellek kullanır. cacheSizeGB değerini mevcut sistem RAM’inin yaklaşık %50’sine ayarlayın.
  2. Uygun dizinleri kullanındb.collection.explain("executionStats") ile yavaş sorguları analiz edin ve buna göre dizinler oluşturun.
  3. MongoDB Atlas veya mongostat ile izleyin — Gerçek zamanlı performansı izlemek için mongostat ve mongotop komut satırı araçlarını kullanın.
  4. Journaling’i etkinleştirin — Journaling varsayılan olarak etkindir ve kilitlenme kurtarması sağlar; üretimde devre dışı bırakmayın.
  5. 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.
  6. 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.

mongodump ile Yedek Oluştu

15%

Tüm Hosting Hizmetlerinde %15 indirim

Becerilerini test et ve herhangi bir hosting planında İndirim kazan

Kodu kullanın:

Skills
Başlayın