• autoConnectRetry仅仅意味着驱动程序会自动尝试重新连接到意外断开连接后在服务器(一个或多个)。在生产环境中,您通常需要将此设置为true。

  • connectionsPerHost是物理连接的单一实例蒙戈(它的单,所以你通常每个应用程序的话)能够建立到的mongod/mongos处理量。在撰写本文时,即使实际查询吞吐量较低,Java驱动程序也会建立这种连接数量(换句话说,您将看到mongostat中的“conn”统计值上升,直到它达到每个应用程序服务器的这个数量)。

    在大多数情况下,没有必要将此设置为高于100,但此设置是其中一项“测试并看到”的内容。请注意,您必须确保您设置足够的这种低使连接到您服务器的总量不超过

    db.serverStatus().connections.available

    在生产我们目前有这个在40

  • connectTimeout。由于名称表示毫秒数,驱动程序将在连接尝试中止之前等待。设置超时时间(15-30秒),除非有一个现实的,预期的机会,这将成为其他成功的连接尝试。通常,如果连接尝试时间超过几秒,则网络基础结构无法实现高吞吐量。

  • maxWaitTime。线程等待连接池上可用连接的数量,如果不及时发生,则会引发异常。保持默认。

  • 了socketTimeout。标准套接字超时值。设置为60秒(60000)。

  • threadsAllowedToBlockForConnectionMultiplier。 connectionsPerHost的倍数,表示如果池当前耗尽,允许等待连接变为可用的线程数。这是会导致“com.mongodb.DBPortPool $ SemaphoresOut:Out of semaphores获取db连接”异常的设置。一旦此线程队列超过threadsAllowedToBlockForConnectionMultiplier值,它将抛出此异常。例如,如果connectionsPerHost为10,并且此值为5,则在抛出上述异常之前,最多可有50个线程阻塞。

    如果你希望在吞吐量大的峰值,可能会导致大队列暂时增加该值。正因为这个原因,我们目前在1500点。如果您的查询负载一直超过服务器,那么您应该相应地改善硬件/扩展情况。

  • readPreference。 (更新2.8+)用于确定默认读取偏好和替换“slaveOk”。通过一种类工厂方法设置ReadPreference。 最常见设置的完整描述可以在这个帖子

  • W¯¯的末尾。 (更新,2.6+)该值确定写入的“安全性”。当此值为-1时,无论网络或数据库错误如何,写入都不会报告任何错误。 WriteConcern.NONE是适合此预定义的WriteConcern。如果w是0,那么网络错误将使写入失败,但mongo错误不会。这通常被称为“火灾和遗忘”写入,并应在性能比一致性和耐久性更重要时使用。为此模式使用WriteConcern.NORMAL。

    如果把W为1或更高的写入被认为是安全的。安全写入执行写入操作,然后通过向服务器发送请求进行跟踪,以确保写入成功或检索到错误值(如果没有写入)(换言之,写入后发送getLastError()命令)。请注意,在此getLastError()命令完成之前,连接被保留。作为其中的一个结果和附加命令的吞吐量将signficantly低于以w < = 0。1完全相同的MongoDB的W值保证写入成功(或失败核查的),你发送的写入实例写道。

    在副本集的情况下,您可以使用更高的值来告诉MongoDB在返回之前将写入发送到副本集的至少“w”个成员(或更准确地说,等待写入的复制“w”成员)。您还可以将w设置为字符串“majority”,它告诉MongoDB执行写入大部分副本集成员(WriteConcern.MAJORITY)的操作。通常,您应该将其设置为1,除非您需要原始性能(-1或0)或复制写入(> 1)。高于1的值对写入吞吐量有相当大的影响。

  • FSYNC。强制mongo在启用每次写入后刷新到磁盘的耐久性选项。我从来没有遇到与写入积压相关的任何持久性问题,所以我们在生产中使用了这个错误(缺省值)。

  • j * (NEW 2.7+) *。布尔值,当设置为true时,会强制MongoDB在返回之前等待成功的日记组提交。如果您启用了日记功能,则可以启用此功能以获得更多耐用性。请参阅http://www.mongodb.org/display/DOCS/Journaling以查看日志可以获取什么内容(以及为什么您可能需要启用此标志)。

ReadPreference 的ReadPreference类允许您配置什么的mongod,如果你是副本集工作查询路由实例。下列选项:

  • ReadPreference.primary():所有读取到只有repset主要成员。如果您要求所有查询返回一致的(最近写入的)数据,请使用此选项。这是默认设置。

  • ReadPreference.primaryPreferred():如果可能,所有读取转到repset主成员,但可以查询次要成员,如果主节点不可用。因此,如果主服务器变得不可用,则读取变为最终一致,但只有当主服务器不可用时。

  • ReadPreference.secondary():所有读取转到次级repset成员,主要成员仅用于写入。只有在最终一致读取的情况下才能使用它。额外的repset成员可用于扩展阅读性能,尽管repset可能有(投票)成员的数量有限制。

  • ReadPreference.secondaryPreferred():如果其中任何一个可用,所有读取都转到次级repset成员。主要成员专门用于写入,除非所有次要成员都不可用。除了用于读取的主要成员回退以外,它与ReadPreference.secondary()相同。

  • ReadPreference.nearest():读取转到可用于数据库客户端的最近的repset成员。仅在最终一致性读取可接受时才使用。最近的成员是客户端和各种repset成员之间延迟最低的成员。由于忙碌的成员最终会有更高的延迟,这个应该也会自动平衡读取负载,尽管在我的经验中,如果成员延迟相对一致,secondary(Preferred)看起来会更好。

