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

Uygulama hedefı: MongoDB için SQL API Cassandra API gremlin API tablo API'si Azure Cosmos DB API 'si

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. Müşteri, bu örnek olay incelemesinde Cosmos DB SQL API 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ğrulandıktan sonra iş yükünün tamamını Azure veritabanına Cosmos.

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. Daha küçük veri kümelerini (veri modelleme, sorgu performansı, bölüm anahtarı seçimi vb.) geçirmek için Veri Geçiş Aracı'nı veya Azure Data Factory'nin Azure Cosmos DB bağlayıcısı'nı seçebilirsiniz. Spark'ı biliyorsanız, verileri geçirmek için Azure Cosmos DB Spark bağlayıcısı kullanmayı da seçebilirsiniz.

Büyük ölçekli geçişler için zorluklar

Verileri Azure Cosmos DB'ye Cosmos araçlar, özellikle büyük ölçeklerde belirgin hale geldi:

  • Sınırlı ölçek genişletme özellikleri: Terabaytlarca verinin Azure Cosmos DB'ye mümkün olan en kısa sürede geçirilmesi ve sağlanan aktarım hızının tamamını etkili bir şekilde tüketmesi için geçiş istemcilerinin süresiz olarak ölçeği genişletebilmeleri gerekir.

  • İlerleme izleme ve denetim noktası eksikliği: Büyük veri kümelerini geçirme sırasında geçişin ilerlemesini izlemek ve onay işaretlerini izlemek önemlidir. Aksi takdirde, geçiş sırasında oluşan herhangi bir hata geçişi durdurur ve işlemi sıfırdan başlatmanız gerekir. %99'u zaten tamamlandığında geçiş işleminin tamamını yeniden başlatmak verimli olmaz.

  • Posta 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 da olabilir. Bu durumlardan biri, geçişin tamamının başarısız olmasına neden olmaz. Çoğu geçiş aracında aralıklı sorunlara karşı koruma sağlar güçlü yeniden deneme özellikleri olsa da her zaman yeterli değildir. Örneğin, kaynak veri belgelerinin %0,01'inden azı boyutu 2 MB'ın üzerinde ise, belge yazmanın 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ı işlenecek başka bir teslim alınamayan ileti kuyruğunda kalıcı olması yararlıdır.

Bu sınırlamaların çoğu Azure Data Factory, Azure Veri Geçişi hizmetleri gibi araçlar için düzeltilmiştir.

Toplu yürütücü kitaplığı ile özel araç

Yukarıdaki bölümde açıklanan güçlükler, birden çok örnekte kolayca ölçeklendirilen ve geçici hatalara karşı daha güçlü olan özel bir araç kullanılarak çözülebilir. Ayrıca, özel araç çeşitli denetim noktalarında geçişi duraklatabilir ve sürdürebilirsiniz. Azure Cosmos DB, bu özelliklerden bazılarının yer alan 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şlevine sahip ve tek bir düğümdeki iş parçacıklarının ölçeğini düğüm başına yaklaşık 500 bin RU tüketmek için ölçeklendirebilir. 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 gruplara da bölümler.

Ö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 kaynak verilerin Azure Data Lake Depolama'de (ADLS) ayrı dosyalara bölümlenmiş olması gerekir. Böylece, farklı geçiş çalışanları her dosyayı alıp Azure Cosmos DB'ye almalıdır. Özel araç, ADLS'de her bir kaynak dosya için geçiş ilerleme durumuyla ilgili meta verileri depolar ve onlarla ilişkili hataları takip eden ayrı bir koleksiyon kullanır.

Aşağıdaki görüntüde, bu özel aracı kullanan geçiş işlemi açıkmektedir. Araç bir sanal makine kümesinde çalışıyor ve her sanal makine, kaynak veri bölümlerine kiralama almak için Azure Cosmos DB'de 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ınarak. Ardından, izleme koleksiyonu veri alımının ilerlemesini ve karşılaşılan hataları kaydeden şekilde güncelleştirilir. Bir veri bölümü işlendikten sonra araç bir sonraki kullanılabilir kaynak bölümü sorgulamaya çalışır. Tüm veriler geçirilene kadar sonraki kaynak bölümü işlemeye devam eder. Aracın kaynak kodu Azure Cosmos DB toplu alma depolamada kullanılabilir.

Geçiş Aracı Kurulumu

İzleme koleksiyonu, aşağıdaki örnekte gösterildiği gibi belgeler içerir. Bu tür belgeleri kaynak verilerde her bölüm için bir tane olarak görüyorsunuz. Her belge konumu, geçiş durumu ve hatalar (varsa) gibi kaynak veri bölümü için meta verileri 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 göz önünde bulundurulmamız gereken birkaç önkoşul vardır:

Veri boyutunu tahmin etmek için:

Kaynak veri boyutu, Azure Veritabanı'nın veri boyutuyla tam olarak Cosmos olabilir. Azure veritabanı veritabanına veri boyutunu kontrol etmek için kaynaktan birkaç örnek Cosmos eklenebilir. Örnek belge boyutuna bağlı olarak, Geçiş sonrası veritabanı için Azure Cosmos toplam veri boyutu tahmin olabilir.

