Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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.
Checklist
| Kontrol edildi | 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 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ğaltın. Ü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. | |
| İşlemci (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çeklendirin. | |
| 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. | |
| Ağ Kurma | 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. | |
| Geçici Port Tükenmesi | Seyrek veya düzensiz bağlantılar için idleEndpointTimeout değerini daha yüksek bir seviyeye ayarlamanızı ö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. Belirli bir uç noktaya boşta kalan uç nokta zaman aşımı süresi boyunca istek gönderilmezse, istemci kaynaklar ve G/Ç maliyetinden tasarruf etmek için bu uç noktaya yapılan tüm bağlantıları kapatır. |
|
| Uygun Zamanlayıcıyı Kullanın (Olay döngüsü I/O Netty iş parçacıklarını çalmaktan kaçının) | Çağrıları engellemekten kaçının: .block(). Eşzamansız API desenlerinden yararlanmak ve uygun iş parçacığı ile zamanlayıcı kullanımını sağlamak amacıyla, çağrı yığınının tamamı eşzamansızdır. |
|
| 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 | |
| Mantığı Yeniden Dene | 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. SDK, yazma işlemleri tekrarlanabilir olmadığından geçici hatalar durumunda yazma işlemlerini yeniden denemez. SDK, kullanıcıların hız sınırlamaları için yeniden deneme mantığını yapılandırmasına olanak tanır. 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.
CosmosAsyncDatabase#read() veya CosmosAsyncContainer#read() gibi çağrılar, sisteme ayrılmış RU sınırından tüketen hizmete yapılan 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.
maxDegreeOfParallelism içindeki CosmosQueryRequestsOptions özelliğini, sahip olduğunuz bölüm sayısına ayarlamanızı ö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, maxBufferedItemCount değerini döndürülen sonuçların beklenen sayısına ayarlayarak önceden getirilen sonuçların sayısını sınırlayın. |
|
| Performans Testi Geri Çekilmeleri | Uygulamanızda test yaparken, RetryAfter aralıklarla geri çekilme stratejilerini uygulamanız gerekir. Geri çekilmeye saygı göstermeniz, yeniden denemeler arasında beklemeye olabildiğince az zaman harcamanıza yardımcı olur. |
|
| Dizinleme | Azure Cosmos DB dizin oluşturma ilkesi, dizin oluşturma yolları IndexingPolicy#getIncludedPaths() ve IndexingPolicy#getExcludedPaths() kullanarak hangi belge yollarının dizine eklenip hangilerinin hariç tutulacağını belirtmenizi sağlar. Daha hızlı yazma işlemleri için kullanılmayan yolları dizinlemenin dışında tuttuğunuzdan 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. Geçerli istekle ilgili daha ayrıntılı Azure Cosmos DB tanılama bilgileri için hizmete yönelik Java SDK'sında CosmosDiagnostics kaydını oluşturun. Örnek bir kullanım durumu olarak, belirtilen eşik değerinden CosmosDiagnostics#getDuration() büyükse, herhangi bir özel durumda ve tamamlanmış işlemlerde tanılamayı yakalayın; bu, 10 saniyelik bir SLA'nız varsa, getDuration()> 10 saniyeyi aşıyorsa tanılama yakalanır. Bu tanılamaların yalnızca performans testi sırasında kullanılması önerilir. Daha fazla bilgi için Java SDK'sini kullanarak yakalama tanılamalarını takip edin |
|
| 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
Oluşturma yükleri fazla olan iş yükleri için CosmosClientBuilder#contentResponseOnWriteEnabled() istek seçeneğini false olarak ayarlayın. Hizmet artık oluşturulan veya güncelleştirilmiş kaynağı SDK'ya döndürmez. Normalde, uygulama oluşturulan nesneye sahip olduğundan, hizmetin nesneyi geri döndürmesine gerek yoktur. Başlık değerleri, istek ücreti gibi bilgilere hâlâ erişilebilir. İçerik yanıtını devre dışı bırakmak, SDK'nın artık bellek ayırmak veya yanıtın gövdesini seri hale getirmek zorunda kalmaması anlamına geleceği için 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