java mongodb的MongoOptions生产级配置的更多相关文章

  1. Java全栈程序员之07:IDEA中使用MAVEN构架生产级的Web项目

    在上一篇我们介绍了如何在IDEA中使用MAVEN,以及如何创建依赖等.那么在这一篇中,我们就试图搭建一个生产级的解决方案,大家可以使用这个解决方案作为骨架代码来搭建自己的开发环境. 在这里,我们要完成 ...

  2. 【分布式事务】基于RocketMQ搭建生产级消息集群?

    导读 目前很多互联网公司的系统都在朝着微服务化.分布式化系统的方向在演进,这带来了很多好处,也带来了一些棘手的问题,其中最棘手的莫过于数据一致性问题了.早期我们的软件功能都在一个进程中,数据的一致性可 ...

  3. 【MongoDB数据库】Java MongoDB CRUD Example

    上一页告诉我们MongoDB 命令入门初探,本篇blog将基于上一篇blog所建立的数据库和表完毕一个简单的Java MongoDB CRUD Example.利用Java连接MongoDB数据库,并 ...

  4. MongoDB(四)-- 主从配置

    一.前言 虽然MongoDB官方已经不建议使用主从模式了,但是 熟悉下 也是有用的,替代方案是采用副本集的模式.slave默认情况下是不支持读写的,但是master会把数据同步到slave,不支持客户 ...

  5. 使用 Sealos 在 3 分钟内快速部署一个生产级别的 Kubernetes 高可用集群

    本文首发于:微信公众号「运维之美」,公众号 ID:Hi-Linux. 「运维之美」是一个有情怀.有态度,专注于 Linux 运维相关技术文章分享的公众号.公众号致力于为广大运维工作者分享各类技术文章和 ...

  6. 微信自研生产级paxos类库PhxPaxos实现原理介绍

    转载自:   http://mp.weixin.qq.com/s?__biz=MzI4NDMyNTU2Mw==&mid=2247483695&idx=1&sn=91ea4229 ...

  7. Kubernetes 1.14发布:对Windows节点的生产级支持、Kubectl更新与持久本地卷通用版本已全面到来

    今天,我们高兴地宣布Kubernetes 1.14版本的正式亮相,这亦是我们在2019年当中进行的首次发布!Kubernetes 1.14版本由31项增强功能组成,具体包括:10项稳定版功能,12项b ...

  8. MongoDB高可用集群配置方案

    原文链接:https://www.jianshu.com/p/e7e70ca7c7e5 高可用性即HA(High Availability)指的是通过尽量缩短因日常维护操作(计划)和突发的系统崩溃(非 ...

  9. 手把手教你使用 Spring Boot 3 开发上线一个前后端分离的生产级系统(一) - 介绍

    项目简介 novel 是一套基于时下最新 Java 技术栈 Spring Boot 3 + Vue 3 开发的前后端分离的学习型小说项目,配备详细的项目教程手把手教你从零开始开发上线一个生产级别的 J ...

随机推荐

  1. springCloud笔记

    分布式和集群的理解:比如在一个厨房有两个厨师,一个炒菜,一个洗菜,各自做不同的事情,但是却在合作,这种叫做分布式,两个都在炒菜或者都在做菜,就叫做集群. eureka的是springCloud的注册中 ...

  2. python 练习2

    购物订单系统: #!usr/bin/env python # encoding: utf-8 import sys i = 0 inventory_dic = {'Car':1000,'SUV':50 ...

  3. UWP作业(二)A Mobile App

    看到给出的十个技术主题,我第一反应就是,对于大部分社交软件来讲,运用到全部这些都并不是什么难题,倒不如谈谈我手机里现有的社交软件中,使用时间最短但(you)是(dian)最(bu)好(hao)奇(yo ...

  4. oracle执行计划走偏处理步骤

    -- sql执行时间select a.EXECUTIONS,a.ELAPSED_TIME,a.ELAPSED_TIME/a.EXECUTIONS/1000/1000 as 秒,a.SQL_ID,a.H ...

  5. python实现异步调用函数

    import time from concurrent.futures import ThreadPoolExecutor def RunBenchmark(url): print('GET %s' ...

  6. HDU 6397 Character Encoding (组合数学 + 容斥)

    题意: 析:首先很容易可以看出来使用FFT是能够做的,但是时间上一定会TLE的,可以使用公式化简,最后能够化简到最简单的模式. 其实考虑使用组合数学,如果这个 xi 没有限制,那么就是求 x1 + x ...

  7. CentOS 7 rpm安装jdk

    RPM 安装jdk1.8.0_111 ,查询系统自带的jdk rpm -qa | grep java 查询结果如下: [root@bogon ~]# rpm -qa | grep java javap ...

  8. 使用Eclipse的代码追踪功能

    在使用Java编写复杂一些的程序时,你会不会常常对一层层的继承关系和一次次方法的调用感到迷惘呢?幸亏我们有了Eclipse这么好的IDE可以帮我们理清头绪--这就要使用Eclipse强大的代码追踪功能 ...

  9. pyspider爬取tourism management 所有文章的标题 作者 摘要 关键词等等所有你想要的信息

    #!/usr/bin/env python # -*- encoding: utf-8 -*- # vim: set et sw=4 ts=4 sts=4 ff=unix fenc=utf8: # C ...

  10. STM32CubeMX+Keil裸机代码风格(1)

    1.打开STM32CubeMX,New project 选好自己要用的芯片 2.选上左侧SYS中的debug Serial Wire(定义烧程序的端口) . 3,选上左侧TIM6,使TIM6可用(TI ...