Tüm Ürünler
Search
Belge Merkezi

ApsaraDB for MongoDB:NimoShake - Amazon DynamoDB verilerini Alibaba Cloud'a geçirin

Son Güncelleme:Oct 03, 2026

NimoShake (DynamoShake olarak da bilinir), Amazon DynamoDB veritabanlarını ApsaraDB for MongoDB'ye geçiren ve Alibaba Cloud tarafından geliştirilen bir veri senkronizasyon aracıdır. Tek bir çalıştırmada tam geçiş, artımlı geçiş veya her ikisini birden destekler.

Desteklenen özellikler

Özellik Destekleniyor
Tam geçiş Evet
Artımlı geçiş Evet
Yeniden başlatılabilir iletim (artımlı) Evet
Yeniden başlatılabilir iletim (tam) Hayır
Dizin geçişi (yalnızca tam aşama) Evet
Yalnızca şema geçişi Evet
Koleksiyon filtreleme Evet
Dizin geçişi (artımlı aşama) Hayır

Ön koşullar

Başlamadan önce aşağıdakilere sahip olduğunuzdan emin olun:

  • Bir ApsaraDB for MongoDB çoğaltma kümesi örneği veya parçalı küme örneği. Bkz. Çoğaltma kümesi örneği oluşturma veya Parçalı küme örneği oluşturma.

  • Amazon DynamoDB için AccessKey ID ve AccessKey secret.

  • Kaynak DynamoDB veritabanındaki tüm verileri barındıracak kadar ApsaraDB for MongoDB depolama alanı. Hedef depolama kapasitesi kaynağı aşmalıdır.

Çalışma şekli

NimoShake, tam geçiş ve artımlı geçişi ayrı aşamalar olarak yürütür.

Tam geçiş

Tam geçiş, veri geçişini takiben dizin geçişinden oluşan iki bölümden oluşur.

Full migration architecture

Veri geçişi, bir işlem hattında üç iş parçacığı türü kullanır:

Data migration threads

İş Parçacığı Açıklama
Fetcher Amazon'un protokol dönüştürme sürücüsünü çağırarak kaynak tablodan toplu veri alır ve kuyruklara yerleştirir. Aynı anda yalnızca bir fetcher iş parçacığı çalışır.
Parser Verileri kuyruklardan okur ve BSON formatına dönüştürerek yürütücülere iletir. Varsayılan: 2 iş parçacığı. full.document.parser ile kontrol edilir.
Executor Verileri kuyruklardan çeker, 16 MB'a veya 1.024 girişe kadar toplar ve hedefe yazar. Varsayılan: 4 iş parçacığı. full.document.concurrency ile kontrol edilir.

Dizin geçişi, veri geçişi tamamlandıktan sonra çalışır ve aşağıdaki dizinleri oluşturur:

  • Otomatik oluşturulan dizinler:

    • Kaynak tabloda bir bölüm anahtarı ve sıralama anahtarı varsa: Her iki anahtar üzerinde benzersiz bir bileşik dizin ve bölüm anahtarı üzerinde karma bir dizin.

    • Kaynak tabloda yalnızca bir bölüm anahtarı varsa: Bölüm anahtarı üzerinde bir karma dizin ve benzersiz bir dizin.

  • Kullanıcı tarafından oluşturulan dizinler: Her kullanıcı tanımlı dizin için birincil anahtara dayalı bir karma dizin oluşturulur.

Artımlı geçiş

Artımlı geçiş, kaynakta devam eden değişiklikleri yakalar ve bunları ApsaraDB for MongoDB'ye yazar. Artımlı aşama sırasında oluşturulan dizinleri geçirmez.

Incremental migration architecture

İş Parçacığı Açıklama
Fetcher Akıştaki parça değişikliklerini izler.
Manager Mesaj bildirimini yönetir ve her parça için bir Dispatcher oluşturur.
Dispatcher Kaynaktan artımlı verileri alır; yeniden başlatılabilir iletim etkin olduğunda son kontrol noktasından devam eder.
Batcher Dispatcher iş parçacıklarından gelen artımlı verileri ayrıştırır, paketler ve toplar.
Executor Toplanan verileri hedef ApsaraDB for MongoDB örneğine yazar ve kontrol noktasını günceller.

Yeniden başlatılabilir iletim ve kontrol noktaları

Artımlı geçiş, kontrol noktaları aracılığıyla yeniden başlatılabilir iletimi destekler. Bağlantı kesilir ve hızla geri yüklenirse geçiş son kontrol noktasından devam eder. Uzun süreli bağlantı kesintisi veya kontrol noktasının kaybı tam geçişin yeniden tetiklenmesine neden olabilir.

