最近业务可能会用到mongodb,因此将mongodb的一些特性和常用命令整理一下。
mongodb是一种非关系型数据库中最像关系数据库的,但我用mongodb仍然只把它当做KV存储,其他的关系一概不做,对于关系,还是让MySQL去做吧!关于mongo集群的搭建已经有运维帮我搭建好了,我就直接用了,但是在用之前,了解mongo集群的搭建十分有必要。
关于Mongos,Mongod
Mongos:起着路由的作用,根据分片key找到数据所存放的分片位置
Mongod:数据存放的位置
关于索引
索引在任何数据库都起着至关重要的作用,没有索引的数据只能是一堆杂乱无章的集合,在mongo的集合中,可以创建索引,创建索引的命令是ensureIndex
创建索引
mongos> use test switched to db test mongos> db.log.ensureIndex({"id":1}) //成功信息,如果索引已经存在,则会失败
这里用了use命令,use是选择数据库,如果数据库存在则会切换到该数据库,不存在则会进行创建。
还可以创建唯一key
mongos> db.log.ensureIndex({"id":1},{"unique":true})
创建唯一key的时候如果有重复的,还可以消除重复,但并不推荐
mongos> db.log.ensureIndex({"id":1},{"unique":true,"dropDups":true})
同时也可以创建复合做引
mongos> db.test.ensureIndex({"id":1,"content":1},{"unique":true})
如果需要在线上增加索引,就需要在后台创建索引了,可以使用
mongos> db.test.ensureIndex({"id":1}, {background:true});
删除索引
有创建就有删除,上面我们创建了id索引,那么删除索引的命令是
db.test.dropIndexe({"id":1})
还可以一次性删除所有的索引
db.test.dropIndexes()
分片
设想一个情景,当你的数据库大小已经达到TB级别了,一台机器存储全量对磁盘和内存都存在很大的压力,一个比较好的方案是将这些数据分摊到多个机器上面,在使用mysql我们可能会这样做:指定一个字段,将这个字段进行哈希,然后根据哈希值映射到不同的机器,这样就达到了多台机器存储的目的了。mongo的分片与此类似,我们可以指定一个片键让mongo根据这个片键进行自动分片,免去了手动在业务里面分片的操作,整个数据库就好像是存储在同一台机器上一样。
添加分片
mongos> db.runCommands({"addshard":"localhost:10000","allowLocal":true})
开启数据库分片
我们只是添加分片了,但是数据库还没有分片
mongos> db.runCommands({"enablesharding":"tests"})
PHP的使用
由于我使用的语言是php,因此会有这么一个小段落。php推荐使用MongoDB扩展,这个扩展最初使用起来可能会比较困难,但是习惯了之后会发现这个扩展用起来非常灵活。
赞赏微信赞赏
支付宝赞赏