十分钟了解MongoDB
今天写写 MongoDB的事情。这货是一个document-orientied, 基本上使用的json进行交互的。他把那个形式很像json的东西叫做BJSON. 里面有一些mongoDB自己定义的数据类型。这种数据形式在传输存储很方便。
首先介绍一下MongoDB的数据结构
-
database : 这个和mysql中的database一致。 默认使用的local, 可以自己创建新的。例如 在shell中写 db.xxx 然后就自动创建了xxx 这个collection
-
collection: 这个概念和mysql中的table保持一致。
-
document: 这个和mysql里的row或者 record保持一致。
这个是MongoDB的三个最主要的结构。
下面是如何使用。
下载安装
首先去 www.mongoDB.org 上下载一个mongoDB的最新版。然后解压到某个目录。然后使用命令行进入到该目录下。
创建 数据存储文件夹,这里可以直接创建一个 /data/db的文件夹(mkdir -p /data/db)。然后在命令行里执行如下命令启动mongodb server.
1 | mongod --dbpath ./data/db |
这样mongoDB就启动了,一般端口为 27017. 你可以使用help来修改Port等。这里就不过多介绍。
然后重新开一个命令窗口,使用命令进入到该目录下,执行下面语句启动mongoDB client.
1 | mongo |
如果使用的都是默认端口,这里就可以正常启动了。如果你修改了mongoDB server的端口,这里需要改成一致的。
数据库CRUD(Create, Retrieve, Update, Delete)操作
下面就是命令行选择database, 创建collection, 存储document。首先:
1 | db |
然后是数据库的操作了。
插入
1 | var a = {"value":1,"value2":['a','b']} |
查看数据
1 | 获取全部数据 |
更新操作
1 |
|
删除操作
1 | db.xxxx.remove({"value":1}) |
这里看起来非常简单。
结束语
MongoDB的强大之处在于 JSON串里想写什么就可以写什么。相同的collection中document可以完全不相同。(但是为了后期的维护,还是尽量相同。)这是稀疏数据库的一大优势。
建索引MongoDB有很多种,可以建立unique 索引, TTL 索引(数据会过期失效,默认为此索引), 多列组合索引,空间索引,全文索引和hash索引。这里的多列索引和mysql的一致。对于全文索引,mongoDB建议不要在生产环境(线上环境)中使用,因为这个建索引很慢,性价比不高。
对于mongoDB来说,他的索引可以使用{“backgroup”:true}来进行后台异步创建,也可以使用前台索引。但是前台索引会对性能造成极大的影响,所以mongoDB官方文档建议新起一个mongoDB server的实例进行创建。然后使用副本启动的方法将创建好的索引作为副本启动。
对于mongoDB,安全性做的比较粗略。也是对于操作,对于database等特殊数据需要分配权限。因为没有视图等概念,这些安全性做的比mysql来说粒度大了一些。但是mongoDB支持SSL方式访问,也支持kerberos认证。不过Kerberos认证现在只有微软那边在用,之前K3,K4被破,人心惶惶。现在不知道情况如何。
今天就先介绍这么多吧。