Aracılığıyla paylaş


Azure Cosmos DB for MongoDB'de yazma performansını iyileştirin

ŞUNLAR IÇIN GEÇERLIDIR: MongoDB

Yazma performansını iyileştirmek MongoDB'nin sınırsız ölçeği için Azure Cosmos DB'den en iyi şekilde yararlanmak için size yardımcı olur. Diğer yönetilen MongoDB hizmetlerinden farklı olarak, MongoDB API'si koleksiyonlarınızı otomatik olarak ve saydam bir şekilde parçalayarak (parçalı koleksiyonları kullanırken) sonsuz ölçeklendirir.

Veritabanlarınızdan ve koleksiyonlarınızdan en iyi şekilde yazma elde etmek için verileri paralelleştirerek ve parçalara dağıtarak veri yazma yönteminizin bu konuda dikkatli olması gerekir. Bu makalede yazma performansını iyileştirmeye yönelik en iyi yöntemler açıklanmaktadır.

Yükü parçalarınıza yayma

MongoDB koleksiyonu için parçalanmış BIR API'ye veri yazarken verileriniz küçük dilimlere bölünür (parçalanır) ve parça anahtarı alanınızın değerine göre her parçaya yazılır. Her dilimi, yalnızca bir benzersiz parça anahtarı değeri içeren belgeleri depolayan bir sanal makinenin küçük bir bölümü olarak düşünebilirsiniz.

Uygulamanız tek bir parçaya çok büyük miktarda veri yazarsa, bu işlem verimli olmaz çünkü uygulama yükü tüm parçalarınıza yaymak yerine yalnızca bir parçanın aktarım hızını en üst düzeyde tutar. Yazma yükünüz, benzersiz parça anahtarı değerlerine sahip birçok belgeye paralel olarak yazılarak koleksiyonunuz genelinde eşit bir şekilde yayılır.

Bunu yapmanın bir örneği, kategori alanında parçalanmış bir ürün kataloğu uygulaması olabilir. Aynı anda bir kategoriye (parça) yazmak yerine, en yüksek yazma aktarım hızına ulaşmak için tüm kategorilere aynı anda yazma daha iyi olur.

Dizin sayısını azaltma

Dizin oluşturma , verilerinizi sorgulamak için gereken süreyi önemli ölçüde azaltmak için harika bir özelliktir. En esnek sorgu deneyimi için MongoDB API'si, verilerinizde varsayılan olarak joker karakter dizinini etkinleştirerek tüm alanlara yönelik sorguların son derecede hızlı olmasını sağlar. Ancak, joker karakter dizinlerini içeren tüm dizinler, yazma işlemleri koleksiyonu ve dizinleri değiştirdiğinden veri yazarken ek yük oluşturur.

Dizin sayısını yalnızca sorgularınızı desteklemek için ihtiyacınız olan dizinlerle azaltmak, yazma işlemlerinizi daha hızlı ve daha ucuz hale getirir. Genel bir kural olarak aşağıdakileri öneririz:

  • Filtrelediğiniz tüm alanlara karşılık gelen bir tek alan dizini olmalıdır. Bu seçenek, çok alanlı filtrelemeyi de etkinleştirir.
  • Sıraladığınız herhangi bir alan grubunun bu grup için bileşik dizini olmalıdır.

MongoDB sürücülerinde false olarak sıralanmış olarak ayarlayın

Varsayılan olarak, MongoDB sürücüleri veri yazarken sıralı seçeneği "true" olarak ayarlar ve her belgeyi tek tek sırasıyla yazar. Her yazma isteğinin bir öncekinin tamamlanmasını beklemesi gerektiğinden bu seçenek yazma performansını azaltır. Veri yazarken performansı artırmak için bu seçeneği false olarak ayarlayın.

db.collection.insertMany(
   [ <doc1> , <doc2>, ... ],
   {
      ordered: false
   }
)

En uygun toplu iş boyutu ve iş parçacığı sayısı için ayarlama

Yazma işlemlerinin birçok iş parçacığı/işlem arasında paralelleştirilmesi, yazma işlemlerini ölçeklendirmenin anahtarıdır. MongoDB IÇIN API, her işlem/iş parçacığı için en fazla 1.000 belgeden oluşan toplu yazma işlemlerini kabul eder.

İşlem/iş parçacığı başına bir kerede 1.000'den fazla belge yazıyorsanız, gibi insertMany() istemci işlevleri yaklaşık 1.000 belgeyle sınırlandırılmalıdır. Aksi takdirde, istemci sonraki toplu işlemeye geçmeden önce her toplu işlemi işlemeyi bekler. Bazı durumlarda, toplu işlemleri 1.000'den az veya biraz daha fazla belgeyle bölme işlemi daha hızlı olur.

Sonraki adımlar

  • MongoDB IÇIN API'de dizin oluşturma hakkında daha fazla bilgi edinin.
  • Azure Cosmos DB'nin parçalama/bölümleme hakkında daha fazla bilgi edinin.
  • Yaygın sorunları giderme hakkında daha fazla bilgi edinin.
  • 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