MongoDB 介绍
国内官网网站:http://www.mongoing.com/
github : https://github.com/mongodb
MongoDB是一个可扩展、开源、表结构自由、用C++语言编写且面向文档的数据库,在Web应用程序提供高效性能、高可用性且易扩展的数据存储解决方案。
MongoDB 是一个介于关系数据库和非关系数据库直接的产品,是非关系数据库中功能最丰富、最像关系数据库的NoSQL数据库;它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,可以实现类似关系数据里单表查询的绝大部分功能,切还支持对数据建立索引。
索引类型:
单键索引,多建索引 {x:1,y:1}
数组索引:["apple","lemon"]
全文索引: "i am a little bird."(中文)
地理位置索引: 2D
MongoDB还支持Google提供的MapReduce并行编程模式,为大数据分析提供了强有力的保障。
MongoDB同时提供了与Hadoop的接口,与其它第三方数据分析工具完美结合。
关系型数据库(MySQL) | MongoDB |
database | database |
table | collection |
row | document/object |
SQL数据库 | NoSQL数据库 |
实时一致性 | 简单便捷 |
事务 | 方便扩展 |
多表联合查询 | 更好的性能 |
基本单元:
关系数据库---行
MongoDB --document(用于JSON格式类似的键值对来存储,MongoDB叫BSON对象)
MongoDB 日志功能 Journaling
对数据库的增、删、改 操作会记录在日志文件中。每100ms将内存中的数据刷到磁盘上,如果意外停机,在数据库重新启动时,MongoDB 通过Journaling日志功能恢复。
MongoDB 复制集 Replset (冗余)
一个复制集在生产环境中最少需要3台独立机器,主节点(primary),次节点(secondary),仲裁节点(只负责选出主节点)
支持 备份、自动故障转移,
MongoDB 支持自动分片 Sharding(扩展)
分片功能:实现海量数据的分布式存储
分片通常与复制集配合起来使用,实现读写分离、负载均衡,
常用命令:
mongod 启动数据库实例,负责数据库创建、删除等各项管理工作,运行在服务器端为客户端提供监听。
mongo 进入交互模式对数据库系统进行管理。
mongodump 创建BSON dump 文件的方法 例如:mongodump --port 27017 --db db1 --out /tmp/db1
mongoexport 将MongoDB数据实例中的数据导出来生成JSON 或CSV文件的工具 ; 例如 mongoexport --port 27017 --db db1 --collection t1 --out /tmp/t1.json
mongoimport 将JSON或CSV文件内容导入到MongoDB实例中的工具; 例如 mongoimport --port 27017 --db db1 --collection t1 --file /tmp/t1.json
mongos 是分片中用到的进程,所有应用程序端的查询操作都会先由它分析,然后将查询定位到具体某一个分片上,作用与mongod 类似,客户端的mongo与它连接。
mongofiles 提供了操作MongoDB分布式文件存储系统的命令行接口; 例如mongofiles --port 21707 --db mydb1 --local /tmp/123.txt put 123.txt (将/tmp/123.txt 上传到数据mydb1 中保存)
mongostat 提供了一个展示当前正在运行的mongod实例状态工具,提供的数据只与运行的mongod或mongos 的实例相关。
mongotop 提供一个分析MongoDB实例 在读写数据张的时间的跟踪方法。它提供的统计数据在美国collection 级别上。
mongorestore
mongooplog
MongoDB 适合的业务
Web应用程序
缓存系统
日志分析系统