autoConnectRetry只是意味着驱动程序在意外断开连接后将自动尝试重新连接到服务器。在生产环境中,通常需要将此设置设置为true。
connectionsPerHost是单个Mongo实例(为单例,因此通常每个应用程序一个)可以建立到mongod / mongos进程的物理连接量。在编写本文时,即使实际的查询吞吐量很低,Java驱动程序也会最终建立此连接数量(按顺序,您会发现mongostat中的“ conn”统计数据会上升,直到每个应用程序服务器达到该数字为止)。
在大多数情况下,无需将此值设置为高于100,但是此设置是“测试并查看”的事情之一。请注意,您必须确保将此值设置得足够低,以使与服务器的连接总数不超过
db.serverStatus().connections.available
在生产中,我们目前有40个。
connectTimeout。顾名思义,驱动程序将在连接尝试中止之前等待的毫秒数。除非有现实的预期机会,否则将超时设置为较长的时间(15-30秒),否则将以其他方式成功进行连接尝试。通常,如果连接尝试花费的时间超过几秒钟,则您的网络基础结构将无法实现高吞吐量。
maxWaitTime。线程将等待连接在连接池中变为可用状态的毫秒数,如果未及时发生,则会引发异常。保持默认值。
socketTimeout。标准套接字超时值。设置为60秒(60000)。
threadsAllowedToBlockForConnectionMultiplier。connectionsPerHost的乘数,它表示如果当前池已耗尽,则允许等待连接变为可用的线程数。此设置将导致“ com.mongodb.DBPortPool $ SemaphoresOut:超出信号量以获取数据库连接”异常。一旦此线程队列超过threadsAllowedToBlockForConnectionMultiplier值,它将引发此异常。例如,如果connectionsPerHost为10,并且此值为5,则在引发上述异常之前最多可以阻塞50个线程。
如果您预计吞吐量的峰值可能会导致较大的队列,请暂时增加该值。正是由于这个原因,我们目前在1500拥有它。如果查询负载持续超过服务器,则应相应地改善硬件/扩展情况。
readPreference。(UPDATED,2.8+)用于确定默认的读取首选项,并替换为“ slaveOk”。通过类工厂方法之一设置ReadPreference。有关最常用设置的完整说明,请参见本文末尾
w ^。(UPDATED,2.6 +)此值确定写入的“安全性”。如果此值为-1,则无论网络或数据库错误如何,写入操作均不会报告任何错误。为此,WriteConcern.NONE是适当的预定义WriteConcern。如果w为0,则网络错误将使写入失败,但mongo错误不会。这通常被称为“开火”,当性能比一致性和耐用性更重要时,应使用该写法。在此模式下使用WriteConcern.NORMAL。
如果将w设置为1或更高,则认为写入是安全的。安全写操作执行写操作,然后向服务器发送请求,以确保写操作成功,否则,将获取错误值(换句话说,在写操作后发送getLastError()命令)。请注意,在完成此getLastError()命令之前,将保留连接。结果是,通过附加命令,吞吐量将大大低于w <= 0时的写入。aw值恰好为1时,MongoDB确保在将写入发送到的实例上写入成功(或验证失败)。
对于副本集,您可以使用更高的w值,告诉MongoDB在返回之前至少将写操作发送到副本集的至少“ w”个成员(或更准确地说,等待将您的写操作复制到“ w”个成员) )。您还可以将w设置为字符串“ majority”,该字符串告诉MongoDB对大多数副本集成员(WriteConcern.MAJORITY)执行写入操作。通常,除非需要原始性能(-1或0)或重复写入(> 1),否则应将其设置为1。值大于1对写吞吐量有相当大的影响。
fsync。持久性选项可在启用每次写入后强制mongo刷新到磁盘。我从未遇到过与写入积压相关的持久性问题,因此我们在生产中将其设置为false(默认值)。
j * (NEW 2.7+) *。布尔值,当设置为true时,将强制MongoDB在返回之前成功等待日志组成功提交。如果启用了日记功能,则可以启用此功能以提高耐用性。请参阅http://www.mongodb.org/display/DOCS/Journaling,以了解什么使您获得了日记功能(以及为什么要启用此标志)。