Varsayılan olarak kontrol noktaları, nimo-shake-checkpoint adlı bir veritabanında hedef ApsaraDB for MongoDB veritabanında saklanır. Her koleksiyonun kendi kontrol noktası tablosu vardır ve status_table mevcut senkronizasyonun tam mı yoksa artımlı bir görev mi olduğunu kaydeder.

Tam geçiş yeniden başlatılabilir iletimi desteklemez. Tam geçiş kesintiye uğrarsa baştan başlar.

DynamoDB'yi ApsaraDB for MongoDB'ye geçirin

Aşağıdaki adımlarda Ubuntu örnek olarak kullanılmıştır.

Adım 1: NimoShake'i indirin

wget https://github.com/alibaba/NimoShake/releases/download/release-v1.0.14-20250704/nimo-shake-v1.0.14.tar.gz
En son sürümü NimoShake sürümler sayfasından indirin.

Adım 2: Paketi çıkarın

tar zxvf nimo-shake-v1.0.14.tar.gz

Adım 3: Dizine girin

cd nimo-shake-v1.0.14

Adım 4: NimoShake'i yapılandırın

Yapılandırma dosyasını açın:

vi nimo-shake.conf

Aşağıdaki tablolar tüm yapılandırma parametrelerini kategori gruplarına ayrılmış şekilde açıklar. Önce gerekli parametrelerle başlayın, ardından isteğe bağlı parametreleri ihtiyaca göre ayarlayın.

Gerekli parametreler

Parametre Açıklama Örnek
source.access_key_id Amazon DynamoDB veritabanı için AccessKey ID. source.access_key_id = AKIAIOSFODNN7EXAMPLE
source.secret_access_key Amazon DynamoDB veritabanı için AccessKey secret. source.secret_access_key = wJalrXUtnFEMI/K7MDENG
source.region DynamoDB veritabanının AWS bölgesi. Bölge otomatik algılanıyorsa veya geçerli değilse isteğe bağlıdır. source.region = us-east-2
target.type Hedef veritabanının türü. ApsaraDB for MongoDB için mongodb olarak ayarlayın. DynamoDB uyumlu ApsaraDB for MongoDB örneği için aliyun_dynamo_proxy olarak ayarlayın.

Diğer MongoDB adresleri için bkz. Çoğaltma kümesi örneği bağlantısı veya Parçalı küme örneğine bağlanma.

target.type = mongodb
target.address Hedef veritabanının bağlantı dizesi. Bkz. Çoğaltma kümesi örneğine bağlanma veya Parçalı küme örneğine bağlanma. target.address = mongodb://username:password@s-*****-pub.mongodb.rds.aliyuncs.com:3717
target.mongodb.type Hedef ApsaraDB for MongoDB örneğinin türü. Çoğaltma kümesi örneği için replica. Parçalı küme örneği için sharding. target.mongodb.type = sharding
sync_mode Geçiş modu. all: Tam geçişi çalıştırır, ardından artımlı geçiş yapar. full: Yalnızca tam geçişi çalıştırır. Varsayılan: all.
Not

Kaynak DynamoDB uyumlu bir ApsaraDB for MongoDB örneği olduğunda yalnızca full desteklenir.

sync_mode = all

Genel ayarlar

Parametre Varsayılan Gerekli Açıklama Örnek
id — İsteğe bağlı Geçiş görevinin kimliği. PID dosyaları, günlük adları, kontrol noktası veritabanı adı ve hedef veritabanı adı için kullanılır. id = nimo-shake
log.file stdout İsteğe bağlı Günlük dosyasının yolu. Ayarlanmazsa günlükler stdout'a yazdırılır. log.file = nimo-shake.log
log.level info İsteğe bağlı Günlük seviyesi. Geçerli değerler: none, error, warn, info, debug. log.level = info
log.buffer true İsteğe bağlı Günlük arabelleğe almanın etkin olup olmadığı. true: yüksek performans sağlar ancak çıkışta son birkaç günlük girişi kaybedebilir. false: tüm günlük girişleri temizlenir ancak performans düşebilir. log.buffer = true
system_profile — İsteğe bağlı Hata ayıklama ve yığın içeren eş zamanlı bilgi görüntüleme için PPROF bağlantı noktası. system_profile = 9330
full_sync.http_port — İsteğe bağlı Tam geçiş aşaması için RESTful bağlantı noktası. İzleme istatistiklerini görüntülemek için curl kullanın. Bkz. wiki. full_sync.http_port = 9341
incr_sync.http_port — İsteğe bağlı Artımlı geçiş aşaması için RESTful bağlantı noktası. İzleme istatistiklerini görüntülemek için curl kullanın. Bkz. wiki. incr_sync.http_port = 9340

