Aracılığıyla paylaş


Azure Cosmos DB Java SDK'sı için en iyi yöntemler

UYGULANANLAR: NoSQL

Bu makalede Azure Cosmos DB Java SDK'sını kullanmaya yönelik en iyi yöntemler açıklanmaktadır. Bu uygulamaları izleyerek gecikme sürenizi, kullanılabilirliğinizi iyileştirmeye ve genel performansı artırmaya yardımcı olur.

Denetim listesi

Checked Konu Ayrıntılar/Bağlantılar
SDK Sürümü En iyi performans için her zaman azure cosmos DB SDK'sının en son sürümünü kullanabilirsiniz.
Singleton İstemcisi Daha iyi performans için uygulamanızın ömrü boyunca tek bir örneği CosmosClient kullanın.
Bölgeler Gecikme süresini azaltmak için mümkün olduğunda uygulamanızı Azure Cosmos DB hesabınızla aynı Azure bölgesinde çalıştırdığınızdan emin olun. En iyi kullanılabilirlik için 2-4 bölgeyi etkinleştirin ve hesaplarınızı birden çok bölgede çoğaltarak. Üretim iş yükleri için hizmet tarafından yönetilen yük devretmeyi etkinleştirin. Bu yapılandırmanın olmaması durumunda, bölge bağlantısının olmaması nedeniyle el ile yük devretme başarılı olmayacağından, hesap yazma bölgesi kesintisinin tüm süresi boyunca yazma kullanılabilirliği kaybıyla karşılaşır. Java SDK'sını kullanarak birden çok bölge eklemeyi öğrenmek için burayı ziyaret edin
Kullanılabilirlik ve Yük Devretmeler v4 SDK'sında preferredRegions değerini ayarlayın. Yük devretmeler sırasında yazma işlemleri geçerli yazma bölgesine, tüm okumalar ise tercih ettiğiniz bölgeler listesindeki ilk bölgeye gönderilir. Bölgesel yük devretme mekaniği hakkında daha fazla bilgi için kullanılabilirlik sorunlarını giderme kılavuzuna bakın.
CPU İstemci makinenizde kaynak olmaması nedeniyle bağlantı/kullanılabilirlik sorunlarıyla karşılaşabilirsiniz. Azure Cosmos DB istemcisini çalıştıran düğümlerde CPU kullanımınızı izleyin ve kullanım çok yüksekse ölçeği artırma/genişletme.
Barındırma Üretim iş yüklerinin çoğu için mümkün olduğunda en az 4 çekirdekli ve 8 GB bellekli VM'lerin kullanılmasını kesinlikle öneririz.
Bağlantı Modları En iyi performans için Doğrudan modunu kullanın. Bunun nasıl yapılacağını açıklayan yönergeler için V4 SDK belgelerine bakın.
Uygulamanızı çalıştırmak için bir sanal makine kullanıyorsanız, yüksek trafik nedeniyle oluşan performans sorunlarına yardımcı olmak ve gecikme süresini veya CPU değişimlerini azaltmak için VM'nizde Hızlandırılmış Ağ'ı etkinleştirin. Maksimum CPU kullanımının %70'in altında olduğu daha yüksek bir uç Sanal Makine kullanmayı da düşünebilirsiniz.
Kısa Ömürlü Bağlantı Noktası Tükenmesi Seyrek veya düzensiz bağlantılar için değerini daha yüksek bir değere ayarlamanızı idleEndpointTimeout öneririz. idleEndpointTimeout özelliği DirectConnectionConfig kullanılmayan bağlantıların kapatıldığı zamanı denetlemeye yardımcı olur. Bu, kullanılmayan bağlantı sayısını azaltır. Varsayılan olarak, bir uç noktaya boşta bağlantılar 1 saat boyunca açık tutulur. Boşta uç nokta zaman aşımı süresi için belirli bir uç noktaya yönelik istekler yoksa, doğrudan istemci kaynakları ve G/Ç maliyetini kaydetmek için bu uç noktaya yapılan tüm bağlantıları kapatır.
Uygun Zamanlayıcıyı Kullan (Olay döngüsü GÇ Netty iş parçacıklarını çalmaktan kaçının) Çağrıları engellemekten kaçının: .block(). Zaman uyumsuz API desenlerinden ve uygun iş parçacığı ve zamanlayıcıların kullanımından yararlanmak için çağrı yığınının tamamı zaman uyumsuzdur
Uçtan Uca Zaman Aşımları Uçtan uca zaman aşımlarını almak için Java SDK'sında uçtan uca zaman aşımı ilkesi uygulayın. Azure Cosmos DB ile zaman aşımları hakkında daha fazla bilgi için burayı ziyaret edin
Yeniden Deneme Mantığı Geçici hata, kısa süre içinde kendisini çözen temel bir nedeni olan bir hatadır. Veritabanınıza bağlanan uygulamalar bu geçici hataları bekleyecek şekilde oluşturulmalıdır. Bunları işlemek için, bunları kullanıcılara uygulama hatası olarak eklemek yerine kodunuzda yeniden deneme mantığını uygulayın. SDK'nın, okuma veya sorgu işlemleri gibi yeniden denenebilir isteklerde bu geçici hataları işlemek için yerleşik mantığı vardır. Yazma işlemleri bir kez etkili olmadığından SDK geçici hatalar için yazmaları yeniden denemez. SDK, kullanıcıların azaltmalar için yeniden deneme mantığını yapılandırmasına izin verir. Hangi hataların yeniden denendiğiyle ilgili ayrıntılar için burayı ziyaret edin
Veritabanı/koleksiyon adlarını önbelleğe alma Veritabanlarınızın ve kapsayıcılarınızın adlarını yapılandırmadan alın veya başlangıçta önbelleğe alın. veya CosmosAsyncContainer#read() gibi CosmosAsyncDatabase#read() çağrılar, sisteme ayrılmış RU sınırından tüketen hizmete meta veri çağrılarına neden olur. createDatabaseIfNotExists() ayrıca veritabanını ayarlamak için yalnızca bir kez kullanılmalıdır. Genel olarak, bu işlemlerin seyrek gerçekleştirilmesi gerekir.
Paralel Sorgular Azure Cosmos DB SDK'sı, sorgularınızda daha iyi gecikme süresi ve aktarım hızı için sorguları paralel çalıştırmayı destekler. içindeki CosmosQueryRequestsOptions özelliğini sahip olduğunuz bölüm sayısına ayarlamanızı maxDegreeOfParallelism öneririz. Bölüm sayısını bilmiyorsanız, size en iyi gecikme süresini sağlayacak değeri -1 olarak ayarlayın. Ayrıca, önceden getirilen sonuçların sayısını sınırlamak için değerini döndürülen beklenen sonuç sayısına ayarlayın maxBufferedItemCount .
Performans Testi Geri Çekilmeleri Uygulamanızda test gerçekleştirirken, aralıklarla geri çekilmeler RetryAfter uygulamanız gerekir. Geri alma işlemine saygı duymanız, yeniden denemeler arasında beklemeye en az zaman harcamanıza yardımcı olur.
Dizinleme Azure Cosmos DB dizin oluşturma ilkesi, dizin oluşturma yollarını ve IndexingPolicy#getExcludedPaths()kullanarak dizin oluşturmanın hangi belge yollarının dahil edilmesini veya dizin oluşturmanın dışında tutulacağını belirtmenizi IndexingPolicy#getIncludedPaths() de sağlar. Daha hızlı yazma işlemleri için kullanılmayan yolları dizin oluşturmanın dışında tutmadığınızdan emin olun. SDK kullanarak dizin oluşturma örneği için burayı ziyaret edin
Belge Boyutu Belirtilen işlemin istek ücreti doğrudan belgenin boyutuyla ilişkilidir. Büyük belgelerdeki işlemler daha küçük belgelerdeki işlemlerden daha pahalı olduğundan, belgelerinizin boyutunu azaltmanızı öneririz.
Sayfa Boyutu Varsayılan olarak, sorgu sonuçları 100 öğe veya 4 MB'lık öbekler halinde döndürülür(hangisi önce sınıra isabet edilirse). Bir sorgu 100'den fazla öğe döndürecekse, sayfa boyutunu artırarak gereken gidiş dönüş sayısını azaltın. Sayfa boyutu arttıkça bellek tüketimi artar.
Sorgu Ölçümlerini Etkinleştirme Arka uç sorgu yürütmelerinizin ek günlüğe kaydedilmesi için Java SDK'sını kullanarak SQL Sorgu Ölçümlerini yakalama yönergelerini izleyin
SDK Günlüğü Ek tanılama bilgilerini yakalamak ve gecikme sorunlarını gidermek için SDK günlüğünü kullanın. Hizmete yönelik geçerli istekle ilgili daha ayrıntılı Azure Cosmos DB tanılama bilgileri için Java SDK'sında CosmosDiagnostics günlüğünü oluşturun. Örnek bir kullanım örneği olarak, belirtilen eşik değerinden CosmosDiagnostics#getDuration() büyükse (10 saniyelik bir SLA'nız varsa, 10 saniye olduğunda getDuration()> tanılamayı yakalayın) herhangi bir özel durumda ve tamamlanmış işlemlerde Tanılama'yı yakalayın. Bu tanılamaların yalnızca performans testi sırasında kullanılması önerilir. Daha fazla bilgi için Java SDK'sı üzerinde yakalama tanılamasını izleyin
Tanımlayıcılarda özel karakterler kullanmaktan kaçının Bazı karakterler kısıtlanır ve bazı tanımlayıcılarda kullanılamaz: '/', '\', '?', '#'. Genel öneri, beklenmeyen davranışlardan kaçınmak için tanımlayıcılarda veritabanı adı, koleksiyon adı, öğe kimliği veya bölüm anahtarı gibi özel karakterler kullanılmamasıdır.

