Mongodb客户端原理

Golang 与 MongoDB 客户端:完美结合之道 本部分的目的在于为读者提供关于 Golang 与 MongoDB 客户端结合的全面背景知识。范围涵盖了从 Golang 和 MongoDB 的基本概念、发展历程,到它们结合的必要性和优势。通过对这些内容的介绍,读者能够更好地理解后续章节中关于核心原理、算法、实战等方面的内容。本文将按照以下结构进行组织:首先介绍 Golang 和 MongoDB 的核心概念与联系,包括它们的原理和架构;接着详细讲解核心算法原理和具体操作步骤,并用 Python 代码示例进行阐述;然后给出相关的数学模型和公式,并举例说明; 阅读详情

    JAVA客户端原理简述

    mongodb提供了官方的JAVA客户端,在上文中我们已经看到了示例。

    接下来我们简单的阐述一下它的基本原理:

    1)MongoClient参数列表中,允许指定多个mongod的addresses,注意,它们要么是同一个replica set中所有memebers列表,要么为同一个cluster的mongos列表,且不能混合使用。

    mongodb提供了2种架构模式:replica set和sharded cluster,其中replica set中多个member存储的数据一样,一个MongoClient只能允许与一个replica set通讯,它的所有members(必须为可以提供read、write操作的members)均需要传入MongoClient;对于shared cluster,通常会部署多个mongos,mongos是客户端与集群数据节点(shards节点)通讯的桥梁,因此MongoClient中可以指定多个mongos地址。

    其中addresses的顺序并不重要。

 

    2)如果指定的addresses为列表,那么MongoClient内部将构造一个MultiServerCluster实例;如果addresses为单个地址,则创建一个SingleServerCluster。

    其中MultiServerCluster内部维护一个map,Key为ServerAddress,Value为一个ClusterableServer实例;ClusterableServer接口的默认实现类为DefaultServer,它内部维护一个ConnectionPool,我们可以在创建MongoClient时指定MongoClientOptions,用于设定连接池的大小和其他一些参数(包括Socket参数、read preference、write concern等)。(参见源码:ConnectionSource,Mongo)

 

    3)对于replica set模式而言,MongoClient将同时与所有的members建立链接;其中write操作通过与primary节点建立的connection进行交互,但是对于read操作则需要调整,因为开发者可以为每个find()操作指定“read preference”(或者默认的),每个read操作都会从Server列表中根据“read perference”类型选择合适的Server(如果有多个,则最终随机选择其中一个),并将此server与操作binding,直到操作结束;如果read操作中使用了cursor,那么在cursor的整个遍历过程中,均会使用此前binding的server,不会更换server,但是因为内部ConnectionPool的机制,可能在整个Cursor遍历期间,多次IO会使用连接池中的不同的connection,不过这不会对操作带来任何问题。(参见源码:ClusterBinding,ReadPreferenceServerSelector,MongoCursor)

 

    4)对于sharded cluster而言,情况或许相对简单;因为每个mongos都可以接收read、write请求,客户端的每个操作都会从Server列表随机选择一个Server实例,然后从Server实例的连接池中获取Connection对象即可。对于Cursor问题,同3),即Cursor遍历期间,所有的IO均与一个Server通讯。

 

    5)MongoClient内置Server状态监测机制,每个Server都会初始化一个监控线程,此线程间歇性的与server地址建立链接,如果链接失败,则认为此Server,将会尝试从Server列表中移除(同时关闭其连接池中的链接);此后如果某刻,此Server再次有效,那么再次将它添加到Server列表中。

    在MongoClientOptions中可以通过“heartbeatFrequency”参数指定监测的周期(参见源码:DefaultServerMonitor,ChangeListener)

 

List<ServerAddress> replicaSet = new ArrayList<ServerAddress>();
replicaSet.add(new ServerAddress("127.0.0.1",27017));
replicaSet.add(new ServerAddress("127.0.0.1",28017));
replicaSet.add(new ServerAddress("127.0.0.1",29017));//replica set
MongoClientOptions options = MongoClientOptions.builder().writeConcern(WriteConcern.MAJORITY)
        .connectTimeout(30000)
        .connectionsPerHost(128)
        .heartbeatConnectTimeout(15000)
        .heartbeatFrequency(10000)
        .maxConnectionIdleTime(60000)
        .maxWaitTime(10000).build();
MongoClient mongoClient = new MongoClient(replicaSet,options);
MongoDatabase db = mongoClient.getDatabase("test");
MongoCollection<Document> collection = db.getCollection("user");
MongoCursor<Document> cursor = collection.find(Filters.eq("name", "zhangsan")).batchSize(32)
        .skip(200)
        .limit(32).iterator();
while (cursor.hasNext()) {
    Document item = cursor.next();
    System.out.println(item.toJson());
}
cursor.close();//must be
mongoClient.close();

 

