autoConnectRetry , sürücünün beklenmedik bağlantı kesintilerinin ardından otomatik olarak sunuculara yeniden bağlanmaya çalışacağı anlamına gelir. Üretim ortamlarında genellikle bunun doğru olmasını istersiniz.
connectionPerHost , tek bir Mongo örneğinin (tekildir, böylece genellikle uygulama başına bir tane olur) bir mongod / mongos sürecine kurabileceği fiziksel bağlantı miktarıdır. Yazma sırasında, java sürücüsü, gerçek sorgu verimi düşük olsa bile, sonunda bu miktarda bağlantı kuracaktır (kelime sırasına göre, uygulama sunucusu başına bu sayıya ulaşana kadar mongostat'ta "conn" istatistiğinin yükseldiğini göreceksiniz).
Çoğu durumda bunu 100'den yükseğe ayarlamaya gerek yoktur, ancak bu ayar "test et ve gör" şeylerinden biridir. Sunucunuza olan toplam bağlantı miktarının aşmaması için bunu yeterince düşük ayarladığınızdan emin olmanız gerektiğini unutmayın.
db.serverStatus().connections.available
Üretimde şu anda 40'da bu var.
connectTimeout . Adından da anlaşılacağı gibi, sürücü bir bağlantı girişimi iptal edilmeden önce bekleyecektir. Zaman aşımını uzun bir şeye (15-30 saniye) ayarlayın, gerçekçi, beklenen bir şans yoksa bu, aksi takdirde başarılı bağlantı girişimlerinin önüne geçecektir. Normalde, bir bağlantı girişimi birkaç saniyeden uzun sürerse, ağ altyapınız yüksek verim sağlayamaz.
maxWaitTime . Bir iş parçacığının bir bağlantının bağlantı havuzunda kullanılabilir olmasını bekleyeceği ms sayısı ve bu zaman içinde olmazsa bir istisna oluşturur. Varsayılanı koruyun.
socketTimeout . Standart soket zaman aşımı değeri. 60 saniyeye (60000) ayarlayın.
threadAllowedToBlockForConnectionMultiplier . Havuz şu anda tükendiyse bağlantıların kullanılabilir hale gelmesini beklemesine izin verilen iş parçacığı sayısını belirten connectionPerHost çarpanı. Bu, "com.mongodb.DBPortPool $ SemaphoresOut: Semaforların db bağlantısı almak için tükendi" istisnasına neden olacak ayardır. Bu iş parçacığı kuyruğu threadAllowedToBlockForConnectionMultiplier değerini aştığında bu istisnayı atar. Örneğin, linksPerHost 10 ise ve bu değer 5 ise, yukarıda belirtilen istisna atılmadan önce 50'ye kadar iş parçacığı engellenebilir.
Verimlilikte büyük kuyruklara neden olabilecek büyük zirveler bekliyorsanız, bu değeri geçici olarak artırın. Tam da bu nedenle şu anda 1500'e sahibiz. Sorgunuz sürekli olarak sunucuyu aşıyorsa, sadece donanım / ölçekleme durumunuzu buna göre iyileştirmelisiniz.
readPreference . (GÜNCELLENDİ, 2.8+) Varsayılan okuma tercihini belirlemek için kullanılır ve "slaveOk" yerine geçer. Sınıf fabrikası yöntemlerinden biri aracılığıyla bir ReadPreference ayarlayın. En yaygın ayarların tam açıklaması bu yazının sonunda bulunabilir.
w . (GÜNCELLENDİ, 2.6+) Bu değer, yazmanın "güvenliğini" belirler. Bu değer -1 olduğunda yazma, ağ veya veritabanı hatalarından bağımsız olarak herhangi bir hata bildirmez. WriteConcern.NONE, bunun için önceden tanımlanmış uygun WriteConcern'dir. Eğer w 0 ise, ağ hataları yazma işleminin başarısız olmasına neden olur, ancak mongo hataları olmaz. Bu genellikle "ateş et ve unut" yazıları olarak adlandırılır ve performans tutarlılık ve dayanıklılıktan daha önemli olduğunda kullanılmalıdır. Bu mod için WriteConcern.NORMAL'ı kullanın.
W değerini 1 veya daha yüksek bir değere ayarlarsanız yazma güvenli kabul edilir. Güvenli yazmalar, yazmayı gerçekleştirir ve yazmanın başarılı olduğundan emin olmak için sunucuya yapılan bir istekle onu takip eder veya başarısız olursa bir hata değeri alır (başka bir deyişle, siz yazdıktan sonra bir getLastError () komutu gönderir). Bu getLastError () komutu tamamlanana kadar bağlantının ayrıldığını unutmayın. Bunun ve ek komutun bir sonucu olarak, verim w <= 0 ile yazılanlardan önemli ölçüde daha düşük olacaktır. Aw değeri tam olarak 1 olan MongoDB, yazmayı gönderdiğiniz örnekte yazmanın başarılı olduğunu (veya doğrulanabilir şekilde başarısız olduğunu) garanti eder.
Replika kümeleri söz konusu olduğunda, MongoDB'ye yazmayı geri dönmeden önce replika kümesinin en az "w" üyelerine göndermesini söyleyen w için daha yüksek değerler kullanabilirsiniz (veya daha doğrusu, "w" üyelerine yazmanızın replikasyonunu bekleyin ). Ayrıca, w değerini, MongoDB'ye çoğaltma kümesi üyelerinin çoğuna (WriteConcern.MAJORITY) yazma işlemini gerçekleştirmesini söyleyen "çoğunluk" dizesine de ayarlayabilirsiniz. Normalde, ham performansa (-1 veya 0) veya çoğaltılmış yazmalara (> 1) ihtiyacınız yoksa bunu 1 olarak ayarlamanız gerekir. 1'den yüksek değerler, yazma performansı üzerinde önemli bir etkiye sahiptir.
fsync . Mongo'yu, etkinleştirildiğinde her yazma işleminden sonra diske temizlemeye zorlayan dayanıklılık seçeneği. Bir yazma birikimiyle ilgili hiçbir dayanıklılık sorunu yaşamadım, bu yüzden üretimde yanlış (varsayılan) olarak bunu yapıyoruz.
j * (YENİ 2.7+) *. True olarak ayarlandığında, MongoDB'yi geri dönmeden önce başarılı bir günlük kaydı grubu işlemesini beklemeye zorlayan Boole. Günlük tutmayı etkinleştirdiyseniz, ek dayanıklılık için bunu etkinleştirebilirsiniz. Günlük tutmanın size ne kazandırdığını (ve dolayısıyla bu bayrağı neden etkinleştirmek isteyebileceğinizi) görmek için http://www.mongodb.org/display/DOCS/Journaling adresine bakın.
ReadPreference.primary () : Tüm okumalar yalnızca tekrar ayarlı birincil üyeye gider. Tüm sorguların tutarlı (en son yazılan) veriler döndürmesini istiyorsanız bunu kullanın. Bu varsayılandır.
ReadPreference.primaryPreferred () : Mümkünse tüm okumalar tekrar ayarlı birincil üyeye gider, ancak birincil düğüm kullanılamıyorsa ikincil üyeleri sorgulayabilir. Örneğin birincil kullanılamaz hale gelirse, okumalar sonunda tutarlı hale gelir, ancak yalnızca birincil kullanılamıyorsa.
ReadPreference.secondary () : Tüm okumalar ikincil tekrar kümesi üyelerine gider ve birincil üye yalnızca yazma işlemleri için kullanılır. Bunu yalnızca sonunda tutarlı okumalarla yaşayabiliyorsanız kullanın. Bir temsilcinin sahip olabileceği (oylama) üye sayısı için sınırlamalar olsa da, okuma performansını artırmak için ek tekrar seti üyeleri kullanılabilir.
ReadPreference.secondaryPreferred () : Herhangi biri varsa tüm okumalar ikincil tekrar seti üyelerine gider. Birincil üye, tüm ikincil üyeler kullanılamaz hale gelmedikçe yalnızca yazma işlemleri için kullanılır. Okumalar için birincil üyeye geri dönüş dışında bu, ReadPreference.secondary () ile aynıdır.
ReadPreference.nearest () : Okur, veritabanı istemcisinin kullanabileceği en yakın tekrar küme üyesine gider. Yalnızca nihai olarak tutarlı okumalar kabul edilebilirse kullanın. En yakın üye, müşteri ile çeşitli tekrar grubu üyeleri arasında en düşük gecikmeye sahip üyedir. Meşgul üyeler sonunda daha yüksek gecikmelere sahip olacağından, bu aynı zamanda okuma yükünü otomatik olarak dengelemelidir, ancak benim deneyimime göre ikincil (Tercihli), üye gecikmeleri nispeten tutarlıysa bunu daha iyi yapıyor gibi görünmektedir.
Not: Yukarıdakilerin tümü, bunun yerine TaggableReadPreference örneklerini döndüren aynı yöntemin etiket etkin sürümlerine sahiptir. Çoğaltma kümesi etiketlerinin tam açıklaması burada bulunabilir: Eşleme Kümesi Etiketleri