MongoDB文档数据库介绍以及建立
传统关系型数据库(TRDB)需要对表结构进行预先定义和严格约束,这样会导致处理数据过程中技术更加繁琐,甚至执行效率会严重下降。在数据量达到一定量的规模后,TRDB反应迟钝,甚至使用户端界面无法打开。因此前人引入了文档数据库,避开对表结构的预先定义和严格约束,从而加快执行效率。
文档数据库存储结构的基本要素
1.键值对(Key-Value Pair)
键和值的组合,他们是一对一的映射关系,一个键只能对应一个值,而同个值可以对应多个键,例如"唐三:男",“唐昊:男”,但不能 “唐三:女”,“唐三:男”。
2.文档
文档就是有键值对构成的有序集。
3.集合
集合是由若干条文档构成的对象。一个集合对应的文档应该具有相关性。
4.数据库
文档数据库包括多个集合,在进行数据操作前,必须指定数据库名。
基本数据操作方式
1.写(Insert)命令
语法:db.collection_name.insert()
关于写的其他语法后续会说到。
2.读(Select)命令
语法:db.collection_name.insert()
3.改(Update)命令
语法:db.collection_name.update()
4.删(Remove)命令
语法:db.collection_name.remove()
文档存储的优缺点
1.优点
-
简单:没有数据存储结构定义要求,不需要考虑约束条件,从而提高读写响应速度。
-
相对高效:相对TRDB而言是高效的,以MongoDB为列,TRDB,最大并发支持操作时几千到几万条之间,而MongoDB是几万到几十万之间。
-
文档格式处理:文档数据库擅长基于JSON,XML,BSON。
-
查询功能强大:接近与SQL的查询功能。
-
分布式处理:文档数据库具有分布式多服务器处理功能,有很强的可伸缩性,给大数据处理带来了很多方便,可以解决PB和EB级的数据存储。
2.缺点
- 缺少约束:文档数据库为了追求效率牺牲了很多东西,比如说集合与集合之间的关系,当删除一条记录时,它不会像SQL那样会提示你这条数据被别的表使用,不能删除。
- 数据出现冗余:相对操作速度而言,出现一些合理的冗余是允许的,而SQL语言不会允许出现冗余。
数据库类型
(1) admin数据库:一个权限数据库,如果创建用户的时候将该用户添加到admin数据库中,那么该用户自动继承所有数据库权限。
(2) local数据库:这个数据库永远不会被负责,可以用来存储本地服务器单台服务器的任意集合。
(3) config数据库:当MongoDB使用分片模式时,config数据库在内部使用,用于保存分片的信息。
(4)test数据库:MongiDB安装后的默认数据库,可以用于数据库命令的各种操作,包括测试。
(5)自定义数据库:根据应用系统需要建立的业务数据库。
MongoDB数据库建立相关命令
在操作MongoDB相关命令之前需要安装MongoDB服务器,这里一位朋友的一篇文章写的很详细安装配置MongoDB
1.创建数据库use
> use goodsdb
switched to db goodsdb
use DATABASE_NAME
如果数据库不存在,则创建数据库,否则切换到指定数据库。
2.查看数据库show dbs
> show dbs
admin 0.000GB
goodsdb 0.000GB
local 0.000GB
test 0.000GB
show dbs
对于刚刚建立的goodsdb数据库并没有显示出来,原因是goodsdb数据库里没有任何内容。需要在goodsdb数据库里增加数据。
3.插入一条简单文档
db.goodsbaseinf.insert(
... {name:"MongoDB教程",price:32}
... )
WriteResult({ "nInserted" : 1 })
4.统计某数据库信息
> use test
switched to db test
> db.stats()
{
"db" : "test", //系统自带数据库
"collections" : 1, // 集合数量
"views" : 0,
"objects" : 3, //文档对象个数,所有集合的记录数之和
"avgObjSize" : 76.33333333333333, //平均对象大小
"dataSize" : 229, //当前库所有集合的数据库大小
"storageSize" : 36864, //磁盘存储大小
"numExtents" : 0, //所有集合的扩展数量统计数
"indexes" : 1, //已建立索引数量
"indexSize" : 36864, //索引大小
"ok" : 1
}
5.删除数据库dropdatabase()
> use goodsdb
switched to db goodsdb
> db.dropDatabase()
{ "dropped" : "goodsdb", "ok" : 1 }
执行该命令对应的数据库文件将会消失,一般情况具有不可恢复性。所以不要随便执行该命令