9、使用 Java 客户端操作 MongoDB:查询、插入、更新、删除与聚合 本文详细介绍了如何使用 Java 客户端与 MongoDB 进行交互,涵盖了查询、插入、更新、删除和聚合等常见操作。文章提供了代码示例、测试用例执行方法以及注意事项,帮助开发者快速掌握 Java 与 MongoDB 的集成开发。此外,还介绍了查询构建器和聚合管道的使用,以提升开发效率和代码可维护性。 阅读详情

相关推荐

17、MongoDB高级操作指南

本文详细介绍了MongoDB的多种高级操作,包括使用可尾游游标监听集合新文档、将普通集合转换为固定集合、存储二进制数据、使用GridFS处理大文件存储,以及通过Java和Python客户端操作GridFS。这些方法帮助开发者根据不同的业务需求选择合适的存储和操作方案,提升数据处理的效率和灵活性。

dd012的博客 98

mongo 去重

import pymongo # 连接数据库 client = pymongo.MongoClient('mongodb://127.0.0.1:27017') db = client.Tendering collection = db.test # 选中所有不重复的id for item in collection.distinct('id'): # 复制第一条id相同的数据 ...

何加焉的博客 497

JavaScript与数据库MongoDB

在Web开发中,JavaScript通常用于客户端开发,例如增强HTML页面的交互性、调用Web API、执行Ajax操作和操作Cookie等。JavaScript是一种用于Web开发的脚本语言,它是一种基于对象的语言,最初由Netscape公司在1995年开发,旨在通过客户端脚本语言为Web应用程序增加交互性和动态性。JavaScript的主要优点在于它的易用性、灵活性和强大的交互能力。JavaScript和MongoDB的结合使用可以使Web应用程序更加弹性,可以在不同的设备和浏览器中正确运行。

吃不胖. 425

关于MongoDB的一些操作

(1)删除MongoDB服务     打开cmd,输入命令:SC DELETE MongoDB。即可将MongoDB服务删除(2)配置windows服务     在安装目录按住shift+右键,点击“在此处打开命令”,      此处安装在D盘:D:\software\MongoDB\bin,     在打开的窗口输入命令:mongod --config D:\software\Mongodb\m...

yhj198927的博客 305

一文详细讲解CRM系统(附架构图、流程、功能介绍)

专为中小企业量身打造高性价比的数字化转型路径!企业如何用CRM才能真正做到降本增效?今天,就用一文讲清这些问题!读完本文,你将清楚得了解CRM的概念、框架、流程、功能、企业成功案例,文末还有常见问题解答。

Dabeishandong的博客 9928

四大厂商网络设备巡检命令实战指南:华为、华三、锐捷、思科

本文详细介绍了华为、华三、锐捷、思科四大厂商网络设备的巡检命令实战指南,涵盖硬件状态、软件运行和网络功能等核心维度。通过具体命令示例和实用技巧,帮助网络工程师高效完成设备巡检,预防潜在故障,确保网络稳定运行。

weixin_29235923的博客 391

MongoDB聚合运算符:$shift

摘要:`$shift`聚合运算符用于计算在`$setWindowField`阶段分区内指定位置文档的表达式的值。`$setWindowFields`阶段`sortBy`字段值决定文档顺序。`shift`只能用于`$setWindowFields`阶段。

superatom01的博客 586

在树莓派上部署训练好的YOLO模型

.pt.模型转换为onnx格式的模型,树莓派上部署模型

pai_da_xing8的博客 3887

java mongo驱动,连接池在哪里

