数据库管理系统(DBMS)
本课程围绕着系统软件开展
Today:文档数据库
基本概念(所存,即对象Object)
文档(数据)
文档是key-value的组合value相当于属性的取值
nested document(有的属性是array)
c.f.关系数据库(table)
这种文档数据库的表达方式c.f. OO(Object Oriented)变量的属性和方法
Object{Object{}c.f.Nested document}
Object即Document。
关系数据库不方便表达 嵌套
文档集:一个文档集可以视为一类对象
数据库:
若干个文档集构成一个数据库;
一个数据库对应一个应用
系统功能:访问接口(CRUD)
- Create
- Read
- Update
- Delete
“增删改查”
插入文档
db.foo.insert(("bar":"baz"))
Db:name of database
Foo:name of 文档集
文档集自动创建:直接插入即可
c.f.关系数据库的格式需要固定,所以文档数据库与之区别在于文档数据库直接插,格式不固定
查找文档
find
想要查满足我要求的所有文档
db.people.find()
:查people文档集的所有文档
findone({name:"joe",age:"20"})
给定查找条件
想查满足我要求的一个文档即可
db.people.findone()
查找文档:文档树
查询有username和email的所有
有查询需要单纯无法满足,用时了解即可
更新文档
可R可U
更新关键字(modifier):$inc
/$set
等
删除
db.persons.deleteMany()
实践课:mongoDB
Web应用的性能
Web应用的瓶颈一般是在数据库。
为什么webserver一般不会被卡?因为一个Server宕掉了,另一个server还在。
而数据库很难被复制成一个一个的
那什么限制数据库的性能呢?
CPU/Network/Disk(I/O)
为什么硬盘叫I/O,因为硬盘是外设。
影响单机数据库的性能瓶颈:Disk/IO。
服务器内带宽与服务器间的带宽类似,但数据访问的量是不一样的。
数据库性能的保证就是存储的效率。
所有处理数据的程序在涉及数据访问的时候,要充分利用数据访问的局部性。
局部性好,cache hit 高。
所以涉及数据访问的时候 都要考虑memory heirarchy.
数据库系统数据的存储
数据库也是以页为单位的,一般比磁盘的物理页的size大,将页理解成集装箱。
文档数据库访问文档的流程
例子:db.person.find({})
首先找到db.person这个文档集的文档在哪些页上。文档集c.f. File。
多级页表类比树状结构。
找一个个文档然后去对比。
这样很慢,那怎么快呢?实现快速查询–索引
文档的id是索引