NOSQL《二》之MongoDB的加强

问题?使用MongoDB操作集群、主从复制、副本集、分布式存储的概念,Java调用MongoDB

一、集群概念和使用

多态计算机,对外服务,处理负载均衡的问题。

集群是一组相互独立的、通过高速网络互联的计算机,它们构成了一个组,并各自可以对外服务。


二、主从复制概念和使用

怎么理解呢?也就是主服务器上做什么,从服务器上也得做什么。

            


主的配置(只能执行事务操作)

从的配置(只能执行读的操作,不能执行事务操作)

分别登录到这两个服务器,开两个cmd即可

   

往主服务器中事务操作,而从服务器执行读操作(只能做读操作),查看数据同步性



缺点:没有故障恢复的功能


三、副本集概念和使用

副本集就是有自动故障恢复功能的主从集群。

主从集群副本集最大的区别就是副本集没有固定的“主节点整个集群会选出一个“主节点”,当其故障后,又在剩下的从节点中选中其他节点为“主节点”继续对外服务,遮掩过得一种方式可以实现7*24连续服务工作,副本集总有一个活跃点(primary)和一个或多个备份节点(secondary)。


       

创建节点集:首先建立文件夹mongodb/logs/node1、node2、node3 and mongodb/logs/dbs/ node1、node2、node3


//以三个节点为例:

节点1:

HOST:localhost:10001

Log File:D:\mongodb\logs\node1\logs.txt

Data File:D:\mongodb\dbs\node1

节点2:

HOST:localhost:10002

Log File:D:\mongodb\logs\node2\logs.txt

Data File:D:\mongodb\dbs\node2

节点3:

HOST:localhost:10003

Log File:D:\mongodb\logs\node3\logs.txt

Data File:D:\mongodb\dbs\node3


启动节点:

开启三个cmd

//启动节点1:
mongod --dbpath D:\mongodb\dbs\node1 --logpath D:\mongodb\logs\node1\logs.txt --logappend --port 10001 --replSet itcast/localhost:10002  --master
//启动节点2:
mongod --dbpath D:\mongodb\dbs\node2 --logpath D:\mongodb\logs\node2\logs.txt --logappend --port 10002 --replSet itcast/localhost:10001
//启动节点3:  
mongod --dbpath D:\mongodb\dbs\node3 --logpath D:\mongodb\logs\node3\logs.txt --logappend --port 10003 --replSet itcast/localhost:10001,localhost:10002

另外开cmd登录服务,并初始化三个节点


查看本节点是不是主节点

    

做插入操作,看看是否数据同步了,还是一样只有主节点才能进行事务操作。

然后在其中挂掉一个,再看看那个作为了主节点,并可进行事务操作,优先级顶上来。

     




四、分布式存储概念和使用

主要是为了减小数据库数据量大的压力,分压的作用,具体概念百度有

      

新建三个分布式节点文件夹(我是放在三个盘符里的)

新建一个普通节点(也是放在盘符里的),存放配置信息(路由识别)

 先启动配置节点

     

起一个路由节点,并且连接配置节点:


剩下的就是分布式三个节点

第一个节点:


第二个节点:


第三个节点:


现在要把三个节点放在配置节点中初始化,相当于配置:

登录路由节点服务,进入配置会自动存入配置节点之中,之前他们关联了。

初始化三个节点



AllowLocal:true  :表示不用通过路由也可以连接到这三个分布式节点,进行访问


并且key指明age为分片,shardcollection指明需要分布存储的集合是那个,添加1000万个文档



然后分别起三个客户端连接三个分布式节点,就可以看到数据如下:
都会是一个test.Person集合,路由会根据自己的判断通过age分片,均衡三个分布式节点存储数据,最后访问数据。




五、java调用MongoDB

导入包:mongo-2.10.1.jar

package com.itcast.mongodbDao;

import java.net.UnknownHostException;

import org.bson.types.ObjectId;
import org.junit.Test;

import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.DBObject;
import com.mongodb.Mongo;
import com.mongodb.util.JSON;

public class MongoDBDao {

	@Test
	public void testAdd() throws UnknownHostException {
		Mongo mongo = new Mongo("localhost", 27017);
		DB db = mongo.getDB("test");
		DBCollection collection = db.getCollection("person");

		BasicDBObject dbObject = new BasicDBObject();
		dbObject.put("name", "李大san1");
		dbObject.put("descr", "人生友谊");
		collection.insert(dbObject);

		mongo.close();
	}

	@Test
	public void find() throws UnknownHostException {
		Mongo mongo = new Mongo("localhost", 27017);
		
		 //查询所有的Database
		System.out.println("查询所有的Database");
		for(String name:mongo.getDatabaseNames()){
			System.out.println(name);
		}
		
		//查询所有的聚集集合
		System.out.println("查询所有的聚集集合");
		DB db = mongo.getDB("test");
		for(String name:db.getCollectionNames()){
			System.out.println(name);
		}
		
		System.out.println("查询所有的数据");
		DBCollection collection = db.getCollection("person");
		DBCursor cursor = collection.find();
		while (cursor.hasNext()) {
			DBObject object = cursor.next();
			System.out.println(object.toString());
			System.out.println(object.get("name"));
		}
		System.out.println("文档数:"+cursor.count());
		System.out.println("ID:"+cursor.getCursorId());
		System.out.println("JSON数据:"+JSON.serialize(cursor));
		mongo.close();
	}
	
	@Test
	public void delete() throws UnknownHostException{
		Mongo mongo = new Mongo("localhost", 27017);
		DB db = mongo.getDB("test");
		DBCollection collection = db.getCollection("person");
		BasicDBObject dbObject = new BasicDBObject();
		dbObject.put("name", "李大san1");
		collection.remove(dbObject);
	}
	
	@Test
	public void update() throws UnknownHostException{
		Mongo mongo = new Mongo("localhost", 27017);
		DB db = mongo.getDB("test");
		DBCollection collection = db.getCollection("person");
		BasicDBObject dbObject = new BasicDBObject();
		dbObject.put("name", "李大junjun");
		collection.update(new BasicDBObject("_id",new ObjectId("5741c13f8c89776a5081a962")), dbObject, true, true);
		//第一个true如果数据库不存在,是否添加,第二个true只修改第一天,true如果有多条是否修改
	}
}

六、总结

   在本文中,对概念没有介绍太多,主要是是对操作注重,还有对整个流程的理解。
集群,主从复制、副本集、分布式存储概念一定要弄懂,从实web的在面试汇总经常问到。


1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值