1、Mongodb的介绍mysql
MongoDB 是一个跨平台的,面向文档的数据库,提供高性能,高可用性和可扩展性方便。 MongoDB 工做在收集和文件的概念。redis
数据库是一个物理容器集合。每一个数据库都有本身的一套文件系统上的文件。一个单一的MongoDB服务器一般有多个数据库。sql
集合是一组MongoDB的文档。它至关于一个RDBMS表。收集存在于一个单一的数据库。集合不执行模式。集合内的文档能够有不一样的领域。一般状况下,一个集合中的全部文件是相同或相关的目的。mongodb
文档是一组键 - 值对。文件动态模式。动态模式是指,在相同集合中的文档不须要具备相同的字段或结构组的公共字段的集合的文档,能够容纳不一样类型的数据。数据库
下面给出的表显示RDBMS术语使用 MongoDB 的关系服务器
RDBMS | MongoDB |
---|---|
Database | Database |
Table | Collection |
Tuple/Row | Document |
column | Field |
Table Join | Embedded Documents |
Primary Key | Primary Key (Default key _id provided by mongodb itself) |
数据库服务器和客户端 | |
Mysqld/Oracle | mongod |
mysql/sqlplus | mongo |
2、Mongodb与传统RDBMS的对比架构
架构:MongoDB是文档型数据库,其中一个集合保存不一样的不一样的文件。字段的数量,内容和该文件的大小能够是不一样于从一个文件复制到另外一个。app
一个单一的对象,结构相对清晰运维
没有复杂的链接yii
深查询能力。 MongoDB支持动态查询使用基于文档的查询语言,如SQL几乎同样强大的文件
调优
易于规模化:MongoDB是易于扩展
不须要数据库对象的应用程序对象转换/映射
使用内部存储器存储(窗口)工做组,从而实现更快的数据存取
对任何属性可索引
复制和高可用性
自动分片
丰富的查询
快速就地更新
MongoDB的专业技术支持
大数据
内容管理和交付
移动和社交基础设施
用户数据管理
数据平台
3、Mongodb的不足
4、Mongodb的三种部署方案
Replica Set
中文翻译叫作副本集,不过我并不喜欢把英文翻译成中文,老是感受怪怪的。其实简单来讲就是集群当中包含了多份数据,保证主节点挂掉了,备节点能继续提供数据服务,提供的前提就是数据须要和主节点一致。以下图:
Mongodb(M)表示主节点,Mongodb(S)表示备节点,Mongodb(A)表示仲裁节点。主备节点存储数据,仲裁节点不存储数据。客户端同时链接主节点与备节点,不链接仲裁节点。
默认设置下,主节点提供全部增删查改服务,备节点不提供任何服务。可是能够经过设置使备节点提供查询服务,这样就能够减小主节点的压力,当客户端进行数据查询时,请求自动转到备节点上。这个设置叫作Read Preference Modes,同时Java客户端提供了简单的配置方式,能够没必要直接对数据库进行操做。
仲裁节点是一种特殊的节点,它自己并不存储数据,主要的做用是决定哪个备节点在主节点挂掉以后提高为主节点,因此客户端不须要链接此节点。这里虽然只有一个备节点,可是仍然须要一个仲裁节点来提高备节点级别。我开始也不相信必需要有仲裁节点,可是本身也试过没仲裁节点的话,主节点挂了备节点仍是备节点,因此我们仍是须要它的。
介绍完了集群方案,那么如今就开始搭建了。
Sharding
ongoDB集群包括必定数量的mongod(分片存储数据)、mongos(路由处理)、config server(配置节点)、clients(客户端)、arbiter(仲裁节点:为了选举某个分片存储数据节点那台为主节点)。
一、shards:一个shard为一组mongod,一般一组为两台,主从或互为主从,这一组mongod中的数据时相同的,具体可见《mongodb分布式之数据复制》。数据分割按有序分割方式,每一个分片上的数据为某一范围的数据块,故可支持指定分片的范围查询,这同google的BigTable 相似。数据块有指定的最大容量,一旦某个数据块的容量增加到最大容量时,这个数据块会切分红为两块;当分片的数据过多时,数据块将被迁移到系统的其余分片中。另外,新的分片加入时,数据块也会迁移。
二、mongos:能够有多个,至关于一个控制中心,负责路由和协调操做,使得集群像一个总体的系统。mongos能够运行在任何一台服务器上,有些选择放在shards服务器上,也有放在client 服务器上的。mongos启动时须要从config servers上获取基本信息,而后接受client端的请求,路由到shards服务器上,而后整理返回的结果发回给client服务器。
三、config server:存储集群的信息,包括分片和块数据信息。主要存储块数据信息,每一个config server上都有一份全部块数据信息的拷贝,以保证每台config server上的数据的一致性。
Master-Slaver
这个是最简答的集群搭建,不过准确说也不能算是集群,只能说是主备。而且官方已经不推荐这种方式,因此在这里只是简单的介绍下吧,搭建方式也相对简单。
以上三种集群搭建方式首选Replica Set,只有真的是大数据,Sharding才能显现威力,毕竟备节点同步数据是须要时间的。Sharding能够将多片数据集中到路由节点上进行一些对比,而后将数据返回给客户端,可是效率仍是比较低的说。
我本身有测试过,不过具体的机器配置已经不记得了。Replica Set的ips在数据达到1400w条时基本能达到1000左右,而Sharding在300w时已经降低到500ips了,二者的单位数据大小大概是10kb。你们在应用的时候仍是多多作下性能测试,毕竟不像Redis有benchmark。
Mongodb如今用的仍是比较多的,可是我的以为配置太多了。。。。我看官网都看了好多天,才把集群搭建的配置和注意要点弄明白。并且用过的人应该知道mongodb吃内存的问题,解决办法只能经过ulimit来控制内存使用量,可是若是控制很差的话,mongodb会挂掉。。。