Azure Cosmos DB’ye yüzlerce terabaytlık verileri geçirme

ŞUNLAR IÇIN GEÇERLIDIR: Nosql MongoDB Cassandra Gremlin Tablo

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 kullandı.

İş 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 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 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çirmeye yönelik mevcut araçlarda özellikle büyük ölçeklerde 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: Geçiş ilerleme durumunu izlemek ve büyük veri kümelerini geçirirken denetim işaretlerine sahip olmak ö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'ı zaten tamamlandığında tüm geçiş işlemini yeniden başlatmak verimli olmayacaktır.

  • 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ının aralıklı sorunlara karşı koruma sağlayan güçlü yeniden deneme özellikleri olsa da, her zaman yeterli değildir. Örneğin, kaynak veri belgelerinin %0,01'inden azı 2 MB'tan büyükse, belge yazma işleminin Azure Cosmos DB'de başarısız olmasına neden olur. İdeal olarak, 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 getirmek yararlı olur.

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, denetim noktası oluşturma biçimi olarak bağımsız olarak çalıştırılan mikro toplu işlemler halinde bölümlere 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(ADLS) içindeki ayrı dosyalara bölümlenmesi gerekir. Özel araç, ADLS'deki 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 sanal makine kümesinde ç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 aktarılı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.

Geçiş Aracı Kurulumu

İ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 için ö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 ile 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 60 TB civarında 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ği varsayıldığında, sağlanan işlem geçiş hızına ilişkin bir tahmin sağlar. Önceki örnekten devam edersek, NoSQL hesabı için Azure Cosmos DB API'sine 1 KB'lık 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 yok 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:

  1. İlk olarak verileri kaynaktan Azure Blob Depolama aktarın. Geçiş hızını artırmak için farklı kaynak bölümleri 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.

  2. Toplu yürütücü kitaplığı, tek bir istemci VM'sinde 500.000 RU kullanmak için ölçeği artırabilir. 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.

  3. 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.

  4. 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.

  5. 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.

  6. 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ümleri yeniden boyutlandırmak için içeri aktarma adımını 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.