【MongoDB】Java连接MongoDB

连接URI

连接 URI提供驱动程序用于连接到 MongoDB 部署的指令集。该指令集指示驱动程序应如何连接到 MongoDB,以及在连接时应如何运行。下图解释了示例连接 URI 的各个部分:

连接的URI 主要分为 以下四个部分

第一部分 连接协议

示例中使用的 连接到具有 DNS SRV 记录的 Atlas MongoDB  。自建MongoDB使用 mongodb作为协议 即可,

标准的连接字符串格式

mongodb://[username:password@]host1[:port1][,...hostN[:portN]][/[defaultauthdb][?options]]

第二部分 账号密码认证

如果使用基于密码的身份验证机制,则在协议之后,连接字符串将包含您的凭据。将 user 的值替换为您的用户名,将 pass 替换为您的密码。如果您的身份验证机制不需要凭据,请忽略连接 URI 的这一部分。

第三部分 实例的地址端口

连接 URI 的下一部分指定主机名或 IP 地址,后跟 MongoDB 实例的端口。在示例中,sample.host 代表主机名,27017 是端口号。替换这些值以参考您的 MongoDB 实例。

第四部分 连接选项

连接 URI 的最后一部分包含作为参数的连接选项。 在此示例中,您设置了两个连接选项: maxPoolSize=20w=majority 。 有关连接选项的更多信息,

连接到副本集

MongoDB 副本集部署是一组用于存储相同数据集的连接实例。这种实例配置提供了 数据冗余 高可用性

要连接到副本集部署,请指定副本集节点主机名(或 IP 地址)和端口号。

如果您无法提供副本集中主机的完整列表,则可以在该副本中指定单个主机或主机子集,并指示驱动程序通过以下方式执行自动发现

  • 将副本集名称指定为 replicaSet 参数的值

  • 将  directConnection 参数的值  指定为 false

  • 在副本集中指定多个主机

提示:

尽管可以指定副本集中主机的子集,但建议还是提供包含副本集中的所有主机的完整列表,以确保驱动程序能够在其中一台主机无法访问时建立连接。

ConnectionString

ConnectionString connectionString = new ConnectionString("mongodb://host1:27017,host2:27017,host3:27017/");
MongoClient mongoClient = MongoClients.create(connectionString);

MongoClientSettings

ServerAddress seed1 = new ServerAddress("host1", 27017);
ServerAddress seed2 = new ServerAddress("host2", 27017);
ServerAddress seed3 = new ServerAddress("host3", 27017);
MongoClientSettings settings = MongoClientSettings.builder().applyToClusterSettings(builder ->builder.hosts(Arrays.asList(seed1, seed2, seed3))).build();
MongoClient mongoClient = MongoClients.create(settings);

连接选项

读取偏好

读取偏好描述 MongoDB 客户端如何将读取操作路由到副本集

默认情况下,应用程序将其读取操作定向到副本集的主节点(即读取偏好模式“主节点”)。但是,客户端可以指定读取偏好以将读取操作发送到从节点。

读取偏好由读取偏好模式、标签集列表(可选)、maxStalenessSeconds 选项和对冲读选项构成。对冲读选项适用于分片集群,面向使用非 primary 读取偏好的读取。

读取偏好模式

下表给出读取偏好模式的简要摘要:

注意

非 primary 读取偏好模式支持对分片集群进行对冲读。

读取偏好模式

说明

primary

默认模式。从当前副本集主节点

分布式事务包含读取操作的primary必须使用读取偏好

primaryPreferred

在大多数情况下,操作将从主节点读取,但如果主节点不可用,则操作将从从节点成员读取。

读取优先级 primaryPreferred 支持分片集群上的对冲读。

secondary

所有操作均会从副本集的辅助成员中读取。

读取优先级 secondary 支持分片集群上的对冲读。

secondaryPreferred

操作通常从副本集的从节点成员读取数据。如果副本集只有一个主节点成员,并且没有其他成员,则操作将从主节点成员读取数据。

读取优先级 secondaryPreferred 支持分片集群上的对冲读。

nearest

根据指定的延迟阈值,从符合条件的随机副本集成员读取操作,无论该成员是主节点成员还是从节点成员。 该操作在计算延迟时会考虑以下因素:

  • localThresholdMS 连接字符串选项

  • maxStalenessSeconds 读取偏好选项

  • 任何指定的标签集列表

读取偏好 nearest 支持在分片集群上进行对冲读,并默认启用对冲读选项。

行为

除 primary 之外的所有读取偏好模式都可能返回过时数据,因为从节点在异步过程中从主节点复制操作。[1] 如果选择使用非 primary 模式,请确保应用程序可以容忍过时数据。

