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的在面试汇总经常问到。

时间: 2024-11-05 16:12:44

NOSQL《二》之MongoDB的加强的相关文章

学习MongoDB 二:MongoDB加入、删除、改动

一.简单介绍 MongoDB是一个高性能.开源.无模式的文档型数据库,是当前NoSQL数据库产品中最热门的一种.数据被分组存储在数据集中,被称为一个集合(Collenction)和对于存储在MongoDB数据库中的文件,我们不须要知道它的不论什么结构定义的自由模式,在存储数据时是以键-值对的集合键是字符串,值能够是数据类型集合里的随意类型,包含数组和文档. MongoDB存储在集合中的全部文件,集合是一组有一组共享公共索引的相关文档.集合类似于关系数据库中的表.在MongoDB中,这些操作改动单

【MongoDB】NoSQL Manager for MongoDB 教程(基础篇)

前段时间,学习了一下mongodb,在客户端工具方面,个人认为 NoSQL Manager for MongoDB 是体验比较好的一个,功能也较齐全.可惜在找教程的时候,发现很难找到比较详细的教程,也没有找到中文破解版之类的安装包.在经过摸索使用之后,决定写两篇关于NoSQL Manager for MongoDB 教程的总结,以供自己或者有需要的人翻查使用. 基础篇:安装.连接mongodb.使用shell.增删改查.表复制 进阶篇:索引.备份还原.从其他关系型数据库(mysql,sqlser

【数据库】Mean web开发 03-MongoDB客户端管理工具NoSQL Manager for MongoDB的使用

简介 Mean是JavaScript的全栈开发框架.更多介绍 用MongoDB实现持久数据的存储是Mean Web全栈开发中的一部分. MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的.它的特点是高性能.易部署.易使用,存储数据非常方便. MongoDB的学习资料可参考: MongoDB中文社区 上一节介绍了MongoDB在windows下的安装方法,这篇介绍一下其NoSQL Manager for MongoDB的使用. 安装及连接 这

浅尝key-value数据库(二)——MongoDB的优与劣

浅尝key-value数据库(二)——MongoDB的优与劣 MongoDB的名字取自英文单词"humongous"的中间五个字母,是一个C++开发的基于分布式文件存储的数据库开源项目.他的文件存储格式是BSON(Binary JSON),因此可以高效存储二进制数据,例如图像.视频等大对象. 由于我是CentOS x86_64的系统,于是安装MongoDB非常简单: vi /etc/yum.repos.d/mongo.repo [10gen] name=10gen Repository

NoSql数据库初探-mongoDB读操作

MongoDB以文档的形式来存储数据,此结果类似于JSON键值对.文档类似于编程语言中将键和值关联起来的结构(比如:字典.Map.哈希表.关联数组).MongoDB文档是以BOSN文档的形式存在的.BSON是JSON附加了类型信息的一种二进制的表现形式. 文档中的字段可以是任何BSON类型,比如(文档类型.数组.文档数组) MongoDB将所有文档存储在collection中,collection是一组相关的文档集合,这一组文档集合拥有共同的索引,collection类似于关系型数据库中的表.

MongoDB入门学习(二):MongoDB的基本概念和数据类型

上一篇讲了MongoDB的安装和管理,其中涉及到了一些概念,数据结构还有一些API的调用,不知道的没关系,其实很简单,这篇会简单介绍一下. 1.文档 文档是MongoDB的核心概念,多个键值对有序的放在一起就是一个文档,文档是MongoDB存储数据最基本的数据结构.对MongoDB都是以文档的形式来操作的,使用了一种类似JSON的二进制BSON数据格式,对API的调用都是传的文档参数.每种编程语言都有标示文档的数据结构,比如java的map,lua的table,python的dict等等,但是都

MongoDB学习:(二)MongoDB简单使用

MongoDB学习:(二)MongoDB简单使用 MongoDB使用: 执行mongodb的操作之前,我们需要运行命令,来进入操作命令界面 >mongo 提示该错误,说明我们系统缺少一个补丁,该补丁我百度盘连接为:https://pan.baidu.com/s/1pKPyPoJ 官方地址为:http://hotfixv4.microsoft.com/Windows%207/Windows%20Server2008%20R2%20SP1/sp2/Fix405791/7600/free/451413

NoSQL Manager for MongoDB 4.6.0.3 带key

NoSQL Manager for MongoDB 4.6.0.3 是一个Windows平台的MongoDB高级管理工具.请低调使用. 博客园文件一次最大不超过10M. 官方安装包: mongodbmanagerpro_inst4.6.0.3官方安装包.part1.rar mongodbmanagerpro_inst4.6.0.3官方安装包.part2.rar mongodbmanagerpro_inst4.6.0.3官方安装包.part3.rar -------------- Patch+Ke

使用NoSQL Manager for MongoDB客户端连接mongodb

1.安装NoSQL Manager for MongoDB 下载地址:http://www.mongodbmanager.com/download 2.打开客户端,选server-new mongodb connection-- 3.在连接配置窗口中填入主机.身份认证.用户名.密码.数据库名 4.切换到databases,填入数据库名,点击ok就可以连接好 版权声明:本文为博主原创文章,未经博主允许不得转载.

NoSql数据库初探-mongoDB环境搭建

NoSQL数据库一改关系型数据库的缺点,更容易的集成.分布式.无模式.故障恢复等特点,正在一步步餐食关系型数据库的市场,作为一个与时俱进的码农了解一下新技术是必须的,尤其是在读了<NoSql精粹>之后,更是想体验一下NoSql数据库的威力. MongoDB是一种文档数据库,也就是说对于领域模型中的每一个聚合来讲,都会作为一个文档来存储. MongoDB有如下优点: 面向文档存储.全索引支持.同步机制和高访问性.自动分片.查询.灵活的聚集和数据处理.映射化简.文件存储.   第一步:安装 从版本