SORU
29 HAZİRAN 2011, ÇARŞAMBA


Nasıl yapılandırmak üretim kullanımı için Java sürücüsü MongoOptions MongoDB için?

Web MongoDB Java driver için MongoOptions yapılandırmak için en iyi yöntemler arıyor oldum ve çok API dışında bir fikrim yok. Bu arama "com.rastladım sonra başladı mongodb.Semafor Dışında db almak için DBPortPool$SemaphoresOut: bağlantı bu sorunu çözmek için başardı çarpan" hata ve bağlantıları artırarak/. Bağlantılar ya da üretim için bu seçenekleri yapılandırmak için en iyi yöntemler arıyorum.

2.4 sürücü seçenekleri şunlardır: http://api.mongodb.org/java/2.4/com/mongodb/MongoOptions.html

  • autoConnectRetry
  • connectionsPerHost
  • connectTimeout
  • maxWaitTime
  • socketTimeout
  • threadsAllowedToBlockForConnectionmultiplier

Yeni sürücüleri daha fazla seçenek var ve bunları dinlemek iyi olurdu.

CEVAP
29 HAZİRAN 2011, ÇARŞAMBA


2.9-güncelleme :

  • autoConnectRetrysadece sürücüyü otomatik olarak sunucu(s) beklenmedik keser, sonra yeniden bağlanmayı deneyecek demektir. Üretim ortamlarında genellikle true olarak ayarlayın.

  • connectionsPerHostfiziksel bağlantıları miktarını tek Mongo örneği (genelde uygulama başına bir tane var ki singleton) mongod/mongos bir işlem tesis edebilir. O zaman yazma java sürücüsü kuracağı bu miktarın bağlantılar sonunda bile gerçek sorgu verim düşük (sırayla kelimeleri görürsünüz "conn" istatistik mongostat doğuşuna kadar vurur bu numarayı başına uygulama sunucusu).

    Ama bu ayar "test ve" şeyler. bakın bunlardan biridir çoğu durumda bu 100'den daha yüksek ayarlamak için gerek yoktur Bu sunucuya bağlantı miktarı aşmayın yeteri kadar düşük ayarlanmış olduğundan emin olun unutmayın

    db.serverStatus().connections.available

    Üretimde şu anda 40 yaşında bu.

  • connectTimeout. Adı milisaniye sayısı öneririz sürücüsü bağlantı girişimi iptal edildi önce bekleyin. Aksi takdirde bu bağlantı girişimleri başarılı şekilde olacak gerçekçi, beklenen bir şans var sürece bir şey uzun (15-30 saniye) zaman aşımı ayarlayın. Eğer bir bağlantı girişimi ağ altyapısına ve yüksek üretim kapasitesine sahip değil daha bir kaç saniye daha uzun sürerse, normal olarak.

  • maxWaitTime. Numarası ms bir iş parçacığı bağlantısı için bağlantı havuzu üzerinde kullanılabilir olana kadar bekler, eğer bu süre içinde bir şey olursa, bir özel durum oluşturur. Varsayılan tutmak.

  • socketTimeout. Standart soket zaman aşımı değeri. 60 saniye (60000) ayarlayın.

  • threadsAllowedToBlockForConnectionmultiplier. Havuz eğer bağlantılar için kullanılabilir olana kadar beklemek izin verilen iş parçacığı sayısını gösterir connectionsPerHost için çarpan şu anda bitti. Bu "com.neden olan ayardır mongodb.Semafor Dışında db bağlantı" özel durum. DBPortPool$SemaphoresOut: Bu iş parçacığı sıra threadsAllowedToBlockForConnectionmultiplier değeri geçtiğinde bu özel durum. Bu connectionsPerHost 10 ve bu değer 5 ise örneğin, 50 konuları söz konusu istisna atılır önce engelleyebilirsiniz.

    Eğer işlem hacmi büyük zirveleri düşünüyorsanız büyük sıraları geçici olarak bu değer artışa neden olabilir. Tam da bu nedenden ötürü şu an 1500 de var. Eğer sorgu yükü sürekli sunucu outpaces eğer sadece donanım/Ölçekleme durumunuzu buna göre geliştirmek gerekir.

  • readPreference.(, 2.8 GÜNCELLENDİ )Varsayılan tercih okuyun ve yerini belirlemek için kullanılan"". slaveOk Sınıf fabrika yöntemi ile bir ReadPreference ayarlayın.En yaygın ayarları tam bir açıklama bu yazının sonunda bulunabilir

  • w.(, 2.6 GÜNCELLENDİ )Bu değer "" yazmak. güvenlik belirler Bu yazma değeri -1 olduğunda herhangi bir hata ya da ağ veritabanı hataları ne olursa olsun, rapor değil. WriteConcern.HİÇ biri bunun için uygun önceden tanımlanmış WriteConcern. Eğer g 0 ise o zaman ağ hatası başarısız yazma yapacak ama mongo hataları olmaz. Bu genellikle "ve" yazar ve performans tutarlılığı ve dayanıklılık daha önemli olduğunda kullanılmalıdır. yangın unutmaya olarak adlandırılır WriteConcern Kullanın.NORMAL bu mod için.

    Eğer 1 veya daha yüksek w olarak ayarlarsanız, güvenli olarak kabul edilir yaz. Güvenli yazıyor gerçekleştirmek yazma ve takip ederek bir istek için sunucu emin olmak için yazma başarılı ya da almak bir hata değeri yoktu (başka bir deyişle, gönderir bir döndürür() komutundan sonra yazdığınız). Bu kadar döndürür() not komut bağlantısı ayrılmıştır tamamlandı. Bunun bir sonucu ve verimi w < yazıyor signficantly daha düşük olacaktır ek olarak komut; a= 0. Tam olarak 1 MongoDB teminat w değeri ile başarılı (ya da doğrulanabilir şekilde başarısız) yazma gönderdiğin örneği yazma.

    Durumunda çoğaltma kümeleri kullanabilirsiniz daha yüksek değerler için w whcih söyle MongoDB göndermek için, yazmak için en azından "w" üyelerinin yineleme kümesi önce dönen (ya da daha doğrusu, bir dakika için, çoğaltma senin yazmak için "w" üyeleri). Ayrıca dize w set" MongoDB gerçekleştirmek için söyler, yineleme kümesi (WriteConcern.çoğunluğu yaz "çoğunluk edebilirsiniz ÇOĞUNLUĞU). Ham performans (-1 ya da 0) veya yazar çoğaltılmış (>sürece 1 için bu ayarlamanız gerekir Typicall seni 1). Değerleri 1'den daha yüksek verim yazma üzerinde önemli bir etkisi vardır.

  • fsync. Dayanıklılık güçleri etkinleştirildiğinde, her yaz sonra disk Temizleme mongo seçeneği. Bu konuda asla yanlış (varsayılan) üretimine kadar herhangi bir dayanıklılık sorunları bir yaz bekleme listesi ile ilgili yaşadım.

  • j*(YENİ 2.7 )*. Gerçek güçler olarak ayarlandığında başarılı günlüklerinde bir grup için beklemek MongoDB Boolean dönmeden önce işlemek. Eğer günlük kaydı etkin varsa, daha fazla dayanıklılık için bu etkinleştirebilirsiniz. http://www.mongodb.org/display/DOCS/Journaling günlük kaydı alır ne olduğunu görmek için (ve bu bayrağı etkinleştirin isteyebilirsiniz böylece) bakın.

