目录
前言:上一篇文章学习了mongoDB的基本操作,本篇我们来学习java操作mongDB的具体实例,以及mongDB的复制,分片和存储
1.MongoDB数据库连接java
依赖:
<dependency> <groupId>org.mongodb</groupId> <artifactId>mongo-java-driver</artifactId> <version>3.4.2</version> </dependency>
代码:
try { //连接MongoDB服务器,端口号为27017 MongoClient mongoClient = new MongoClient("localhost", 27017); //连接数据库 MongoDatabase mDatabase = mongoClient.getDatabase("railexport"); System.out.println("Connect to database successfully!"); System.out.println("MongoDatabase inof is : "+mDatabase.getName()); String collectionName ="test1"; mDatabase.createCollection(collectionName); System.out.println("集合创建成功"); MongoCollection<Document> collection = mDatabase.getCollection(collectionName); System.out.println("选择集合空间为"+collection.getNamespace());
说明:
该代码是对于mongoDB数据库进行连接
并创建集合和选中集合
2.mongoDB相关封装方法
2.1 数据插入
可用Document对象添加对应元素,其依旧是以key-value形式存储数据,value可以是String,也可以是map,还可以是json对象
MongoCollection <Document> mc = collection; Document headDoc =new Document(); ArrayList<Document> bodyDocs =new ArrayList<Document>(); Document document = new Document("title", "文件数据"). append("description", "XX年XX月XX日 XX地 XX类型数据"). append("header", new Document(headDoc)). append("body",Arrays.asList(bodyDocs)). append("type",1).append("typeName","kuoxin"); List<Document> documents = new ArrayList<Document>(); documents.add(document); mc.insertMany(documents); System.out.println("文档插入成功");
2.2 数据查找:
//检索所有文档 /** * 1. 获取迭代器FindIterable<Document> * 2. 获取游标MongoCursor<Document> * 3. 通过游标遍历检索出的文档集合 * */ FindIterable<Document> findIterable = collection.find(); MongoCursor<Document> mongoCursor = findIterable.iterator(); while(mongoCursor.hasNext()){ System.out.println(mongoCursor.next()); }
2.3 数据修改:
/更新文档 将文档中likes=100的文档修改为likes=200 collection.updateMany(Filters.eq("likes", 100), new Document("$set",new Document("likes",200))); //检索查看结果 FindIterable<Document> findIterable = collection.find(); MongoCursor<Document> mongoCursor = findIterable.iterator(); while(mongoCursor.hasNext()){ System.out.println(mongoCursor.next()); }
2.4 数据删除:
/删除符合条件的第一个文档 collection.deleteOne(Filters.eq("likes", 200)); //删除所有符合条件的文档 collection.deleteMany (Filters.eq("likes", 200)); //检索查看结果 FindIterable<Document> findIterable = collection.find(); MongoCursor<Document> mongoCursor = findIterable.iterator(); while(mongoCursor.hasNext()){ System.out.println(mongoCursor.next()); }
3.MongoDB复制,分片和备灾
3.1 复制
MongoDB复制是将数据同步在多个服务器的过程。
复制提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性, 并可以保证数据的安全性。
复制还允许您从硬件故障和服务中断中恢复数据。
MongoDB复制原理
mongodb的复制至少需要两个节点。其中一个是主节点,负责处理客户端请求,其余的都是从节点,负责复制主节点上的数据。
mongodb各个节点常见的搭配方式为:一主一从、一主多从。
主节点记录在其上的所有操作oplog,从节点定期轮询主节点获取这些操作,然后对自己的数据副本执行这些操作,从而保证从节点的数据与主节点一致。
MongoDB复制结构图如下所示:
以上结构图中,客户端从主节点读取数据,在客户端写入数据到主节点时, 主节点与从节点进行数据交互保障数据的一致性。
3.2 分片
在Mongodb里面存在另一种集群,就是分片技术,可以满足MongoDB数据量大量增长的需求。
当MongoDB存储海量的数据时,一台机器可能不足以存储数据,也可能不足以提供可接受的读写吞吐量。这时,我们就可以通过在多台机器上分割数据,使得数据库系统能存储和处理更多的数据。
3.3 备份和容灾
在Mongodb中我们使用mongodump命令来备份MongoDB数据。该命令可以导出所有数据到指定目录中。
mongodump命令可以通过参数指定导出的数据量级转存的服务器。
语法
mongodump命令脚本语法如下:
>mongodump -h dbhost -d dbname -o dbdirectory
-
-h:MongoDB 所在服务器地址,例如:127.0.0.1,当然也可以指定端口号:127.0.0.1:27017
-
-d:需要备份的数据库实例,例如:test
-
-o:备份的数据存放位置,例如:c:\data\dump,当然该目录需要提前建立,在备份完成后,系统自动在dump目录下建立一个test目录,这个目录里面存放该数据库实例的备份数据。