【知识点总结】NoSQL数据库技术NoSQL基础部分
⼀、NoSQL相关概念
1、NoSQL定义
Not only SQL
2、时间单位
1s=10^3 ms=10^6 um=10^9 ns
3、存储数据单位
B、KB、MB、TB、PB、EB、ZB、YB
⼆、数据库分类
1、TRDB数据库
2、NoSQL数据库
1. 键值数据库
2. ⽂档数据库
3. 列族数据库
4. 图数据库
5. 其他数据库
3、NewSQL
三、
1、帽⼦定理
⼀致性
可⽤性
分区容错性
2、ACID
原⼦性
⼀致性
隔离性
持久性
3、BASE
基本可⽤
软状态
最终⼀致性
四、NoSQL存储模式
1、键值数据存储模式
基本要素:键、值、键值对、命名空间
操作:读、写、删除
流浪歌手的情人吉他谱
优点:简单、快速、⾼效计算
缺点:对值进⾏多值查功能很弱;缺少约束,意味着更容易出错;不容易建⽴复杂关系
2、⽂档数据存储模式
基本要素:键值对、⽂档、集合、数据库
操作:增删改查
优点:简单;相对⾼效;⽂档格式处理;查询功能强⼤;分布式处理
缺点:缺少约束;数据出现冗余;相对低效
3、列族数据存储模式
基本要素:命名空间、⾏键、列族、列
操作:读、写、删除
特点:擅长⼤数据处理;对于命名空间、⾏键、列族需要预先定义,列⽆须提早定义,随时可以增加;在⼤数据应⽤环境下,管理复杂,必须借助各种⾼效的管理⼯具来监控系统的正常运⾏;Hadoop⽣态系统为基于列族的⼤数据分析,提供了各种开发⼯具;数据存储模式相对键值数据库、⽂档数据库要复杂;查询功能相对更加丰富;⾼密集写⼊处理能⼒ 每秒⼏百万次的并发插⼊能⼒
4、图数据存储模式
基本要素:节点、边、属性、图
操作:建⽴、删除、更新、合并
特点;处理各种具有图结构的数据;应⽤领域明确;以单台服务器运⾏的图数据库为主;图偏重于查、统计、分析应⽤
5、其他数据存储模式
1、多模式数据库
2、对象数据库
3、⽹格和云数据库
NoSQL实践部分
⼀、MongoDB shell简单操作
1、启动
mongo
mongo 127.0.0.1:27017/admin
2、退出
轮回djexit
3、创建数据库
use 数据库名
4、查看数据库
show dbs
5、查看当前数据库中的集合列表
show collections
6、统计当前数据库信息
db.stats()
7、删除当前数据库
db.dropDatabase()
8、帮助指令
# 数据库操作
db.help()
# 集合操作
db.集合名.help()
# ⽂档操作
db.集合名.find().help()
9、查看当前数据库下集合名称
10、查看数据库⽤户⾓⾊权限
show roles
11、执⾏js⽂件
mongo shell_script.js
load(script_path)
⼆、配置⽤户账号和访问控制
1、⾓⾊概念
1. 数据库⽤户⾓⾊:read、readWrite
2. 数据库管理⾓⾊:dbAdmin、dbOwner、userAdmin
3. 集管理⾓⾊:clusterAdmin、clusterManager、clusterMonitor、hostManager
4. 备份恢复⾓⾊:backup、restore
5. 所有数据库⾓⾊:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
6. 超级⽤户⾓⾊:root
7. 内部⾓⾊:_system
read:允许⽤户读取指定数据库
readWrite:允许⽤户读写指定数据库
dbAdmi:允许⽤户在指定数据库中执⾏管理函数,如索引创建、删除,查看统计或访问system.profile
userAdmin:允许⽤户向system.users集合写⼊,可以指定数据库⾥创建、删除和管理⽤户
clusterAdmin:只在admin数据库中可⽤,具有所有分⽚和复制集相关函数的管理权限。
readAnyDatabase:只在admin数据库中可⽤,具有所有数据库的读权限
readWriteAnyDatabase:只在admin数据库中可⽤,具有所有数据库的读写权限userAdminAnyDatabase:只在admin数据库中可⽤,具有所有数据库的userAdmin权限dbAdminAnyDatabase:只在admin数据库中可⽤,具有所有数据库的dbAdmin权限。root:只在admin数据库中可⽤。超级账号,超级权限
2、⽤户操作
创建⽤户
use admin
user: 'root',
pwd: 'root',
roles: [{"role":"root", "db":"admmin"}]
})
exit
认证登录
mongo
use admin
db.auth('root','root')
mongo admin -u root -p root
删除⽤户
use admin
db.dropUser("root")
三、管理数据库和集合
1、给指定数据库添加集合并添加⽂档
db.集合名.insert({key:value})
2、删除指定数据库中的集合
db.集合名.drop()
石康钧
3、查询指定集合中的⽂档
db.集合名.find()
db.集合名.findOne()
4、更新⽂档
db.集合名.update({key:value},{$set:{key:value}})
5、删除⽂档
db.集合名.remove({key:value})
四、Find详细内容
1、语法
db.[Collection_Name].find({query},{projection})
db.[Collection_Name].find({query},{projection}).pretty() // 规整查结果的格式
query //查询条件设置:查询选择器
projection //键指定,指定需要返回的字段:投影操作
歌手李佳薇2、查询选择器
(1)选择器匹配灼眼的夏娜第三季片尾曲
db.[Collection_Name].find({<key1:value1>,{<key2:value2>,...}})
注意:⽆论传⼊多少个键值对它们必须全部匹配;查询条件之间相当于运⽤了布尔运算符and。
(2)范围查询
操作符意义符合
$lt less than<
$lte less than or equal<=我爱你一定爱到花都开了鸟儿把歌唱
$gt greater than>
$gte greater than or equal>= # 查询年龄介于25到30之间的⼈
db.persons.find({age:{$gte:25,$lte:30}})
(3)匹配数组
操作符作⽤
$in与任⼀搜索键匹配时,就返回该⽂档
$nin与任⼀搜索键不匹配时,就返回该⽂档
$elemMatch⾄少有⼀个元素满⾜所有匹配条件,就返回该⽂档
$all与所有搜索键匹配,就返回⽂档
$size查询指定长度数组(不能与⽐较查询符⼀起使⽤)
# 查询国籍是(不是)中国或美国的学⽣信息
db.persons.find({country:{$in:["USA","China"]}})
db.persons.find({country:{$nin:["USA","China"]}})
# 查询 80<=results<=85的⽂档
db.scores.find({results:{$elemMatch:{$gte:80,$lte:85}}})
# 查询喜欢看MONGODB和JS的学⽣
db.persons.find({books:{$all:["MONGODB","JS"]}})
# 查询第⼆本书是JAVA的学⽣信息
db.persons.find({"books.1":"JAVA"})
# 查询出书籍数量是4的学⽣
db.persons.find({books:{$size:4}})
(4)布尔查询
操作符意义备注
$ne不等于可以作⽤于单个值和数组
$not对查询结果求反不能放在外层⽂档;后⾯必须跟正则表达式或者⽂档