读取偏好不影响数据的可见性;即客户端可以在写入结果被确认或传播到大多数副本集节点之前看到写入结果。有关详细信息,请参阅读取隔离、一致性和新近度

读取偏好不会影响因果一致性。因果一致性会话为具有 读关注的读取操作以及具有 "majority" 写关注的写入操作提供的适用于 MongoDB 部署的所有节点。

读取偏好模式

primary

所有读取操作仅使用当前副本集主节点。[1] 这是默认的读取模式。如果主节点不可用,则读取操作会产生错误或抛出异常。

primary 读取偏好模式与使用标签集列表或 maxStalenessSeconds 的读取偏好模式不兼容。如果指定标签集列表或带有 maxStalenessSeconds 的 primary 值,则驱动程序将产生错误。

分布式事务包含读取操作的primary必须使用读取偏好

primaryPreferred

在大多数情况下,操作都是从副本集的主节点读取。但是,如果主节点不可用(例如在故障转移期间),则操作将从满足读取偏好的 从节点 和标签集列表的maxStalenessSeconds读取。

当 primaryPreferred 读取偏好包含 maxStalenessSeconds 值且没有可供读取的主节点时,客户端会通过将从节点的最后一次写入与执行最近一次写入的从节点进行比较,从而估计每个从节点的陈旧程度。然后,客户端会将读取操作定向到估计延迟小于或等于 maxStalenessSeconds 的从节点。

当读取偏好包含标签集列表(标签集数组)时且没有可读取的主节点时,客户端会尝试查找具有匹配标签的从节点(按顺序尝试标签集,直到找到匹配项)。如果找到匹配的从节点,则客户端会从最近的匹配从节点群组中随机选择一个从节点。如果从节点没有匹配的标签,读取操作就会出错。

当读取偏好包含 maxStalenessSeconds 值和标签集列表时,客户端首先按过时程度筛选,然后按指定标签筛选。

使用 primaryPreferred 模式进行读取操作可能会返回过时数据。使用 maxStalenessSeconds 选项避免从客户端估计过于陈旧的从节点读取数据。

注意

读取优先级 primaryPreferred 支持分片集群上的对冲读。

secondary

操作只能从副本集的从节点读取。如果没有可用的从节点,则此读取操作会出现错误或异常。

大多数副本集至少有一个从节点,但在某些情况下可能没有可用的从节点。例如,如果节点处于恢复状态或不可用状态,则由主节点、从节点和仲裁节点构成的副本集可能没有任何从节点。

当 secondary 读取偏好包含 maxStalenessSeconds 值时,客户端通过将从节点的最后一次写入与主节点进行比较来估计每个从节点的过时程度。然后,客户端会将读取操作定向到估计延迟小于或等于 maxStalenessSeconds 的从节点。如果没有主节点,客户端将使用最近写入的从节点进行比较。

当读取偏好包含标签集列表(标签集数组)时,客户端会尝试查找具有匹配标签的从节点成员(按顺序尝试标签集,直到找到匹配项)。如果找到匹配的从节点,则客户端会从最近的匹配从节点群组中随机选择一个从节点。如果从节点没有匹配的标签,读取操作就会出错。

当读取偏好包含 maxStalenessSeconds 值和标签集列表时,客户端首先按过时程度筛选,然后按指定标签筛选。

使用 secondary 模式进行读取操作可能会返回过时数据。使用 maxStalenessSeconds 选项避免从客户端估计过于陈旧的从节点读取数据。

注意

读取优先级 secondary 支持分片集群上的对冲读。

secondaryPreferred

操作通常从副本集的从节点成员读取数据。如果副本集只有一个主节点成员,并且没有其他成员,则操作将从主节点成员读取数据。

当 secondaryPreferred 读取偏好包含 maxStalenessSeconds 值时,客户端通过将从节点的最后一次写入与主节点进行比较来估计每个从节点的过时程度。然后,客户端会将读取操作定向到估计延迟小于或等于 maxStalenessSeconds 的从节点。如果没有主节点,客户端将使用最近写入的从节点进行比较。如果没有估计滞后小于或等于 maxStalenessSeconds 的从节点,则客户端会将读取操作定向到副本集的主节点。

当读取偏好包含标签集列表(标签集数组)时,客户端会尝试查找具有匹配标签的从节点成员(按顺序尝试标签集,直到找到匹配项)。如果找到匹配的从节点,则客户端会从最近的匹配从节点群组中随机选择一个从节点。如果不存在具备匹配标签的从节点,则客户端忽略标签并从主节点读取。

当读取偏好包含 maxStalenessSeconds 值和标签集列表时,客户端首先按过时程度筛选,然后按指定标签筛选。

使用 secondaryPreferred 模式进行读取操作可能会返回过时数据。使用 maxStalenessSeconds 选项避免从客户端估计过于陈旧的从节点读取数据。

