一、首先,nosql:not only sql,指的是非关系型数据库。
关系型数据库中的表都是存储一些结构化的数据,每条记录的字段的组成都一样,即使不是每条记录都需要所有的字段,但数据库会为每条数据分配所有的字段。而非关系型数据库以键值对(key-value)存储,它的结构不固定,每一条记录可以有不一样的键,每条记录可以根据需要增加一些自己的键值对,这样就不会局限于固定的结构,可以减少一些时间和空间的开销。
结构化数据:固定的长度,固定的类型,固定的格式
非结构化的数据如avi,ppt,doc等
二、非关系型数据库的优点:
1.简单的扩展(以键值对的方式存储,结构比较灵活)
比如要在关系型数据库中为某一个记录扩展一个字段很不方便,必须要改表结构,而非关系数据库结构不固定,每条记录可以有不一样的键,可以根据需要增加一些自己的键值对
2.快速的读写
3.低廉的成本
4.灵活的数据模型
缺点:
1.不提供对SQL的支持
2.支持的特性不够丰富(比如没有事物的这些概念)
3.现有的产品不够成熟(相对于关系型数据库而言)
三、Mongodb中基本概念介绍:
文档(document)是MongoDB中数据的基本单元,非常类似于关系型数据库系统中的行(但是比行要复杂的多)
集合(collection)就是一组文档,如果说MongoDB中的文档类似于关系型数据库中的行,那么集合就如同表
MongoDB的单个计算机可以容纳多个独立的数据库,每一个数据库都有自己的集合和权限
MongoDB自带简洁但功能强大的JavaScript shell,这个工具对于管理MongoDB实例和操作数据作用非常大
每一个文档都有一个特殊的键"_id",它在文档所处的集合中是唯一的,相当于关系数据库中的表的主键
MongoDB数据类型有个比较特殊的地方:
mysql中是不能存放数组的,最多只能拼接成字符串存放进去,而Mongodb可以存放数组和内嵌文档:
数组 值的集合或者列表 {"arr": ["a","b"]}
内嵌文档 文档可以作为文档中某个key的value {"x":{"foo":"bar"}}
四、启动Mongodb命令:
mongod --dbpath E:\MongoDBDATA --rest(服务端)
mongo 127.0.0.1:27017/admin(客户端,默认连admin数据库)
(可以把这两个命令写成.bat文件)
五、Mongodb索引
创建普通索引,使用命令 db.collection.ensureIndex({key:1})
创建唯一索引,使用命令 db.collection.ensureIndex({key:1},{unique:true}),如果在某个key上面建立了唯一索引&#