Azure Cosmos DB’ye yüzlerce terabaytlık verileri geçirme
ŞUNLAR IÇIN GEÇERLIDIR: NoSQL MongoDB Cassandra Gremlin Masa
Azure Cosmos DB terabaytlarca veriyi depolayabilir. Üretim iş yükünüzü Azure Cosmos DB’ye taşımak için büyük ölçekli bir veri geçişi yapabilirsiniz. Bu makalede büyük ölçekli verileri Azure Cosmos DB’ye geçirmenin zorlukları açıklanır; zorluklarda size yardımcı olan ve verileri Azure Cosmos DB’ye geçiren araç tanıtılır. Bu örnek olay incelemesinde müşteri NoSQL için Azure Cosmos DB API'sini kullanmıştı.
İş yükünün tamamını Azure Cosmos DB'ye geçirmeden önce, bölüm anahtarı seçimi, sorgu performansı ve veri modelleme gibi bazı yönleri doğrulamak için bir veri alt kümesini geçirebilirsiniz. Kavram kanıtını doğruladıktan sonra iş yükünün tamamını Azure Cosmos DB'ye taşıyabilirsiniz.
Veri geçişi için araçlar
Azure Cosmos DB geçiş stratejileri şu anda API seçimine ve verilerin boyutuna göre farklılık gösterir. Veri modelleme, sorgu performansı, bölüm anahtarı seçimi gibi daha küçük veri kümelerini geçirmek için Azure Data Factory'nin Azure Cosmos DB bağlayıcısını kullanabilirsiniz. Spark'ı biliyorsanız verileri geçirmek için Azure Cosmos DB Spark bağlayıcısını kullanmayı da seçebilirsiniz.
Büyük ölçekli geçişler için zorluklar
Verileri Azure Cosmos DB'ye geçirmek için mevcut araçlarda büyük ölçeklerde özellikle belirgin hale gelen bazı sınırlamalar vardır:
Sınırlı ölçek genişletme özellikleri: Terabaytlarca veriyi mümkün olan en kısa sürede Azure Cosmos DB'ye geçirmek ve sağlanan aktarım hızının tamamını etkili bir şekilde kullanmak için geçiş istemcilerinin süresiz olarak ölçeği genişletme özelliğine sahip olması gerekir.
İlerleme izleme ve denetim noktası eksikliği: Büyük veri kümelerini geçirirken geçiş ilerlemesini izlemek ve işaret etme denetimi yapmak önemlidir. Aksi takdirde, geçiş sırasında oluşan tüm hatalar geçişi durdurur ve işlemi sıfırdan başlatmanız gerekir. %99'unun zaten tamamlandığı geçiş işleminin tamamını yeniden başlatmak verimli olmaz.
Teslim edilemeyen ileti kuyruğu eksikliği: Büyük veri kümelerinde bazı durumlarda kaynak verilerin bazı bölümleriyle ilgili sorunlar olabilir. Ayrıca, istemci veya ağ ile ilgili geçici sorunlar olabilir. Bu durumlardan biri tüm geçişin başarısız olmasına neden olmamalıdır. Çoğu geçiş aracı, aralıklı sorunlara karşı koruma sağlayan güçlü yeniden deneme özelliklerine sahip olsa da, her zaman yeterli değildir. Örneğin, kaynak veri belgelerinin %0,01'den azının boyutu 2 MB'tan büyükse, belge yazma işleminin Azure Cosmos DB'de başarısız olmasına neden olur. İdeal olan, geçiş aracının bu 'başarısız' belgeleri geçiş sonrasında işlenebilen başka bir teslim edilemeyen ileti kuyruğunda kalıcı hale getirmektir.
Bu sınırlamaların çoğu Azure Data factory, Azure Data Migration hizmetleri gibi araçlar için düzeltiliyor.
Toplu yürütücü kitaplığına sahip özel araç
Yukarıdaki bölümde açıklanan zorluklar, birden çok örnek arasında kolayca ölçeklendirilebilen ve geçici hatalara karşı dayanıklı olan özel bir araç kullanılarak çözülebilir. Ayrıca, özel araç çeşitli denetim noktalarında geçişi duraklatabilir ve sürdürebilir. Azure Cosmos DB, bu özelliklerden bazılarını içeren toplu yürütücü kitaplığını zaten sağlar. Örneğin, toplu yürütücü kitaplığı zaten geçici hataları işleme işlevselliğine sahiptir ve düğüm başına yaklaşık 500 K RU kullanmak için tek bir düğümdeki iş parçacıklarının ölçeğini genişletebilir. Toplu yürütücü kitaplığı ayrıca kaynak veri kümesini bir denetim noktası oluşturma biçimi olarak bağımsız olarak çalıştırılan mikro toplu işlemlere ayırır.
Özel araç toplu yürütücü kitaplığını kullanır ve birden çok istemci arasında ölçeği genişletmeyi ve alma işlemi sırasında hataları izlemeyi destekler. Bu aracı kullanmak için, farklı geçiş çalışanlarının her dosyayı alıp Azure Cosmos DB'ye alabilmesi için kaynak verilerin Azure Data Lake Storage'daki (ADLS) ayrı dosyalara bölümlenmesi gerekir. Özel araç, ADLS'de her bir kaynak dosyanın geçiş ilerleme durumuyla ilgili meta verileri depolayan ve bunlarla ilişkili hataları izleyen ayrı bir koleksiyon kullanır.
Aşağıdaki görüntüde bu özel araç kullanılarak geçiş işlemi açıklanır. Araç bir dizi sanal makinede çalışıyor ve her sanal makine, kaynak veri bölümlerinden birinde kiralama almak için Azure Cosmos DB'deki izleme koleksiyonunu sorgular. Bu yapıldıktan sonra, kaynak veri bölümü araç tarafından okunur ve toplu yürütücü kitaplığı kullanılarak Azure Cosmos DB'ye alınır. Ardından, izleme koleksiyonu veri alımının ilerleme durumunu ve karşılaşılan hataları kaydedecek şekilde güncelleştirilir. Bir veri bölümü işlendikten sonra araç, bir sonraki kullanılabilir kaynak bölümü sorgulamayı dener. Tüm veriler geçirilene kadar sonraki kaynak bölümü işlemeye devam eder. Aracın kaynak kodu Azure Cosmos DB toplu alım deposunda kullanılabilir.
İzleme koleksiyonu, aşağıdaki örnekte gösterildiği gibi belgeleri içerir. Bu tür belgeleri kaynak verilerdeki her bölüm için bir tane görürsünüz. Her belge konumu, geçiş durumu ve hataları (varsa) gibi kaynak veri bölümünün meta verilerini içerir:
{
"owner": "25812@bulkimporttest07",
"jsonStoreEntityImportResponse": {
"numberOfDocumentsReceived": 446688,
"isError": false,
"totalRequestUnitsConsumed": 3950252.2800000003,
"errorInfo": [],
"totalTimeTakenInSeconds": 188,
"numberOfDocumentsImported": 446688
},
"storeType": "AZURE_BLOB",
"name": "sourceDataPartition",
"location": "sourceDataPartitionLocation",
"id": "sourceDataPartitionId",
"isInProgress": false,
"operation": "unpartitioned-writes",
"createDate": {
"seconds": 1561667225,
"nanos": 146000000
},
"completeDate": {
"seconds": 1561667515,
"nanos": 180000000
},
"isComplete": true
}
Veri geçişi önkoşulları
Veri geçişi başlamadan önce dikkate alınması gereken birkaç önkoşul vardır:
Veri boyutunu tahmin edin:
Kaynak veri boyutu, Azure Cosmos DB'deki veri boyutuyla tam olarak eşlenmeyebilir. Azure Cosmos DB'de veri boyutlarını denetlemek için kaynaktan birkaç örnek belge eklenebilir. Örnek belge boyutuna bağlı olarak, geçiş sonrasında Azure Cosmos DB'deki toplam veri boyutu tahmin edilebilir.
Örneğin, Azure Cosmos DB'de geçiş sonrasındaki her belge 1 KB civarındaysa ve kaynak veri kümesinde yaklaşık 60 milyar belge varsa, Azure Cosmos DB'deki tahmini boyutun 60 TB'a yakın olacağı anlamına gelir.
Yeterli RU'ya sahip kapsayıcıları önceden oluşturun:
Azure Cosmos DB depolamanın ölçeğini otomatik olarak genişletse de, en küçük kapsayıcı boyutundan başlamanız önerilmez. Daha küçük kapsayıcılar daha düşük aktarım hızı kullanılabilirliğine sahiptir ve bu da geçişin tamamlanmasının çok daha uzun süreceği anlamına gelir. Bunun yerine, son veri boyutuna (önceki adımda tahmin edilen şekilde) sahip kapsayıcılar oluşturmak ve geçiş iş yükünün sağlanan aktarım hızını tam olarak tüketdiğinden emin olmak yararlıdır.
Önceki adımda. Veri boyutunun yaklaşık 60 TB olduğu tahmin edildiği için veri kümesinin tamamını barındırmak için en az 2,4 M RU'lık bir kapsayıcı gerekir.
Geçiş hızını tahmin edin:
Geçiş iş yükünün sağlanan aktarım hızının tamamını kullanabileceğini varsayarsak, sağlanan işlem geçiş hızına ilişkin bir tahmin sağlar. Önceki örneğe devam edersek, NoSQL hesabı için Azure Cosmos DB API'sine 1 KB'lık bir belge yazmak için 5 RU gereklidir. 2,4 milyon RU saniyede 480.000 belgenin (veya 480 MB/sn) aktarılmasına izin verir. Bu, 60 TB'lık tam geçişin 125.000 saniye veya yaklaşık 34 saat süreceği anlamına gelir.
Geçişin bir gün içinde tamamlanmasını istiyorsanız sağlanan aktarım hızını 5 milyon RU'ya çıkarmalısınız.
Dizin oluşturmayı kapatın:
Geçişin en kısa sürede tamamlanması gerektiğinden, alınan belgelerin her biri için dizin oluşturmak için harcanan süreyi ve RU'ları en aza indirmeniz önerilir. Azure Cosmos DB tüm özellikleri otomatik olarak dizinler, belirli birkaç terim için dizin oluşturmayı en aza indirmek veya geçiş sırasında tamamen kapatmak faydalı olabilir. Aşağıda gösterildiği gibi indexingMode değerini hiçbiri olarak değiştirerek kapsayıcının dizin oluşturma ilkesini kapatabilirsiniz:
{
"indexingMode": "none"
}
Geçiş tamamlandıktan sonra dizin oluşturmayı güncelleştirebilirsiniz.
Geçiş süreci
Önkoşullar tamamlandıktan sonra aşağıdaki adımlarla verileri geçirebilirsiniz:
İlk olarak verileri kaynaktan Azure Blob Depolama aktarın. Geçiş hızını artırmak için farklı kaynak bölümler arasında paralelleştirme yapmak yararlı olur. Geçişe başlamadan önce kaynak veri kümesinin boyutu yaklaşık 200 MB olan dosyalara bölümlenmesi gerekir.
Toplu yürütücü kitaplığı ölçeği artırarak tek bir istemci VM'sinde 500.000 RU kullanabilir. Kullanılabilir aktarım hızı 5 milyon RU olduğundan, Azure Cosmos DB veritabanınızın bulunduğu bölgede 10 Ubuntu 16.04 VM (Standard_D32_v3) sağlanmalıdır. Bu VM'leri geçiş aracı ve ayarlar dosyasıyla hazırlamanız gerekir.
kuyruk adımını istemci sanal makinelerinden birinde çalıştırın. Bu adım, ADLS kapsayıcısını tarayan ve kaynak veri kümesinin bölüm dosyalarının her biri için bir ilerleme izleme belgesi oluşturan izleme koleksiyonunu oluşturur.
Ardından, tüm istemci VM'lerinde içeri aktarma adımını çalıştırın. İstemcilerin her biri bir kaynak bölümün sahipliğini alabilir ve verilerini Azure Cosmos DB'ye alabilir. Tamamlandıktan ve durumu izleme koleksiyonunda güncelleştirildikten sonra, istemciler izleme koleksiyonundaki bir sonraki kullanılabilir kaynak bölümü sorgulayabilir.
Bu işlem, kaynak bölümlerin tamamı alınana kadar devam eder. Tüm kaynak bölümler işlendikten sonra, araç aynı izleme koleksiyonunda hata düzeltme modunda yeniden çalıştırılmalıdır. Bu adım, hatalar nedeniyle yeniden işlenmesi gereken kaynak bölümleri tanımlamak için gereklidir.
Bu hatalardan bazıları kaynak verilerdeki yanlış belgelerden kaynaklanıyor olabilir. Bunlar tanımlanmalı ve düzeltilmelidir. Ardından, başarısız bölümlerdeki içeri aktarma adımını yeniden çalıştırarak yeniden çalıştırmanız gerekir.
Geçiş tamamlandıktan sonra Azure Cosmos DB'deki belge sayısının kaynak veritabanındaki belge sayısıyla aynı olduğunu doğrulayabilirsiniz. Bu örnekte Azure Cosmos DB'deki toplam boyut 65 terabayt olarak ortaya çıktı. Geçiş sonrasında dizin oluşturma seçmeli olarak açılabilir ve RU'lar iş yükünün işlemleri için gereken düzeye düşürülebilir.
Sonraki adımlar
- .NET ve Java'da toplu yürütücü kitaplığını kullanan örnek uygulamaları deneyerek daha fazla bilgi edinin.
- Toplu yürütücü kitaplığı Azure Cosmos DB Spark bağlayıcısı ile tümleşiktir. Daha fazla bilgi edinmek için Bkz . Azure Cosmos DB Spark bağlayıcısı makalesi.
- Büyük ölçekli geçişlerle ilgili ek yardım için "Genel Danışmanlık" sorun türü ve "Büyük (TB+) geçişler" sorun alt türü altında bir destek bileti açarak Azure Cosmos DB ürün ekibine başvurun.
- Azure Cosmos DB'ye geçiş için kapasite planlaması yapmaya mı çalışıyorsunuz? Kapasite planlaması için mevcut veritabanı kümeniz hakkındaki bilgileri kullanabilirsiniz.
- Tek bildiğiniz mevcut veritabanı kümenizdeki sanal çekirdek ve sunucu sayısıysa, sanal çekirdek veya vCPU kullanarak istek birimlerini tahmin etme hakkında bilgi edinin
- Geçerli veritabanı iş yükünüz için tipik istek oranlarını biliyorsanız Azure Cosmos DB kapasite planlayıcısı kullanarak istek birimlerini tahmin etme hakkında bilgi edinin