获取mongoClient对象,通过 mongoClients.create方法 class MongoClientImpl implements MongoClient { private static final Logger LOGGER = Loggers.getLogger("client"); private final Cluster cluster; //连接池在...

jc18510682557的博客 821

从示波器波形看懂死区:手把手教你调ST MCU的PWM,避免三相桥直通炸管

本文详细解析了如何通过示波器波形判断PWM死区时间,并手把手教你调整STM32高级定时器寄存器,避免三相逆变桥直通炸管。文章涵盖死区时间的本质与风险、STM32配置详解、示波器调试技巧及FOC系统中的特殊考量,帮助工程师优化电机驱动性能与安全性。

weixin_30315723的博客 733

保姆级教程:在Ubuntu 22.04上用Python3.10和pysoem搞定EtherCAT电机回零与位置控制

本文提供在Ubuntu 22.04上使用Python3.10和pysoem实现EtherCAT电机回零与位置控制的详细指南。涵盖环境搭建、权限配置、EtherCAT主站架构解析、CiA402协议核心机制及工业级精度控制实现,帮助开发者快速掌握Python在工业自动化中的应用。

weixin_30952535的博客 329

(2)MongoDB副本集自动故障转移原理(含客户端)

前文我们搭建MongoDB三成员副本集,了解集群基本特性,今天我们围绕下图聊一聊背后的细节。默认搭建的副本集均在主节点读写,辅助节点冗余部署,形成高可用和备份,具备自动故障转移能力。集群...

dotNET跨平台 455

保姆级教程:将YOLOv8模型封装成Docker镜像,集成到CVAT实现自动标注

本文提供了一份详细的保姆级教程,指导如何将YOLOv8模型封装成Docker镜像并集成到CVAT平台,实现自动化标注。通过环境配置、模型服务化封装、Docker镜像构建与优化、CVAT平台集成等步骤,帮助开发者高效完成计算机视觉项目的自动标注工作流,显著提升标注效率。

weixin_28692817的博客 414

mongo 客户端一共有哪些命令?使用场景是什么?底层原理是什么?

MongoDB 提供了丰富的命令,用于操作数据库、集合(Collection)和文档(Document)。下面是一个完整的示例,展示如何使用 MongoDB 的客户端命令。

长风破浪会有时的博客 863

具身智能的边缘计算核心构成方案

摘要: 具身智能(Embodied Intelligence)依赖物理实体与环境交互,而边缘计算(Edge Computing)通过本地化数据处理降低延迟、提升实时性。两者结合的核心方案包含五层架构:传感器层采集环境数据,边缘处理单元执行本地计算,通信模块实现低延迟传输,决策引擎运行轻量AI模型,执行器接口转化动作为物理操作。该方案以“边缘优先”为原则,满足毫秒级响应(如延迟<50ms),同时优化能效(功耗降低30%)和隐私保护。适用于机器人、自动驾驶等场景,通过分层闭环设计确保在资源受限环境中的可靠

老郑的博客 812

Python与CAD系列基础篇(十)图形复制、移动、删除

①通过pyautocad连接AutoCAD进行处理②通过ezdxf处理dxf格式文件。进行图形复制、移动、删除的方法。pyautocad方式。pyautocad方式。

weixin_43894929的博客 2210

MongoDB深究之ObjectId

继上一篇《MongoDB初窥》之后,想必大家对自动生成的主键objectId有所好奇,为什么会是一个24位的字符串。今天,就对objectId的生成原理做一次比较深入的挖掘。  一、     ObjectId的组成 首先通过终端命令行,向mongodb的collection中插入一条不带“_id”的记录。然后,通过查询刚插入的数据,发现自动生成了一个objectId,4e7020cb7cac8

1356

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

通过客户端字段级加密增强mongodb的安全性

The Federal government compliance standards wants the organizations to recognize PII — Personally identifiable information and PHI Protected health information and handle them securely. Some of the co...

weixin_26636643的博客 837

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

MongoDB:mongos路由的工作原理是什么?

是 MongoDB 分片集群架构中的路由进程,它负责将客户端的请求路由到正确的分片(shard)。mongos 本身并不存储数据,而是充当客户端与分片之间的代理。mongos 会根据请求的查询和分片策略,决定数据应当存储在哪个分片。mongos 不直接存储数据,也不处理查询,它的作用是作为代理来转发请求。mongos 路由的主要任务是根据客户端发出的查询,查找相关的分片并将查询请求转发到正确的分片。mongos 向配置服务器查询元数据,以获取集群中各个分片的数据分布和当前状态。

喝醉酒的小白 518

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

MongoDB实验——在MongoDB集合中查找文档

MongoDB实验——在MongoDB集合中查找文档

IT小小白的博客 2856

mongodb Java客户端,dbname和pakagename绑定了

问题是这样的,原先已经有一个webserver项目了,现在先再建议类似的webserve,跑在同一个tomcat下。 这两个webserver都用了同一个mongedb环境。 为了简单,我只改了project name,没有改package name。然后再改一下database name,代码里可以改databae name的地方有只有这一句mogo.getDB("database name

Levin的专栏 1193

MongoDB writeConcern和readConcern原理

目录 readConcern readConcern作用 readConcern原理 readConcern须知 readPreference writeConcern writeConcern选项 {w: "majority"}解析 readConcern readConcern作用 MongoDB 可以利用readConcern来灵活的定制读策略,决定读取数据时,...

FeelTouch Labs 2608

java mysql 客户端,思考Java版本Mysql客户端的代码

一次偶然的机会debug代码瞅了一眼Mysql客户端的代码(Java版本),最引发我兴趣的是这一句: execSQL 是一个非常重要的方法,所有SQL语句的最终都是交由这个代码来实现的;这个方法被一个 connectionMutex 锁(这个锁其实就是Connection对象自己,Mysql客户端通过使用了“反射”所以不能直接使用 this )包裹着这就意味着—— 在同一时刻一个Mysql连接只能...

weixin_28872035的博客 392

mongodb(三)的副本集和主从配置

1.mongodb复制 MongoDB复制是将数据同步在多个服务器的过程。复制提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性, 并可以保证数据的安全性。复制还允许您从硬件故障和服务中断中恢复数据。 2.mongodb复制原理 mongodb的复制至少需要两个节...

247
上一篇: Mongodb中Index特性
下一篇: Mongodb中Sharding集群
shift_alt_ctrl
博客等级 码龄10年 0粉丝 83原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值