Kaynak bağlantı ayarları

Parametre Varsayılan Gerekli Açıklama Örnek
source.session_token — İsteğe bağlı DynamoDB'ye erişim için geçici oturum belirteci. Yalnızca geçici kimlik bilgileri kullanırken gereklidir. source.session_token = AQoXnyc4lcK4w4...
source.endpoint_url — İsteğe bağlı Kaynak bir uç nokta türüyse uç nokta URL'si. **Bu parametreyi ayarlamak diğer tüm source.* parametrelerini geçersiz kılar.** source.endpoint_url = "http://192.168.0.1:1010"
source.session.max_retries — İsteğe bağlı Oturum hatasından sonraki maksimum yeniden deneme sayısı. source.session.max_retries = 3
source.session.timeout — İsteğe bağlı Milisaniye cinsinden oturum zaman aşımı. Zaman aşımını devre dışı bırakmak için 0 olarak ayarlayın. source.session.timeout = 3000

Koleksiyon filtreleme

Parametre Varsayılan Gerekli Açıklama Örnek
filter.collection.white — İsteğe bağlı Geçirilecek koleksiyonların izin listesi. Yalnızca listelenen koleksiyonlar geçirilir. filter.collection.white = c1;c2
filter.collection.black — İsteğe bağlı Hariç tutulacak koleksiyonların engelleme listesi. Diğer tüm koleksiyonlar geçirilir. filter.collection.white ile birlikte kullanılamaz. İkisi de ayarlanırsa tüm koleksiyonlar geçirilir. filter.collection.black = c1;c2

Hedef ayarları

Parametre Varsayılan Gerekli Açıklama Örnek
target.db.exist Error İsteğe bağlı Hedefte aynı ada sahip mevcut koleksiyonların nasıl ele alınacağı. rename: Mevcut koleksiyonu zaman damgası soneki ekleyerek yeniden adlandırır (örneğin c1 şuna dönüşür: c1.2019-07-01Z12:10:11). drop: Mevcut koleksiyonu siler. Ayarlanmazsa aynı adlı bir koleksiyon varsa geçiş hata ile durur. target.db.exist = drop
sync_schema_only false İsteğe bağlı Veriler olmadan yalnızca tablo şemasının geçirilip geçirilmeyeceği. sync_schema_only = false

Tam geçiş performansı

Parametre Varsayılan Gerekli Açıklama Örnek
full.concurrency 4 İsteğe bağlı Eşzamanlı olarak geçirilen maksimum koleksiyon sayısı. full.concurrency = 4
full.read.concurrency 1 İsteğe bağlı Tek bir kaynak tablodan okuyan eşzamanlı iş parçacığı sayısı. DynamoDB Scan API'sinin TotalSegments parametresine karşılık gelir. full.read.concurrency = 1
full.document.concurrency 4 İsteğe bağlı Tablo başına eşzamanlı yazar iş parçacığı sayısı. full.document.concurrency = 4
full.document.write.batch — İsteğe bağlı Yazma başına toplanan giriş sayısı. Hedef DynamoDB uyumlu bir veritabanı olduğunda maksimum değer 25'tir. full.document.write.batch = 25
full.document.parser 2 İsteğe bağlı DynamoDB verilerini hedef protokole dönüştürmek için eşzamanlı parser iş parçacığı sayısı. full.document.parser = 2
full.enable_index.user true İsteğe bağlı Kullanıcı tanımlı dizinlerin geçirilip geçirilmeyeceği. full.enable_index.user = true
full.executor.insert_on_dup_update true İsteğe bağlı Hedefte yinelenen bir anahtar bulunduğunda INSERT işleminin UPDATE işlemine dönüştürülüp dönüştürülmeyeceği. full.executor.insert_on_dup_update = true
qps.full 1000 İsteğe bağlı Tam geçiş sırasında saniye başına maksimum Scan komutu çağrısı sayısı. qps.full = 1000
qps.full.batch_num 128 İsteğe bağlı Tam geçiş sırasında saniye başına çekilen veri girişi sayısı. qps.full.batch_num = 128
full.read.filter_expression — İsteğe bağlı Tam geçiş için bir DynamoDB filtre ifadesi. Değişkenler iki nokta üst üste ile başlar, örneğin :begin ve :end. Değişken değerlerini full.read.filter_attributevalues içinde belirtin. full.read.filter_expression = create_time > :begin AND create_time < :end
full.read.filter_attributevalues — İsteğe bağlı full.read.filter_expression içindeki değişkenler için değerler. N Sayıyı, S Dizeyi temsil eder. full.read.filter_attributevalues = begin`N`1646724207280~~~end`N`1646724207283

