MongoDB’den Elasticsearch’e Dönüştürülmüş Veriyi Transporter ile Ubuntu 16.04 Üzerinde Senkronize Etme
Veri senkronizasyonu, modern dağıtık sistem mimarilerinin temel taşlarından biridir. Çeşitli veri tabanları ve arama motorları arasında veriyi tutarlı ve güncel tutmak, birçok iş yükü için kritik öneme sahiptir. Bu makalede, popüler NoSQL veri tabanı MongoDB’deki verileri, güçlü arama ve analiz motoru Elasticsearch’e, Transporter aracı ve Ubuntu 16.04 işletim sistemi üzerinde nasıl dönüştürerek senkronize edeceğimizi detaylı bir şekilde inceleyeceğiz. Özellikle, verilerin kaynak sistemden hedef sisteme aktarılırken nasıl dönüştürülebileceği ve bu sürecin adım adım nasıl kurulup yönetileceği üzerinde duracağız.
Giriş: Neden MongoDB’den Elasticsearch’e Veri Senkronizasyonu ve Dönüşüm?
MongoDB, esnek şeması ve yüksek ölçeklenebilirliği ile uygulama geliştiricileri arasında oldukça popülerdir. Belge tabanlı yapısı sayesinde karmaşık verilerin depolanması ve hızlı bir şekilde erişilmesi mümkündür. Ancak, metin tabanlı aramalar, gelişmiş filtreleme ve analitik sorgular söz konusu olduğunda, MongoDB’nin yetenekleri sınırlı kalabilir. İşte bu noktada Elasticsearch devreye girer. Elasticsearch, tam metin arama, log analizi, metrik toplama ve daha birçok alanda üstün performans sunan dağıtık, RESTful bir arama ve analiz motorudur.
MongoDB’deki verilerin Elasticsearch’e senkronize edilmesi, uygulamanızın arama yeteneklerini önemli ölçüde artırabilir. Örneğin, bir e-ticaret uygulamasında ürün detayları MongoDB’de saklanırken, ürün adları, açıklamaları ve kategorileri Elasticsearch’e indekslenerek hızlı ve ilgili arama sonuçları sunulabilir.
Peki ya “dönüştürülmüş veri” kısmı? Çoğu zaman, kaynak sistemdeki veri yapısı, hedef sistemdeki ihtiyaçlarla birebir örtüşmez. Elasticsearch’e gönderilecek verinin, arama ve indeksleme performansı için optimize edilmesi, gereksiz alanların çıkarılması, yeni alanların eklenmesi veya mevcut alanların formatının değiştirilmesi gerekebilir. İşte bu dönüşüm süreci, Transporter gibi araçlar sayesinde oldukça esnek bir şekilde yönetilebilir. Transporter, Go dilinde yazılmış, çeşitli kaynaklardan (MongoDB, PostgreSQL vb.) veri alıp, üzerinde dönüşüm uygulayarak çeşitli hedeflere (Elasticsearch, Kafka vb.) gönderebilen açık kaynaklı bir ETL (Extract, Transform, Load) aracıdır.
Ubuntu 16.04, bu makalenin yazıldığı dönemde yaygın olarak kullanılan bir sunucu işletim sistemiydi. Her ne kadar güncel sürümleri mevcut olsa da, temel kurulum ve yapılandırma adımları benzerlik göstermektedir. Bu makaledeki adımlar, Ubuntu’nun daha yeni sürümleri için de uyarlanabilir.
Ön Gereksinimler ve Sistem Hazırlığı
Bu rehbere başlamadan önce, aşağıdaki ön gereksinimlerin karşılandığından emin olmalısınız:
* Ubuntu 16.04 Sunucusu: İnternet erişimi olan ve sudo yetkilerine sahip bir kullanıcıya sahip bir Ubuntu 16.04 LTS sunucusu.
* MongoDB: Senkronize edilecek verileri içeren çalışan bir MongoDB örneği.
* Elasticsearch: Hedef olarak kullanılacak çalışan bir Elasticsearch örneği.
* Go Dili: Transporter Go ile yazıldığı için Go çalışma zamanı ve derleyicisi gereklidir.
Ubuntu 16.04 Sistem Güncellemesi ve Bağımlılıkların Kurulumu
İlk adım olarak, sisteminizi güncelleyelim ve gerekli temel bağımlılıkları kuralım:
sudo apt update
sudo apt upgrade -y
sudo apt install -y build-essential git curl wget
build-essential paketi, Go programlarının derlenmesi için gerekli araçları (GCC gibi) içerir. git, Transporter’ı indirmek için kullanılacaktır.
Go Dili Kurulumu
Transporter, Go dilinde yazılmıştır ve kaynak koddan derlenmesi gerekir. Bu nedenle, Go dilini sistemimize kurmalıyız.
Go İndirme ve Yükleme
Go’nun resmi web sitesinden en son kararlı sürümünü indirmek en iyi yöntemdir. Ubuntu 16.04 için genellikle .tar.gz arşivi kullanılır. Bu makale için, Go 1.16 sürümünü örnek alacağız, ancak en güncel kararlı sürümü kullanmanız önerilir.
# Go'nun en son sürümünü kontrol etmek için: https://golang.org/dl/
Bu örnekte Go 1.16.x kullanacağız, siz güncel sürümü kullanmalısınız.
wget https://golang.org/dl/go1.16.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.16.linux-amd64.tar.gz
Bu komut, Go arşivini /usr/local dizinine çıkarır.
Ortam Değişkenlerinin Ayarlanması
Go’nun düzgün çalışabilmesi için bazı ortam değişkenlerinin ayarlanması gerekir. Bu değişkenleri kullanıcı profilinize (örneğin ~/.profile veya ~/.bashrc) ekleyebilirsiniz.
echo 'export GOROOT=/usr/local/go' >> ~/.profile
echo 'export GOPATH=$HOME/go' >> ~/.profile
echo 'export PATH=$GOPATH/bin:$GOROOT/bin:$PATH' >> ~/.profile
source ~/.profile
* GOROOT: Go kurulum dizinini belirtir.
* GOPATH: Go projelerinizin ve bağımlılıklarınızın depolanacağı dizini belirtir.
* PATH: Go yürütülebilir dosyalarının sistem PATH’ine eklenmesini sağlar.
Değişikliklerin etkili olması için terminali yeniden başlatın veya source ~/.profile komutunu çalıştırın.
Go Kurulumunun Doğrulanması
Go’nun başarılı bir şekilde kurulduğunu doğrulamak için sürümünü kontrol edin:
go version
Çıktı olarak go version go1.16.x linux/amd64 benzeri bir şey görmelisiniz.
MongoDB Kurulumu
MongoDB’nin Ubuntu 16.04 üzerine kurulumu için resmi MongoDB deposunu kullanacağız.
MongoDB Deposu Ekleme
MongoDB’nin GPG anahtarını indirip ekleyin:
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv EA312927
MongoDB deposunu sources.list.d dizinine ekleyin:
echo "deb http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.2.list
Bu örnekte MongoDB 3.2 sürümünü kullanıyoruz, Ubuntu 16.04 (Xenial) için en uyumlu ve yaygın sürüm buydu. Daha güncel MongoDB sürümleri daha yeni Ubuntu sürümleri gerektirebilir.
MongoDB Kurulumu ve Başlatma
Depoyu ekledikten sonra, paket listesini güncelleyin ve MongoDB’yi kurun:
sudo apt update
sudo apt install -y mongodb-org
MongoDB servisini başlatın ve sistem başlangıcında otomatik başlaması için etkinleştirin:
sudo systemctl start mongod
sudo systemctl enable mongod
MongoDB Kurulumunun Doğrulanması ve Örnek Veri Ekleme
MongoDB’nin çalıştığını kontrol edin:
sudo systemctl status mongod
Ardından, Transporter ile senkronize edeceğimiz örnek verileri ekleyelim. MongoDB kabuğuna bağlanın:
mongo
Aşağıdaki komutları çalıştırarak örnek bir veritabanı ve koleksiyon oluşturun:
use mydatabase;
db.mycollection.insertMany([
{ _id: ObjectId("60c72b1f9c1e4c001f000001"), name: "Laptop X", description: "Güçlü bir iş dizüstü bilgisayarı.", price: 1200, category: "Elektronik", tags: ["dizüstü", "iş", "yüksek performans"], stock: 50, created_at: new Date() },
{ _id: ObjectId("60c72b1f9c1e4c001f000002"), name: "Akıllı Telefon Y", description: "En son model akıllı telefon.", price: 800, category: "Elektronik", tags: ["telefon", "akıllı", "mobil"], stock: 120, created_at: new Date() },
{ _id: ObjectId("60c72b1f9c1e4c001f000003"), name: "Kablosuz Kulaklık Z", description: "Harika ses kalitesi sunan kablosuz kulaklık.", price: 150, category: "Aksesuar", tags: ["kulaklık", "kablosuz", "ses"], stock: 200, created_at: new Date() },
{ _id: ObjectId("60c72b1f9c1e4c001f000004"), name: "Masaüstü Bilgisayar A", description: "Oyun ve profesyonel kullanım için güçlü masaüstü.", price: 2500, category: "Elektronik", tags: ["bilgisayar", "oyun", "profesyonel"], stock: 30, created_at: new Date() },
{ _id: ObjectId("60c72b1f9c1e4c001f000005"), name: "Akıllı Saat B", description: "Günlük aktivitelerinizi takip edin.", price: 250, category: "Giyilebilir Teknoloji", tags: ["saat", "akıllı", "fitness"], stock: 80, created_at: new Date() }
]);
exit
Bu veriler üzerinde dönüşüm uygulayarak Elasticsearch’e göndereceğiz.
Elasticsearch Kurulumu
Elasticsearch’ü Ubuntu 16.04 üzerine kurmak için Elastic’in resmi deposunu kullanacağız.
Elasticsearch Deposu Ekleme
Elasticsearch’ün GPG anahtarını indirip ekleyin:
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
Depoyu ekleyin. Bu örnekte Elasticsearch 5.x sürümünü kullanacağız, çünkü Ubuntu 16.04 ile uyumluluğu daha iyidir. Daha yeni Elasticsearch sürümleri, daha yeni Java sürümleri ve işletim sistemi gereksinimleri isteyebilir.
echo "deb https://artifacts.elastic.co/packages/5.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-5.x.list
Elasticsearch Kurulumu ve Başlatma
Depoyu ekledikten sonra, paket listesini güncelleyin ve Elasticsearch’ü kurun:
sudo apt update
sudo apt install -y elasticsearch
Elasticsearch servisini başlatın ve sistem başlangıcında otomatik başlaması için etkinleştirin:
sudo systemctl start elasticsearch
sudo systemctl enable elasticsearch
Elasticsearch Kurulumunun Doğrulanması
Elasticsearch’ün çalıştığını kontrol edin. Başlaması biraz zaman alabilir.
sudo systemctl status elasticsearch
Birkaç dakika bekledikten sonra, bir curl komutu ile Elasticsearch’ün HTTP API’sine istek göndererek durumunu kontrol edin:
curl -X GET "localhost:9200/"
Çıktıda Elasticsearch’ün sürümünü ve küme adını gösteren bir JSON yanıtı görmelisiniz.
Transporter Kurulumu
Go dili ve ortam değişkenleri ayarlandıktan sonra, Transporter’ı kurmak oldukça basittir.
Transporter’ı İndirme ve Derleme
go get komutu, Transporter’ın kaynak kodunu GOPATH dizininize indirir ve derler.
go get github.com/compose/transporter
Bu komut, Transporter’ı indirir, bağımlılıklarını çözer ve transporter yürütülebilir dosyasını $GOPATH/bin dizinine yerleştirir.
Transporter Kurulumunun Doğrulanması
transporter komutunu çalıştırarak kurulumu doğrulayabilirsiniz:
transporter --help
Yardım mesajını görmeniz, Transporter’ın başarıyla kurulduğunu gösterir.
Transporter ile Veri Senkronizasyonu ve Dönüşümü
Şimdi Transporter’ı yapılandırma ve çalıştırma zamanı. Bu süreç üç ana dosyayı gerektirir:
1. config.yaml: Kaynak ve hedef veritabanı bağlantı bilgilerini içerir.
2. transform.js: Veri dönüşüm mantığını içeren JavaScript kodu.
3. pipeline.js: Transporter’ın çalışma akışını (kaynak, dönüşüm, hedef) tanımlayan JavaScript kodu.
Bu dosyaları ~/transporter_sync gibi yeni bir dizinde oluşturalım:
mkdir ~/transporter_sync
cd ~/transporter_sync
config.yaml Dosyası Oluşturma
Bu dosya, Transporter’ın MongoDB ve Elasticsearch ile nasıl bağlantı kuracağını tanımlar.
# ~/transporter_sync/config.yaml
MongoDB kaynağı
mongo:
type: mongodb
uri: mongodb://localhost:27017/mydatabase
Elasticsearch hedefi
elastic:
type: elasticsearch
uri: http://localhost:9200
* mongo: MongoDB kaynağını tanımlar. type: mongodb ve uri ile bağlantı dizesini belirtiriz.
* elastic: Elasticsearch hedefini tanımlar. type: elasticsearch ve uri ile bağlantı dizesini belirtiriz.
transform.js Dosyası Oluşturma (Veri Dönüşümü)
Bu dosya, MongoDB’den gelen her belgeye uygulanacak JavaScript dönüşüm mantığını içerir. İşte bazı örnek dönüşümler:
* _id alanını id olarak yeniden adlandırma (Elasticsearch için daha yaygın bir pratik).
* description alanını kısaltma veya belirli kelimeleri çıkarma.
* price alanına currency bilgisi ekleme.
* tags dizisini birleştirip tek bir string alan oluşturma.
* category alanını küçük harfe çevirme.
* created_at alanını ISO formatına dönüştürme.
* stock alanı 100’den az ise low_stock: true ekleme.
// ~/transporter_sync/transform.js
module.exports = function(doc) {
// 1. _id alanını 'id' olarak yeniden adlandır ve string'e çevir
if (doc._id) {
doc.id = doc._id.toString();
delete doc._id; // Orijinal _id'yi kaldır
}
// 2. 'name' alanını büyük harfe çevir
if (doc.name) {
doc.name = doc.name.toUpperCase();
}
// 3. 'description' alanını kısalt ve yeni bir 'short_description' alanı ekle
if (doc.description && doc.description.length > 50) {
doc.short_description = doc.description.substring(0, 47) + "...";
} else if (doc.description) {
doc.short_description = doc.description;
}
// 4. 'price' alanına 'currency' ekleyerek yeni bir 'price_details' nesnesi oluştur
if (doc.price) {
doc.price_details = {
value: doc.price,
currency: "USD"
};
delete doc.price; // Orijinal price'ı kaldır
}
// 5. 'category' alanını küçük harfe çevir ve 'product_category' olarak yeniden adlandır
if (doc.category) {
doc.product_category = doc.category.toLowerCase();
delete doc.category;
}
// 6. 'tags' dizisini birleştirip virgülle ayrılmış bir string haline getir
if (Array.isArray(doc.tags)) {
doc.tags_string = doc.tags.join(", ");
// delete doc.tags; // İsteğe bağlı: orijinal tags dizisini kaldırabiliriz
}
// 7. 'created_at' alanını ISO string formatına dönüştür
if (doc.created_at instanceof Date) {
doc.created_at_iso = doc.created_at.toISOString();
// delete doc.created_at; // Orijinal Date objesini kaldırabiliriz
}
// 8. 'stock' alanı 100'den az ise 'low_stock' bayrağı ekle
if (doc.stock !== undefined && doc.stock < 100) {
doc.low_stock = true;
} else {
doc.low_stock = false;
}
// 9. Yeni bir 'last_updated' alanı ekle (senkronizasyon zamanı)
doc.last_updated = new Date().toISOString();
// Dönüştürülmüş belgeyi döndür
return doc;
};
Bu script, her belgeyi alır ve üzerinde yukarıda belirtilen dönüşümleri uygular. return doc; ile dönüştürülmüş belgeyi Transporter'a geri gönderir.
pipeline.js Dosyası Oluşturma
Bu dosya, Transporter'ın kaynak, dönüşüm ve hedef arasındaki akışı tanımlar.
// ~/transporter_sync/pipeline.js
Source({
name: "mongo", // config.yaml'daki kaynak adı
namespace: "mydatabase.mycollection", // Senkronize edilecek veritabanı ve koleksiyon
tail: true // True ise sürekli değişiklikleri dinler (oplog), false ise tek seferlik çalışır
})(
Transform({
name: "transform", // transform.js dosyasındaki modül adı
filename: "transform.js" // transform.js dosyasının yolu
})
)(
Sink({
name: "elastic", // config.yaml'daki hedef adı
namespace: "products.items", // Elasticsearch'teki indeks ve tip (type, ES 7+ için kaldırıldı, ama Transporter'da hala kullanılır)
timeout: "10s" // Yazma işlemleri için zaman aşımı
})
);
* Source: Veri kaynağını tanımlar.
* name: "mongo": config.yaml dosyasındaki MongoDB bağlantı ayarlarını kullanır.
* namespace: "mydatabase.mycollection": MongoDB'de senkronize edilecek veritabanı ve koleksiyonu belirtir.
* tail: true: Bu önemlidir. true olarak ayarlandığında, Transporter MongoDB'nin oplog'unu (işlem günlüğü) izleyerek gerçek zamanlı değişiklikleri (ekleme, güncelleme, silme) Elasticsearch'e senkronize eder. false ise, sadece mevcut veriyi tek seferlik senkronize eder ve sonra durur.
* Transform: Dönüşüm adımını tanımlar.
* name: "transform": transform.js dosyasındaki module.exports fonksiyonuna referans verir.
* filename: "transform.js": Dönüşüm scriptinin dosya yolunu belirtir.
* Sink: Veri hedefini tanımlar.
* name: "elastic": config.yaml dosyasındaki Elasticsearch bağlantı ayarlarını kullanır.
* namespace: "products.items": Elasticsearch'te oluşturulacak indeksi (products) ve tipi (items) belirtir. Elasticsearch 7.x ve sonrası için tipler (types) kaldırıldığı için, bu alan genellikle tek bir anahtar kelime (örneğin products) olarak da kullanılabilir ve Transporter bunu indeks adı olarak kullanır. Ancak, 5.x gibi eski sürümlerde tip hala geçerliydi.
* timeout: Elasticsearch'e yazma işlemleri için bir zaman aşımı belirler.
Önemli Not: MongoDB Oplog ve Replikasyon Seti
tail: true özelliğini kullanabilmek için MongoDB sunucunuzun bir replikasyon seti olarak yapılandırılması gerekmektedir. Tekil bir MongoDB örneği üzerinde oplog bulunmaz. Eğer MongoDB'niz tek bir örnek olarak çalışıyorsa, onu bir replikasyon setine dönüştürmeniz gerekir. En basit haliyle, tek bir sunuculu bir replikasyon seti oluşturabilirsiniz:
1. mongod.conf dosyasını düzenleyin (genellikle /etc/mongod.conf):
# replication:
# replSetName: rs0
Bu satırları yorumdan çıkarın veya ekleyin.
2. MongoDB servisini yeniden başlatın: sudo systemctl restart mongod.
3. MongoDB kabuğuna bağlanın ve replikasyon setini başlatın:
mongo
rs.initiate()
exit
rs.status() komutu ile replikasyon setinin durumunu kontrol edebilirsiniz.
Transporter'ı Çalıştırma
Tüm yapılandırma dosyaları hazır olduğuna göre, Transporter'ı çalıştırabiliriz:
transporter run pipeline.js --config config.yaml
Bu komutu çalıştırdığınızda, Transporter MongoDB'deki mydatabase.mycollection koleksiyonundaki mevcut verileri okuyacak, transform.js scripti ile dönüştürecek ve products.items indeksine Elasticsearch'e gönderecektir. Eğer tail: true ayarı yapıldıysa, Transporter çalışmaya devam edecek ve MongoDB'deki tüm yeni ekleme, güncelleme ve silme işlemlerini gerçek zamanlı olarak Elasticsearch'e yansıtacaktır.
Terminalde Transporter'ın loglarını göreceksiniz. Senkronizasyon başarılı olursa, "Transporter started" ve ardından senkronize edilen belge sayısıyla ilgili mesajlar göreceksiniz.
Senkronizasyonun Doğrulanması
Transporter çalıştıktan sonra, verilerin Elasticsearch'e doğru bir şekilde senkronize edilip edilmediğini kontrol edelim.
Elasticsearch'te Verileri Kontrol Etme
Bir curl komutu kullanarak products indeksindeki belgeleri sorgulayabilirsiniz:
curl -X GET "localhost:9200/products/_search?pretty"
Bu komut, products indeksindeki tüm belgeleri ve bunların dönüşüm sonrası hallerini JSON formatında gösterecektir. Aşağıdaki gibi bir çıktı görmelisiniz (detaylar dönüşümlerinize göre değişir):
{
"took" : ...,
"timed_out" : false,
"_shards" : {
"total" : ...,
"successful" : ...,
"failed" : ...
},
"hits" : {
"total" : ...,
"max_score" : ...,
"hits" : [
{
"_index" : "products",
"_type" : "items",
"_id" : "60c72b1f9c1e4c001f000001",
"_score" : 1.0,
"_source" : {
"id" : "60c72b1f9c1e4c001f000001",
"name" : "LAPTOP X",
"description" : "Güçlü bir iş dizüstü bilgisayarı.",
"short_description" : "Güçlü bir iş dizüstü bilgisayarı.",
"price_details" : {
"value" : 1200,
"currency" : "USD"
},
"product_category" : "elektronik",
"tags" : ["dizüstü", "iş", "yüksek performans"],
"tags_string" : "dizüstü, iş, yüksek performans",
"stock" : 50,
"created_at" : "2023-10-27T10:00:00.000Z",
"created_at_iso" : "2023-10-27T10:00:00.000Z",
"low_stock" : true,
"last_updated" : "2023-10-27T10:05:00.000Z"
}
},
// ... diğer belgeler
]
}
}
Yukarıdaki çıktıya bakarak, _id'nin id'ye dönüştürüldüğünü, name'in büyük harf olduğunu, short_description, price_details, product_category, tags_string, created_at_iso, low_stock ve last_updated gibi yeni alanların eklendiğini görebilirsiniz. Bu, dönüşümün başarılı olduğunu gösterir.
MongoDB'de Değişiklik Yapma ve Gerçek Zamanlı Senkronizasyonu Kontrol Etme
Eğer tail: true olarak ayarlandıysa, MongoDB'de bir değişiklik yaparak Transporter'ın bu değişikliği algılayıp Elasticsearch'e yansıtıp yansıtmadığını kontrol edebiliriz.
MongoDB kabuğuna bağlanın:
mongo
use mydatabase;
db.mycollection.updateOne(
{ name: "Laptop X" },
{ $set: { price: 1300, stock: 90, description: "Güncellenmiş güçlü bir iş dizüstü bilgisayarı." } }
);
exit
Birkaç saniye bekledikten sonra, Elasticsearch'ü tekrar sorgulayın:
curl -X GET "localhost:9200/products/_search?pretty"
Laptop X belgesinin price_details.value alanının 1300, stock alanının 90 ve low_stock alanının hala true (çünkü 90 < 100) olduğunu ve description ile short_description alanlarının güncellendiğini görmelisiniz. last_updated alanı da yeni bir zaman damgası gösterecektir. Bu, gerçek zamanlı senkronizasyonun ve dönüşümün başarılı olduğunu kanıtlar.
Gelişmiş Konular ve En İyi Uygulamalar
Bu rehber, temel bir senkronizasyon ve dönüşüm kurulumunu kapsasa da, üretim ortamları için bazı gelişmiş konuları ve en iyi uygulamaları göz önünde bulundurmak önemlidir.
Hata Yönetimi ve Loglama
Transporter, çalışma sırasında karşılaştığı hataları standart çıktıya (stdout) yazar. Üretim ortamında, bu logları bir log yönetim sistemine (örneğin ELK Stack'in kendisi, Graylog, Splunk) yönlendirmek kritik öneme sahiptir. Bu, senkronizasyon sorunlarını tespit etmeyi ve gidermeyi kolaylaştırır. Transporter'ın pipeline.js dosyasında Log fonksiyonu ile özel loglama noktaları da ekleyebilirsiniz.
Performans Optimizasyonu
Büyük veri setleri için senkronizasyon performansı önemli olabilir.
* Batch Boyutu: Transporter, verileri hedef sisteme toplu (batch) olarak gönderir. Performans için uygun batch boyutunu ayarlamak önemlidir. Bu, genellikle Transporter'ın kaynak ve hedef adaptörlerinin ayarlarında yapılandırılabilir.
* İndeksleme Stratejisi: Elasticsearch'te indeksleme performansı için doğru mapping ve shard/replica ayarlarını kullanmak önemlidir.
* Ağ Gecikmesi: MongoDB ve Elasticsearch sunucularının aynı veri merkezinde veya yakın ağlarda olması, gecikmeyi azaltarak performansı artırır.
* MongoDB Oplog Boyutu: tail: true kullanırken, MongoDB'nin oplog'unun yeterli büyüklükte olduğundan emin olun, aksi takdirde Transporter'ın geride kalması durumunda veriler kaybolabilir.
Güvenlik
Üretim ortamında, veritabanı bağlantılarının güvenliğini sağlamak esastır.
* Kimlik Doğrulama: config.yaml dosyasında MongoDB ve Elasticsearch için kullanıcı adı ve şifre bilgilerini sağlamalısınız.
* SSL/TLS: Hassas veriler aktarılırken bağlantıların SSL/TLS ile şifrelendiğinden emin olun. Transporter, bağlantı dizelerinde SSL/TLS parametrelerini destekler.
* Erişim Kontrolü: Transporter'ın çalıştığı sunucuya ve veri tabanlarına erişimi kısıtlayın.
Transporter'ın Diğer Özellikleri
Transporter, MongoDB ve Elasticsearch dışında birçok farklı kaynak ve hedefi destekler (PostgreSQL, Kafka, SQS vb.). Ayrıca, daha karmaşık dönüşümler için özel Go adaptörleri yazma yeteneği de sunar. Daha fazla bilgi için Transporter'ın resmi belgelerine başvurmanız önerilir.
Ubuntu 16.04 ve Sürüm Yönetimi
Unutulmamalıdır ki Ubuntu 16.04 LTS'nin standart desteği Nisan 2021'de sona ermiştir. Bu, güvenlik güncellemeleri ve hata düzeltmeleri almadığı anlamına gelir. Üretim ortamları için daha güncel ve desteklenen bir işletim sistemi sürümüne (örneğin Ubuntu 20.04 LTS veya 22.04 LTS) geçiş yapmanız şiddetle tavsiye edilir. Bu makaledeki adımlar, temel prensipler açısından yeni sürümlerle de uyumlu olsa da, paket adları ve sürüm uyumlulukları farklılık gösterebilir. Aynı durum MongoDB ve Elasticsearch sürümleri için de geçerlidir. En iyi performans ve güvenlik için her zaman en güncel kararlı sürümleri kullanmaya çalışın.
Sonuç
Bu makalede, MongoDB'deki verileri Transporter kullanarak Ubuntu 16.04 üzerinde Elasticsearch'e nasıl senkronize edeceğimizi ve bu süreçte verileri nasıl dönüştüreceğimizi adım adım öğrendik. MongoDB, Go dili, Elasticsearch ve Transporter'ın kurulumundan, yapılandırma dosyalarının oluşturulmasına ve gerçek zamanlı senkronizasyonun doğrulanmasına kadar tüm süreçleri detaylı bir şekilde ele aldık.
Veri dönüşümü, kaynak ve hedef sistemler arasındaki uyumsuzlukları gidermek ve veriyi hedef sistemin ihtiyaçlarına göre optimize etmek için kritik bir adımdır. Transporter'ın JavaScript tabanlı dönüşüm yetenekleri, bu süreci oldukça esnek ve güçlü kılar. Bu entegrasyon sayesinde, uygulamanızın arama, analiz ve raporlama yeteneklerini önemli ölçüde artırabilir, kullanıcılarınıza daha zengin ve hızlı bir deneyim sunabilirsiniz.
Unutmayın, üretim ortamları için güvenlik, performans ve hata yönetimi gibi gelişmiş konuları göz ardı etmemek ve sistemlerinizi düzenli olarak güncellemek büyük önem taşır. Bu rehber, veri senkronizasyonu yolculuğunuzda sağlam bir başlangıç noktası sağlayacaktır.