1.MongoDB的基本特点
- 非关系型数据库,基于
Document data model
(文档数据模型) - MongoDB以
BSON
(BinaryJSON) 格式存储数据,类似于 JSON 数据形式 - 关系型数据库使用
table
(tables of rows)形式存储数据,而MongoDB使用collections
(collections of documents) - 支持 临时查询(
ad hoc queries
): 系统不用提前定义可以接收的查询类型 - 索引通过
B-tree
数据结构, 3.2版本的WiredTiger 支持log-structured merge-trees(LSM)
- 支持索引和次级索引(
secondary indexes
): 次级索引是指文档或row有一个 主键(primary key
)作为索引,同时允许文档或row内部还拥有一个索引,提升查询的效率,这也是MongoDB比较大的一个特点 - 无架构(
schema-less
) - MongoDB中的
document
相当于关系型数据库中的row
;document
的集合称之为collection
, 相当于关系型数据库中的table
![](https://img.haomeiwen.com/i1203223/fb6c32bf7794d4a5.jpg)
2.副本(Replication)
MongoDB通过拓扑学(replica set
副本集) 提供数据库副本。
副本集的功能:
- 副本集将数据分布在2个或多个机器上,用于自动故障转移(
automatic failover
)和冗余 - 扩大数据库的读取能力(scale database reads),这对读入密集(
read-intensive
)的应用,可以通过副本集群方式分散数据库的读取
包含MongoDB服务的副本集通常分布在分散的物理设备上,通常称之为 node
(节点):
- 在特定的时间,某个副本集作为主节点(primary node), 其余的副本集作为次级节点(secondary node)
-
primary node
: 支持读,写 -
secondary node
: 只支持读取 - 副本集最大的特点就是支持自动故障转移,如果主节点出错,则某个次级节点将变为主节点,等到出错节点修复,将自动变为次级节点
![](https://img.haomeiwen.com/i1203223/8be6d757f458b05e.png)
3.速度和稳定性(speed and durability)
在数据库领域,speed和durability存在一个相反的关系,write speed
可以理解为 在给定时间单位帧inserts
, updates
, deletes
的容量。
durability
表示确保写入操作变为持久数据的可靠级别。
数据库设计者经常需要在读写速度和稳定性之间做出平衡决定。MongoDB这2者之间的平衡在于 写入的语义(write semantics) 和 是否开启日志(enable journaling)
4.规模缩放(Scaling) 和 分片(shard)
分为:
- 垂直缩放(
vertically scaling
): 比如更快的磁盘读写速度,更多内存,更强大的CPU - 水平缩放(
horizontally scaling
): 也称之为scaling out
, 比如增加设备的数量
MongoDB是的水平缩放可控,通过基于范围分区机制(range-based partitioning mechanism), 也称之为sharding
(分片),自动的掌握数据在不同节点的分布。除了基于范围的分片机制,还有基于 hash-
和 tag-based
的分片机制。
分片系统处理其它的分片节点,同时使用自动故障转移。独立的分片由至少包含2个节点的副本集组成,这样确保了单节点失败时的自动修复
更多关于scaling可以参考这篇文章: How to scale a Nodejs app based on number of users
4.命令行工具
MongoDB提供了很多命令行工具:
-
mongodump
和mongorestore
: 用于备份和修复数据库,mongodump将数据库以原生的BSON
格式存储数据库数据,因此最好只用于备份,优势在于可热备份(hot backup), 然后mongorestore
能够很容易的恢复 -
mongoimport
和mongoexport
: 导入和导出JSON
,CSV
,TSV
数据。mongoimport
能够很好的用于初始数据的导入 -
mongostat
: 类似于iostat
,这个工具用于轮询MongoDB,系统提供有用的统计(stats
),包括每秒操作次数(inserts, queries, updates等等操作),查看虚拟内存的分布,连接服务器的数量 -
mongotop
: 类似于top
, 这个工具轮询MongoDB,显示读取和写入每个collection的总时间 -
mongoperf
: 帮助理解磁盘操作当运行MongoDB实例时 -
mongooplog
: 显示MongoDB oplog -
Bsondump
: 将BSON文件格式转换为人类可读的格式,比如 JSON
网友评论