MongoDB是一个开源的、面向文档的数据库管理系统,为全新的互联网应用的数据模型和伸缩性设计,
具有动态查询和辅助索引、快速原子更新一集复杂聚合,支持自动化灾备的复制,还有水平伸缩的分片集群等特性。
mongodb特性
- mongodb 数据是以文档(document)为单位,每个document相当于关系型数据库中表里的一行记录。
- document是json格式的
- mongodb 是无schema的。这意味着在插入数据之前,我们并不需要预先创建表;在应用的迭代过程中,也可以随时修改数据的结构;
- 支持复杂的动态查询,(在书中称为ac hoc查询,关系型数据库支持也支持这种查询);
- 支持主键索引和聚合索引
- 支持数据库复制特性,可复制集合(replica set)。在多个服务器上分布式存储数据,实现数据的冗余存储和自动灾备。
- 支持数据分片存储(sharding),将数据存储在多个服务器上
核心服务和工具
mongo实例是通过mongod的可执行文件启动的,mongod进程使用自定义的二进制协议从网络上接收命令。mongo的数据默认存储在/data/db的目录下,mongod可以有单机和可复制集群两种模式
常用的命令行工具
- mongodump 和mongorestore ——备份和恢复数据库工具。mongodump把数据保存为原生的BSON格式,因此适用于备份。这个工具的一大优点是适合热备,而且非常容易使用mongostore命令恢复。
- mongoexport 和mongoimport——导入或者导出JSON、csv、TSV格式的数据。mongoimport还可以导入大数据集合,只是经常需要在导入之前调整数据模型以便发挥mongodb的最大优势。此时最简单的导入数据方式就是使用自定义脚本。
- mongosniff —— 用于查看发送给数据库命令的嗅探工具,通常会把BSON转换为人类可读的shell语句
- mongostat—— 与iostat 类似,这个工具用来轮训mongodb,查看mongo服务的状态信息,包括每秒操作数(增删改查等),分配虚拟内存的数量,以及服务器的链接数量
- mongotop ——与top类似,显示它在每个集合里花费的读取和写入数据的时间总数
- mongoperf —— 了解mongodb实例磁盘的操作情况
- mongooplog—— 展示mongodb操作日志里的信息
- Bsondump 把bson文件转换为人可读的格式,包括json
mongo的应用场景
- 敏捷开发
由于mongo不需要定义schema,所以开发速度较快 - 日志分析工具,存储一些低价值的数据
- 缓存
mongo的限制
- 不能多表联合查询
- 不支持事务