Örneğin, Azure Cosmos DB'de geçiş sonrasındaki her belge yaklaşık 1 KB ise ve kaynak veri kümesinde yaklaşık 60 milyar belge varsa, Bu, Azure Cosmos DB'de tahmini boyutun 60 TB'a yakın olduğu 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 tavsiye edilemez. Daha küçük kapsayıcılar daha düşük aktarım hızı kullanılabilirliği sunar ve bu da geçişin tamamlanmasının çok daha uzun sürer. 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ı tamamen tüket olduğundan emin olmak yararlıdır.

Önceki adımda. veri boyutunun yaklaşık 60 TB olduğu tahmin edilen bu yana, tüm veri kümesine uyum sağlayacak en az 2,4 M RU'lara sahip bir kapsayıcı gereklidir.

Geçiş hızını tahmin etmek:

Geçiş iş yükünün sağlanan aktarım hızının tamamını tükettiği varsayıldı, boyunca sağlanan geçiş hızı tahmini sağlar. Önceki örnekten devam etmek gerekirse, Azure Cosmos DB veritabanı api hesabına 1 KB'lık bir belge yazmak için 5 RU SQL gerekir. 2,4 milyon RU, saniye başına 480.000 belge (veya 480 MB/sn) aktarımına olanak sağlar. Bu, 60 TB'lık tam geçişin 125.000 saniye veya yaklaşık 34 saat sürer.

Geçişin bir gün içinde tamamlanacak olması durumunda sağlanan aktarım hızını 5 milyon RU'ya artırmalısiniz.

Dizin oluşturmayı kapatın:

Geçişin mümkün olan en kısa sürede tamamlanması gerektiği için, alındı her bir belge için dizin oluşturmak için harcanan zamanı ve RU'ları en aza indirmeniz tavsiye edilebilir. Azure Cosmos DB tüm özellikleri otomatik olarak dizinler; seçilen birkaç terimle dizinlemesi en aza indirmek veya geçiş sırasında tamamen kapatmak iyi bir işlemdir. Aşağıda gösterildiği gibi indexingMode'un yok olarak değiştirilmesiyle kapsayıcının dizin oluşturma ilkesi devre dışı indirebilirsiniz:

  { 
        "indexingMode": "none" 
  } 

Geçiş tamamlandıktan sonra dizin oluşturma işlemini güncelleştirin.

Geçiş süreci

Önkoşullar tamamlandıktan sonra verileri aşağıdaki adımlarla geçirebilirsiniz:

  1. İlk olarak verileri kaynaktan Azure Blob Depolama'ya Depolama. 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ümesi yaklaşık 200 MB boyutuna sahip dosyalara bölümlenmiş olmalıdır.

  2. Toplu yürütücü kitaplığı, tek bir istemci VM'de 500.000 RU tüketmek için ölçeğini ölçeklendirebilirsiniz. Kullanılabilir aktarım hızı 5 milyon RU olduğu için, Azure Cosmos veritabanınızı bulunduğu bölgede 10 Ubuntu 16.04 VM 'nizin (Standard_D32_v3) sağlanması gerekir. Bu VM'leri geçiş aracı ve ayarlar dosyasıyla hazırlamanız gerekir.

  3. Kuyruk adımını istemci sanal makinelerinden biri üzerinde çalıştırın. Bu adım, ADLS kapsayıcısı tarar ve kaynak veri kümesi 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'lerde içeri aktarma adımını çalıştırın. İstemcilerin her biri bir kaynak bölümde sahiplik elde eder ve verilerini Azure Cosmos DB'ye alır. Tamamlandığında ve izleme koleksiyonunda durumu güncelleştirildiğinde, istemciler izleme koleksiyonunda bir sonraki kullanılabilir kaynak bölümü sorgular.

  5. Bu işlem, tüm kaynak bölüm kümesi alındıya kadar devam eder. Tüm kaynak bölümler işlendikten sonra, araç aynı izleme koleksiyonunda hata düzeltme modunda yeniden çalıştırmalıdır. Hatalardan dolayı yeniden işlenmesi gereken kaynak bölümleri tanımlamak için bu adım gereklidir.

  6. Bu hatalardan bazıları kaynak verilerde yanlış belgelerden kaynaklanmış olabilir. Bunlar tanımlı ve düzeltilmiştir. Ardından, başarısız bölümleri yeniden almak 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ıyla kaynak veritabanındaki belge sayısı arasında aynı olduğunu doğruabilirsiniz. Bu örnekte, Azure Cosmos DB'nin toplam boyutu 65 terabayta çıktı. Geçiş sonrası dizin oluşturma seçmeli olarak açık olabilir 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ı tüketen örnek uygulamaları çalıştırarak daha fazla bilgi edinebilirsiniz.
  • Toplu yürütücü kitaplığı daha fazla bilgi edinmek için Cosmos DB Spark bağlayıcısı ile tümleştirilmiştir. Azure Cosmos DB Spark bağlayıcısı makalesine bakın.
  • 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ında bilgi kullanabilirsiniz.
    • Mevcut veritabanı kümenizin sanal çekirdek ve sunucu sayısı hakkında tek bilginiz varsa, sanal çekirdek veya vCPUS kullanarak istek birimlerini tahmin hakkında bilgi edinebilirsiniz
    • 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 hakkında bilgi edinin