MongDB数据库学习笔记(三)

目录

1.MongoDB数据库连接java

2.mongoDB相关封装方法

2.1 数据插入

2.2 数据查找:

2.3 数据修改:

2.4  数据删除:

3.MongoDB复制,分片和备灾

3.1 复制

3.2 分片

3.3 备份和容灾


前言:上一篇文章学习了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目录,这个目录里面存放该数据库实例的备份数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值