注意

读取优先级 secondaryPreferred 支持分片集群上的对冲读。

nearest

驱动程序从网络延迟处于可接受延迟窗口内的节点读取数据。路由读取操作时,nearest 模式中的读取不考虑节点是主节点还是从节点:主节点和从节点均被同等对待。

设置此模式可最大限度地减少网络延迟对读取操作的影响,而不会优先考虑当前或过时的数据。

当读取偏好包含 maxStalenessSeconds 值时,客户端会通过将从节点的最后一次写入与主节点的最后一次写入(如果可用)进行比较来估计每个从节点的陈旧程度;或者,如果没有主节点,则会将其与执行最近一次写入的从节点进行比较。然后,客户端会过滤掉其估计延迟大于 maxStalenessSeconds 的所有从节点,并将此读取操作随机定向到网络延迟不超过可接受延迟窗口

如果指定标签集列表,则客户端会尝试查找与指定标签集列表匹配的副本集节点,并将读取定向到最近的群组

当读取偏好包含 maxStalenessSeconds 值和标签集列表时,客户端首先按过时程度筛选,然后按指定标签过滤。然后,客户端从剩余的 mongod 实例中,随机将读取定向到处于可接受延迟时间范围内的实例。读取偏好节点选择文档详细描述了该过程。

使用 nearest 模式进行读取操作可能会返回过时数据。使用 maxStalenessSeconds 选项避免从客户端估计过于陈旧的从节点读取数据。

注意

读取偏好 nearest 默认指定使用对冲读来处理分片集群上的读取操作。

提示

另请参阅:

要了解特定读取偏好设置的使用案例,请参阅读取偏好使用案例

配置读取偏好

使用 MongoDB 驱动程序时,您可以使用驱动程序的读取偏好 API 指定读取偏好。请参阅驱动程序API 文档。您还可以在连接到副本集或分片集群时设置读取偏好(对冲读选项除外)。有关示例,请参阅连接字符串。

对于给定的读取偏好,MongoDB 驱动程序使用相同的节点选择逻辑

使用 mongosh 时,请参阅 cursor.readPref() 和 Mongo.setReadPref()。

读取偏好和事务

分布式事务包含读取操作的必须使用primary 读取偏好

所有连接选项

连接选项

参考

连接字符串 - MongoDB 手册 v7.0

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/405721.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ant design pro 中用户的表单如何控制多个角色

ant design pro 如何去保存颜色ant design pro v6 如何做好角色管理ant design 的 tree 如何作为角色中的权限选择之一ant design 的 tree 如何作为角色中的权限选择之二ant design pro access.ts 是如何控制多角色的权限的 看上面的图片 当创建或编辑一个用户时,…

Mac文件需要分卷压缩怎么办 Mac上怎么解压分卷压缩的文件

在处理大型文件的传输和存储的时候,Mac用户常面临文件大小超过限制的问题。为了有效管理这些大文件,分卷压缩成为一种必不可少的解决方案。Mac文件需要分卷压缩怎么办?Mac上怎么解压分卷压缩的文件?本文将向你介绍如何使用BetterZ…

