java mongodb的MongoOptions生产级配置
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生产级配置的更多相关文章
- Java全栈程序员之07:IDEA中使用MAVEN构架生产级的Web项目
在上一篇我们介绍了如何在IDEA中使用MAVEN,以及如何创建依赖等.那么在这一篇中,我们就试图搭建一个生产级的解决方案,大家可以使用这个解决方案作为骨架代码来搭建自己的开发环境. 在这里,我们要完成 ...
- 【分布式事务】基于RocketMQ搭建生产级消息集群?
导读 目前很多互联网公司的系统都在朝着微服务化.分布式化系统的方向在演进,这带来了很多好处,也带来了一些棘手的问题,其中最棘手的莫过于数据一致性问题了.早期我们的软件功能都在一个进程中,数据的一致性可 ...
- 【MongoDB数据库】Java MongoDB CRUD Example
上一页告诉我们MongoDB 命令入门初探,本篇blog将基于上一篇blog所建立的数据库和表完毕一个简单的Java MongoDB CRUD Example.利用Java连接MongoDB数据库,并 ...
- MongoDB(四)-- 主从配置
一.前言 虽然MongoDB官方已经不建议使用主从模式了,但是 熟悉下 也是有用的,替代方案是采用副本集的模式.slave默认情况下是不支持读写的,但是master会把数据同步到slave,不支持客户 ...
- 使用 Sealos 在 3 分钟内快速部署一个生产级别的 Kubernetes 高可用集群
本文首发于:微信公众号「运维之美」,公众号 ID:Hi-Linux. 「运维之美」是一个有情怀.有态度,专注于 Linux 运维相关技术文章分享的公众号.公众号致力于为广大运维工作者分享各类技术文章和 ...
- 微信自研生产级paxos类库PhxPaxos实现原理介绍
转载自: http://mp.weixin.qq.com/s?__biz=MzI4NDMyNTU2Mw==&mid=2247483695&idx=1&sn=91ea4229 ...
- Kubernetes 1.14发布:对Windows节点的生产级支持、Kubectl更新与持久本地卷通用版本已全面到来
今天,我们高兴地宣布Kubernetes 1.14版本的正式亮相,这亦是我们在2019年当中进行的首次发布!Kubernetes 1.14版本由31项增强功能组成,具体包括:10项稳定版功能,12项b ...
- MongoDB高可用集群配置方案
原文链接:https://www.jianshu.com/p/e7e70ca7c7e5 高可用性即HA(High Availability)指的是通过尽量缩短因日常维护操作(计划)和突发的系统崩溃(非 ...
- 手把手教你使用 Spring Boot 3 开发上线一个前后端分离的生产级系统(一) - 介绍
项目简介 novel 是一套基于时下最新 Java 技术栈 Spring Boot 3 + Vue 3 开发的前后端分离的学习型小说项目,配备详细的项目教程手把手教你从零开始开发上线一个生产级别的 J ...
随机推荐
- 格式代码出现两次oracle
报ORA-01810:格式代码出现两次 原因是Java中的年月日和Oracle中的年月日表示形式不一样 oracle用MI来代表分钟,而不是java中的mm
- oracle分区表的使用和查询
本文参考了 https://blog.csdn.net/mzglzzc/article/details/46300645 一 创建和使用分区表 1.范围分区(RANGE)范围分区将数据基于范围映射到 ...
- 对java web开发的理解
写完后发现自己好像很多都不知道,管它的,只要自己了解就行了,以后有时间再把这个完善一下吧 感觉就是三层架构翻来覆去的用,以这个为基础不停的扩展,前提是数据量一定要大,不然这些扩展就没啥意思 这是数据量 ...
- P3398 仓鼠找sugar (一道LCA的裸题)
https://www.luogu.org/problemnew/show/P3398 题意简单概括一下就是求树上两条路径是否相交; 有这样一个性质: if相交,则必有lca(a,b) 在路径c &l ...
- Cortext-A7_i.MX 6ULL——多模式DDR控制器(MMDC)
1.概述 i.MX 6ULL系列芯片的MMDC是一个多模式DDR控制器,支持DDR3/DDR3Lx16和LPDDR2x16的存储类型,MMDC是可配置,高性能,优化的内存控制器. 注:DDR3/DDR ...
- git权限
itHub--创建新的分支(转) 如何在 GitHub 的项目中创建一个分支呢? 其实很简单啦,直接点击 Branch,然后在弹出的文本框中添加自己的 Branch Name 然后点击蓝色的Creat ...
- python csv读写
https://blog.csdn.net/taotiezhengfeng/article/details/75577998
- Java的this关键字在继承时的作用
1.this.属性 class A{ int a = 10; public void play(){ System.out.println(this.a); } } class B extends A ...
- Python TypeError: 'module' object is not callable 原因分析
今天尝试使用pprint进行输出,语句为 >>>import pprint >>>pprint(people) 结果报错,TypeError: 'module' o ...
- ModelAndView返回json对象的方法
这是在spring4之后. @RequestMapping(value = "/returnjson") public ModelAndView getfsd(){ ModelAn ...