MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。
Mongo的概念:
database:数据库
collection:集合(类似于关系数据库中的表)
document:文档(类似于关系数据库中的行记录)
field:域(类似于关系数据库中的字段)
index:索引
primary key:主键(在没有指定的情况下mongo自动将_id作为随机主键)
简单的命令:
show dbs (查看所有的数据库)
use test (切换到test数据库,没有的话则创建)
db.col.insert({"name":"宇宙","age":36000000}) (在col集合中插入一个简单的json Document)
db.col.find({"name":"宇宙"}) (在col集合中查询一个name为‘宇宙’的文档)
运维:
mongo的主从机制保证性能稳定,数据安全,任何节点都可以在主节点宕机的情况下进行自动切换,保证正常提供数据功能;
当一个DB或者集合(Collection)数据量过大时(存储空间超过硬件的设置,甚至超过允许的合理内存时)会导致数据的读取性能下降,影响业务扩展的能力;此时,MongoDB会出现卡顿,甚至查询耗时过长,导致业务系统出现异常,单机的性能达到了瓶颈;
为解决上述问题,mongo推出了多机器部署分片集群策略:
mongo路由--config servers--shard,
mongos是路由,提供给客户端进行读写数据的封装,并将数据存储的位置进行分配存储;
config-server是路由的具体配置信息,和数据的存储索引
shard是真正的数据存储位置,一般有多个,每个shard有多个chunk(块)组成;
chunk的大小默认是64M,当存储数据超过这个值的时候,会默认记性拆分为两个chunk存储在shard中,以此类推;
对于同一个集合的数据来说,可能分布在不同的shard中;
分布策略根据key值的划分存储有【范围】和【哈希】两种 :
对于100~1000这种的数据可以使用范围策略;
对于想要数据进行均匀分布的情况可以采用哈希策略;
具体要求可以根据业务功能进行数据策略存储的选择;