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 ...
随机推荐
- web安全之机器学习入门——2.机器学习概述
目录 0 前置知识 什么是机器学习 机器学习的算法 机器学习首先要解决的两个问题 一些基本概念 数据集介绍 1 正文 数据提取 数字型 文本型 数据读取 0 前置知识 什么是机器学习 通过简单示例来理 ...
- 解决初次安装PyCharm后 No Python interpreter selected的问题
原文链接:https://liuzhichao.com/p/1543.html PyCharm 是由JetBrains打造的一款 Python IDE.具有智能代码编辑器,能理解 Python 的特性 ...
- PM学习梳理--搭建产品架构
- IntelliJ IDEA2017 + tomcat 即改即生效 实现热部署
https://www.cnblogs.com/1024zy/p/6344000.html
- react native 学习笔记
假设你的机器现在还没安装任何环境. 不同的操作系统.不同的目标平台,具体的步骤也会有所不同.如果你想同时开发android和ios也没问题,只需要先选一个平台开始,另一个平台的环境搭建只是稍有不同 本 ...
- centos7 启动tomcat卡盾
vim $JAVA_HOME/jre/lib/security/java.security securerandom.source=file:/dev/random 改为 securerandom.s ...
- MySQL中 指定字段排序函数field()的用法
MySQL中的field()函数,可以用来对SQL中查询结果集进行指定顺序排序. 函数使用格式如下: order by (str,str1,str2,str3,str4……),str与str1,str ...
- (24)How generational stereotypes hold us back at work
https://www.ted.com/talks/leah_georges_how_generational_stereotypes_hold_us_back_at_work/transcript ...
- web测试和app测试的区别
功能上: 功能上没有什么区别,都是用同样的方法来写用例(等效.边界值...) 架构上: web是B/S架构(浏览器和服务器)代码更新后数据会同步,可以保证所有客户一致 app是C/S架构(客户端和服务 ...
- 学习笔记day1-计算机介绍
1.1 “计算机”基本介绍 一.为什么需要计算机 对于现在的我们来说,每天要处理的信息量是巨大的,所以如果还是人工的来对这些数据进行处理,那么效率是很低的.此时计算机的出现就可以帮助我么来提高处理数据 ...