Ağ Geçidi modunu kullanırken en iyi yöntemler

Azure Cosmos DB istekleri, Ağ Geçidi modunu kullandığınızda HTTPS/REST üzerinden yapılır. Ana bilgisayar adı veya IP adresi başına varsayılan bağlantı sınırına tabidir. İstemci kitaplığının Azure Cosmos DB'ye birden çok eşzamanlı bağlantı kullanabilmesi için maxConnectionPoolSize ayarını farklı bir değere (100 ile 1.000 arasında) değiştirmeniz gerekebilir. Java v4 SDK'sında için GatewayConnectionConfig#maxConnectionPoolSize varsayılan değer 1000'dir. Değeri değiştirmek için farklı bir değere ayarlayabilirsiniz GatewayConnectionConfig#maxConnectionPoolSize .

Yoğun yazma iş yükleri için en iyi yöntemler

Yükü yoğun olan iş yükleri için istek seçeneğini olarak falseayarlayınCosmosClientBuilder#contentResponseOnWriteEnabled(). Hizmet artık oluşturulan veya güncelleştirilmiş kaynağı SDK'ya döndürmez. Normalde, uygulama oluşturulan nesneye sahip olduğundan, hizmetin döndürmesi gerekmez. Üst bilgi değerlerine istek ücreti gibi yine erişilebilir. SDK'nın artık bellek ayırması veya yanıtın gövdesini seri hale getirmesi gerekmeyen içerik yanıtını devre dışı bırakmak performansın geliştirilmesine yardımcı olabilir. Ayrıca performansa daha fazla yardımcı olmak için ağ bant genişliği kullanımını azaltır.

Sonraki adımlar

Java SDK'sına yönelik performans ipuçları hakkında daha fazla bilgi edinmek için bkz . Azure Cosmos DB Java SDK v4 için performans ipuçları.

Uygulamanızı ölçeklendirme ve yüksek performans için tasarlama hakkında daha fazla bilgi edinmek için bkz . Azure Cosmos DB'de bölümleme ve ölçeklendirme.

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 çekirdekleri veya vCPU'ları 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