第R2周:LSTM-火灾温度预测

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 一、什么是LSTM 1.LSTM的本质 长短时记忆网络(Long Short-Term Memory, LSTM)的本质是一种特殊的循环神经网络(Recurrent…

使用Go语言将PDF文件转换为Base64编码

使用 Go 语言将 Base64 编码转换为 PDF 文件-CSDN博客本文介绍了如何使用 Go 语言将 Base64 编码转换为 PDF 文件,并保存到指定路径。https://blog.csdn.net/qq_45519030/article/details/141225772 在现代编程中,数据转换和编码是常见的需求。本文将介绍…

SX_gitlab可视化操作c语言知识_17

gitlab可视化操作技巧: Merge into current branch直接将远程wjc_GNSS分支的数据拉下来同步到本机当前的分支代码,执行的是合并操作,即多的模块会添加到本地分支,有冲突的地方不行得rebase覆盖才行 修改完代码先暂存更改再在暂存区写入备注&a…

网络通信要素

网络介绍 定义:将具有独立功能的多台计算机通过通信线路和通信设备连接起来,在网络管理软件及网络通信协议下,实现资源共享和信息传递的虚拟平台。 学习网络的目的: 能够编写基于网络通信的软件或程序,通常来说就是网…

力扣面试经典算法150题:删除有序数组中的重复项 II

删除有序数组中的重复项 II 今天的题目是力扣面试经典150题中的数组的中等难度题: 删除有序数组中的重复项 II 题目链接:https://leetcode.cn/problems/remove-duplicates-from-sorted-array-ii/description/?envTypestudy-plan-v2&envIdtop-interview-150 题…

时间序列分析2|ARIMA模型|SARIMA模型

ARMA模型的定阶 自相关和偏自相关系数法 通过观察样本的自相关系数(ACF)和偏自相关系数(PACF),进行大体的判断 模型定阶的经验方法 截尾: 最初的d阶样本(偏)自相关系数明显在2倍标准差范围外95%的(偏)自相关系数都落在2倍标准差的范围以内非零自相…

【论文阅读】通用的语义-几何表征的机器人操作

文章目录 1. 【2023CoRL】A Universal Semantic-Geometric Representation for Robotic Manipulation针对痛点和贡献引言模型框架思考不足之处 2. Leveraging Locality to Boost Sample Efficiency in Robotic Manipulation摘要和结论引言模型框架实验思考不足之处 1. 【2023Co…

ES6-ES13学习笔记

目录 初识ES6 变量声明 解构赋值 对象解构 ​编辑 数组解构 ​编辑模版字符串 字符串扩展 includes() repeat() startsWith() endsWith() 数值扩展 二进制和八进制表示法 (Number.)isFinite()与isNaN() Number.isInteger() Math.trunc …

Leetcode JAVA刷刷站(69)x的平方根

一、题目概述 二、思路方向 在Java中,计算一个非负整数x的算术平方根,并返回其整数部分,你可以使用二分查找法。这是因为平方根函数是单调递增的,所以我们可以利用二分查找在合理的时间复杂度内找到结果。 三、代码实现 public…

Matplotlib入门与进阶:数据可视化的强大工具

Matplotlib入门与进阶:数据可视化的强大工具 在当今数据驱动的世界中,数据可视化成为了数据分析的重要一环。数据可视化不仅能够帮助开发者理解和分析数据,还能使数据展示更具说服力。本文将详细介绍Python中的2D绘图库——Matplotlib。通过…

Python自准直仪双筒望远镜光学ABCD矩阵行为算法

🎯要点 🎯平面;曲面;圆柱面;非球面光,双凸透镜;90 度棱镜;分束立方体,双透镜棱;镜分光镜光线;横置隔膜;全内反射;多个分束…

作业08.21

服务器&#xff1a; #include <myhead.h>#define SER_PORT 6666 #define SER_IP "127.0.0.1"int find_client(int *client_arr, int len, int client) {for(int i0; i<len; i){if(client_arr[i] client){return i;}}return -1; }void remove_client(int *…

python爬虫--pyquery解析库整理

前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 本文整理python的爬虫解析库pyquery的语法 简洁快速的整理&#xff0c;建议有前端基础的人看 pyquery解析原理 pyquery的原理就是拿到网站的前端源码后&#xff0c;我们根据我们需求信息所在的标签进行筛选。 选…

漏洞挖掘 | 记一次edusrc--轻松拿下中危信息泄露

1.前言 也是一次漏洞挖掘的思路分享 上次我们讲过了关于小程序方面的一些小思路&#xff0c;即关于抓包更改id号造成的一个信息泄露&#xff0c;但是在小程序上的信息泄露很难涉及到公民三要素这是一个痛点&#xff0c;今天就来分享一下一次edu挖掘时挖到的一个涉及公民三要素…

【云备份】项目总结

文章目录 项目总结项目总结项目扩展:常见问题: 项目总结 项目总结 搭建云备份服务器与客户端&#xff0c;客户端程序运行在客户机上自动将指定目录下的文件备份到服务器&#xff0c;并且能够支持浏览器查看与下载&#xff0c;其中下载支持断点续传功能&#xff0c;并且服务器端…

kubernetes的pod基础

kubernetes的pod基础 pod概念 pod&#xff08;豆荚&#xff09;&#xff0c;是k8s的最小管理单元。是一个或多个容器的组合&#xff0c;这些容器共享存储&#xff0c;网络和命名空间&#xff0c;以及运行规范&#xff0c;pod内的容器统一的进行安排和调度。pod是一组具有共享命…

【TCP/IP】自定义应用层协议,常见端口号

互联网中&#xff0c;主流的是 TCP/IP 五层协议 5G/4G 上网&#xff0c;是有自己的协议栈&#xff0c;要比 TCP/IP 更复杂&#xff08;能够把 TCP/IP 的一部分内容给包含进去了&#xff09; 应用层 可以代表我们所编写的应用程序&#xff0c;只要应用程序里面用到了网络通信…

进程间的通信3——IPC对象通信->共享内存、网络通信

一、共享内存 1、原理 直接对实际物理内存进行操作&#xff0c;不用先拷贝到用户空间再到内核空间&#xff08;物理内存&#xff09;。 2、特点 &#xff08;1&#xff09;共享内存是一块内核预留的空间&#xff1b; &#xff08;2&#xff09;最高效的通信方式。 3、操作 产…