Artımlı geçiş performansı

Yalnızca tam geçiş çalıştırıyorsanız bu bölümü atlayın ( sync_mode = full ).
Parametre Varsayılan Gerekli Açıklama Örnek
incr_sync_parallel false İsteğe bağlı Paralel artımlı geçişin etkin olup olmadığı. true: daha fazla bellek kullanır. false: standart mod. incr_sync_parallel = false
increase.concurrency 16 İsteğe bağlı Eşzamanlı olarak yakalanan maksimum parça sayısı. increase.concurrency = 16
increase.executor.insert_on_dup_update true İsteğe bağlı Hedefte aynı anahtarlar bulunduğunda INSERT işleminin UPDATE işlemine dönüştürülüp dönüştürülmeyeceği. increase.executor.insert_on_dup_update = true
increase.executor.upsert true İsteğe bağlı Hedefte eşleşen anahtar olmadığında UPDATE işleminin UPSERT işlemine dönüştürülüp dönüştürülmeyeceği. Bir UPSERT işlemi anahtar varsa kaydı günceller, yoksa ekler. increase.executor.upsert = true
qps.incr 1000 İsteğe bağlı Artımlı geçiş sırasında saniye başına maksimum GetRecords komutu çağrısı sayısı. qps.incr = 1000
qps.incr.batch_num 128 İsteğe bağlı Artımlı geçiş sırasında saniye başına çekilen veri girişi sayısı. qps.incr.batch_num = 128

Kontrol noktası ayarları

Yalnızca tam geçiş çalıştırıyorsanız bu bölümü atlayın ( sync_mode = full ).
Parametre Varsayılan Gerekli Açıklama Örnek
checkpoint.type — İsteğe bağlı Kontrol noktası verileri için depolama türü. mongodb: Kontrol noktalarını bir ApsaraDB for MongoDB veritabanında saklar (yalnızca target.type değeri mongodb olduğunda kullanılabilir). file: Kontrol noktalarını yerel makinede saklar. checkpoint.type = mongodb
checkpoint.address Destination DB İsteğe bağlı Kontrol noktası verilerini saklamak için adres. checkpoint.type değeri mongodb ise bağlantı dizesini girin. Ayarlanmazsa kontrol noktaları hedef veritabanında saklanır. checkpoint.type değeri file ise göreli bir yol girin. Ayarlanmazsa varsayılan olarak NimoShake yürütülebilir dosyasına göreli checkpoint klasörüdür. checkpoint.address = mongodb://username:password@s-*****-pub.mongodb.rds.aliyuncs.com:3717
checkpoint.db <id>-checkpoint İsteğe bağlı Kontrol noktası depolaması için veritabanı adı. Varsayılan olarak <id>-checkpoint şeklindedir, örneğin nimo-shake-checkpoint. checkpoint.db = nimo-shake-checkpoint

Gelişmiş ayarlar

Parametre Varsayılan Gerekli Açıklama Örnek
convert._id — İsteğe bağlı MongoDB'nin _id alanıyla çakışmaları önlemek için DynamoDB'den gelen _id alanına eklenen önek. convert._id = pre

Adım 5: Geçişi başlatın

./nimo-shake.linux -conf=nimo-shake.conf

Tam geçiş tamamlandığında çıktı şunu gösterir:

full sync done!

Geçiş bir hata nedeniyle durursa NimoShake hata mesajını yazdırır ve çıkar. Sorunu teşhis etmek için günlük dosyasını veya stdout çıktısını inceleyin.

Kullanım notları

  • Yoğun olmayan saatlerde çalıştırın. Tam geçiş hem kaynak DynamoDB veritabanında hem de hedef ApsaraDB for MongoDB örneğinde kaynak tüketir. Yüksek trafik veya yetersiz sunucu teknik özellikleri veritabanı yükünü artırabilir. Etkiyi en aza indirmek için geçişleri yoğun olmayan saatlerde planlayın.

  • Artımlı geçişi sürekli izleyin. Artımlı geçiş uzun süre kesintiye uğrarsa veya kontrol noktası kaybolursa tüm verileri yeniden senkronize etmek için tam geçiş gerekebilir.

  • Artımlı geçiş dizinleri senkronize etmez. Artımlı aşama sırasında oluşturulan veya değiştirilen dizinler geçirilmez. Gerekirse dizin değişikliklerini hedefte manuel olarak yönetin.

  • Koleksiyon adı çakışmaları. Hedefte aynı ada sahip bir koleksiyon zaten varsa target.db.exist parametresini rename veya drop olarak yapılandırın. Bu ayar olmadan geçiş hata ile durur.

Sonraki adımlar