mongodb 常用命令

最近业务可能会用到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扩展,这个扩展最初使用起来可能会比较困难,但是习惯了之后会发现这个扩展用起来非常灵活。

赞赏

微信赞赏支付宝赞赏

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注