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();
相关推荐
3.5 客户端请求和MongoDB数据库连接 3.6 本章小结 第2篇 应用篇 第4章 查询 4.1 find简介 4.1.1 返回指定的键 4.1.2 find查询限制 4.2 条件操作符 4.2.1 $all匹配所有 4.2.2 $exists判断字段...
52.2 集合 62.2.1 无模式 62.2.2 命名 72.3 数据库 82.4 启动MongoDB 92.5 MongoDB shell 102.5.1 运行shell 102.5.2 MongoDB客户端 112.5.3 shell中的基本操作 112.5.4 使用shell的窍门 132.6...
82.4 启动MongoDB 92.5 MongoDB Shell 102.5.1 运行shell 102.5.2 MongoDB 客户端 112.5.3 shell 中的基本操作 112.5.4 使用shell 的窍门 132.6 数据类型 152.6.1 基本数据类型 152.6.2 数字 172....
Mongodb复制集由一组Mongod实例(进程)组成,包含一个Primary节点和多个Secondary节点,Mongodb Driver(客户端)的所有数据都写入Primary,Secondary从Primary同步写入的数据,以保持复制集内所有成员存储相同的...
3.5 客户端请求和MongoDB数据库连接 3.6 本章小结 第2篇 应用篇 第4章 查询 4.1 find简介 4.1.1 返回指定的键 4.1.2 find查询限制 4.2 条件操作符 4.2.1 $all匹配所有 4.2.2 $exists判断字段...
MongoDB复制原理 mongodb的复制至少需要两个节点。其中一个是主节点,负责处理客户端请求,其余的都是从节点,负责复制主节点上的数据。 mongodb各个节点常见的搭配方式为:一主一从、一主多从。 主节点记录在其上...
在分布式应用系统中,mongodb 已经成为 NoSQL 经典数据库。要想很好的使用 mongodb,仅仅知道... mongos 进程 – mongodb 的路由进程,负责与客户端连接,转发客户端请求到后端集群,对客户端屏蔽集群内部结构; mongo
MeteorJs检测到何时在MongoDb中添加/更改/删除了某些内容(从网站/应用程序或Meteor应用程序或任何MongoDb客户端)并发布了它 React性组件(在客户端浏览器上)刷新数据 要求 PHP> = 5.4 /作曲家 Mete
API 使用 Mongoose ODM 连接到 MongoDB,以进行原理图应用程序数据建模。 我们将使用来自平台的远程数据库,并使用 Mongoose ODM 连接到该数据库。 使用此 API 处理 CRUD API 将使用标准的 http URL,即。 并且请求...
到目前为止,由于该API相当僵化,因此该示例和应该足以了解其工作原理。 最初的用例是简化SaaS应用程序的数据隔离,其中每个用户都可以属于不同的组织(例如GitHub中的组织)。 确实,访问控制的一个关键方面是...
该服务器在设计时考虑到测试的要求,将允许您将自己喜欢的ODM或客户端库连接到MongoDB服务器,并运行彼此隔离的集成测试。 工作原理该项目不是内存中MongoDB的替代实现。 它使用运行,它使用来自NPM的MongoDB二进制...
我在自己的电脑上需要用mongodb图形客户端,但是mongodb的服务器地址没有对外网开放,只能通过先登录主机A,然后再从A连接mongodb服务器B。 本来想通过ssh端口转发的,但是我没有从机器A连接ssh到B的权限。于是就...
MongoDB可视化客户端及JavaApi实践 手写基于MongoDB的ORM框架 MongoDB企业级集解决方案 MongoDB聚合、索引及基本执行命令 MongoDB数据分片、转存及恢复策略 MyCat MySQL主从复制及读写分离实战 MySQL+...
它不仅可以用于在 node.js 中创建 MongoDB 模式。 这个想法是使用相同的代码来验证客户端表单数据(很快)。 您可以通过阅读示例了解它的工作原理。 这是一个早期的 BETA 版本 一旦模块在实时系统上显示出它的...
MyCAT是一款由阿里Cobar演变而来...MyCAT原理MyCAT主要是通过对SQL的拦截,然后经过一定规则的分片解析、路由分析、读写分离分析、缓存分析等,然后将SQL发给后端真实的数据块,并将返回的结果做适当处理返回给客户端。
MyCAT是一款由阿里Cobar演变而来...MyCAT原理MyCAT主要是通过对SQL的拦截,然后经过一定规则的分片解析、路由分析、读写分离分析、缓存分析等,然后将SQL发给后端真实的数据块,并将返回的结果做适当处理返回给客户端。
使用React,Node.js,Express和MongoDB,您将学习如何从头到尾构建一个Full Stack MERN应用程序。 该应用程序称为“回忆”,它是一个简单的社交媒体应用程序,允许用户发布生活中发生的有趣事件。 到本视频结尾,...
二、Node服务器开发:这部分内容主要是讲解了在工作中最常用到的web服务器知识,包括如何使用node建立网站服务器供客户端访问以及如何把node作为客户端向服务器请求数据;三、最经典的Node快速开发框架Express:这...
MongoDB的Window客户端工具MongoVue,地址是http://www.mongovue.com/。是目前不叫流行的连接管理工具,1.0版本的以后开始收费。 此工具使用简单,单击启动便可,原理是因为MongoVUE试用期只有15天,把MongoVUE的...
这个项目是无聊的时候做的,主要客户端为移动端,利用唤醒URL schema原理, 可以将自己喜欢的资源通过百度云分享上传到平台 利用平台的共享性 或许自己的所需资源,相当于一个百度云盘的集合,整体项目分三部分 采用...