mongodb-个人学习总结

mongodb是一个开源的分布式文档数据库,介于关系型和非关系型数据库之间,支持的数据结构非常松散,是类似json和bson格式,支持比较复杂的数据格式,支持复杂的查询,支持对数据建立索引。

1、网络资源

官网:http://www.mongodb.org/

源码:https://github.com/mongodb/mongo

wiki:https://github.com/mongodb/mongo/wiki

2、组件和工具

bin/mongod - The database process.

bin/mongos - Sharding controller.

bin/mongo  - The database shell (uses interactive javascript).

bsondump-display BSON files in a human-readable format

mongoimport-Convert data from JSON, TSV or CSV and insert them into a collection

mongoexport-Write an existing collection to CSV or JSON format

mongodump/mongorestore-Dump MongoDB backups to disk in .BSON format, or restore them to a live database

mongostat-Monitor live MongoDB servers, replica sets, or sharded clusters

mongofiles-Read, write, delete, or update files in GridFS

mongooplog-Replay oplog entries between MongoDB servers

mongotop-Monitor read/write activity on a mongo server

3、基本概念

1)数据库

一个mongodb中可以建立多个数据库。

MongoDB的默认数据库为"db",该数据库存储在data目录中。

MongoDB的单个实例可以容纳多个独立的数据库,每一个都有自己的集合和权限,不同的数据库也放置在不同的文件中。

2)文档

文档是一个键值(key-value)对(即BSON)。MongoDB 的文档不需要设置相同的字段,并且相同的字段不需要相同的数据类型,这与关系型数据库有很大的区别,也是 MongoDB 非常突出的特点。

3)集合

集合就是 MongoDB 文档组,类似于 RDBMS (关系数据库管理系统:Relational Database Management System)中的表格。

集合存在于数据库中,集合没有固定的结构,这意味着你在对集合可以插入不同格式和类型的数据,但通常情况下我们插入集合的数据都会有一定的关联性。

4、基本框架

参考:http://www.iteye.com/news/24836

5、分片

为何需要水平分片

1) 减少单机请求数,降低单机负载,提高总负载

2) 减少单机的存储空间,提高总存空间。

下图一目了然:


mongodb-个人学习总结_第1张图片

mongodb sharding 服务器架构

mongodb-个人学习总结_第2张图片

1) mongos 路由进程, 应用程序接入mongos再查询到具体分片。

2) config server 路由表服务。 每一台都具有全部chunk的路由信息。

3) shard为数据存储分片。 每一片都可以是复制集(replica set)。

6、主从机制

1)选master

通过心跳来同步节点间信息并触发选举。

MongoDB选举和复制协议基于Raft协议,正确性得以保证

在Raft基础上,扩展了选举和复制协议,方便使用和运维

选举规则:

选举超时包括一定随机性,减少平票的可能性

同一任期(Term),只为一个候选人投票

一个任期内,得到大多数投票,则成为主结点

只有当候选人的操作日志至少跟投票人一样新时,才投赞同票

2)主从同步数据

(1)intial sync 全量同步

同步集合数据(耗时)

拉取oplog并重放

建立索引(耗时)

拉取oplog并重放

(2)replication 增量同步

不断拉取master上的oplog并重放

你可能感兴趣的:(mongodb-个人学习总结)