ReadPreference ReadPreference sınıfı mongod örnekleri sorgularsa çoğaltma kümesi ile çalışıyorsanız yönlendirilir ne için yapılandırmanızı sağlar. Aşağıdaki seçenekler kullanılabilir :

  • ReadPreference.(birincil)Tüm repset birincil üye için sadece okur. Eğer tüm sorgular tutarlı (en son yazılan) veri döndürmek için ihtiyacınız varsa, bunu kullanın. Varsayılan değer budur.

  • ReadPreference.() primaryPreferred: Mümkünse repset İlköğretim üyenin gidin okur ama eğer birincil düğüm mevcut değilse ikincil üyeleri sorgu. Eğer birincil kullanılamaz duruma gelirse gibi Eğer birincil kullanılamıyor, sadece sonunda tutarlı, ama olur okur.

  • ReadPreference.(ikincil)Tüm ikincil repset üyeleri gidin okur ve birincil üye yazıyor sadece için kullanılır. Eğer sonunda tutarlı okur ile yaşayabilir sadece bunu kullanın. Ek repset üyeleri (oy) üyeleri bir repset alabilir miktarını bir sınırı vardır, ancak okuma performansı arttırmak için kullanılabilir.

  • ReadPreference.() secondaryPreferred: Varsa, hepsini eğer varsa, ikincil repset üyelerine gidip okur. Birincil üyenin tüm ikincil üyeleri kullanılamaz hale sürece sadece yazar için kullanılır. Okur için öncelikli üyeye geri dönüş dışında bu ReadPreference aynıdır.(ikincil).

  • ReadPreference.() yakın: Okur en yakın repset üye veritabanı istemci için kullanılabilir git Eğer sonunda tutarlı okur kabul edilebilir. En yakın üye istemci ve çeşitli repset üyeleri arasındaki en düşük gecikme ile üyesidir. Meşgul üyeleri beri sonunda yüksek gecikmeleri olacak bugerekirayrıca otomatik olarak yük benim deneyim ikincil(Tercih edilen), ancak denge okursanız üyesi gecikmeleri nispeten daha tutarlı, çok daha iyi yapmak gibi görünüyor.

Not : Yukarıdaki Tüm tag yerine. TaggableReadPreference örnekleri dönmek için aynı yöntemi etkin sürümlerinde var Yineleme kümesi etiketleri açıklaması burada bulunabilir tam : Replica Set Tags

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Ciaran Blumenfeld

    Ciaran Blume

    20 NİSAN 2009
  • Floortile83

    Floortile83

    16 Ocak 2010
  • Murray Winiata

    Murray Winia

    2 ŞUBAT 2009