文档型数据库

文档型数据库

简介

1. MongoDB:文档型数据库,按照文档的形式存储
	a. Web App(用的较多)
2. 数据库管理系统(DBMS)
	a. 需要把具体如何实现的如 增删改查 隐藏在系统软件中,对用户软件透明

基础概念:

	a. 文档(数据模型)   【关系数据库的数据模型是表格】
		i. 用<key/attribute,value>存放,json的格式
		ii. 一个文档里还可以包括子文档
		iii. 每个文档都有个_id,如果在一个文档中没有说_id是什么,数据库会自动分配一个,可以通过_id找到数据库的任何一个文档
		iv. 一个文档可以是做一个对象(json)
		
	b. 文档集(collection)
		i. 文档的集合(一个文档集可以视为一类对象)
		
	c. 数据库(database)
		i. 若干个文档集构成一个数据库
		ii. 部署在一个服务器上,【一般】一个数据库对应一个应用

文档的访问接口

	a. 插入文档
		i. db.foo.insert({"bar":"baz"})
			1) db:datebase      foo:collection
		ii. db.foo.batchinsert() 批量插入
	b. 查找文档
		i. db.blog.find()    [查blog文档集的所有文档]
		ii. Joe=db.people.findOne({"name":"joe","age":20});  [查people文档集特定属性的文档]
		iii. db.users.find({},{"username":1,"email":1})   [只返回users文档的username,email这两个属性、前面的空括号表明不限定如何查询条件,如果这里去掉后面两个属性就变成查询条件了]
		iv. db.users.find({"age":{"$gte":18,"$lte":30}})  【查年龄在18~30的用户文档】
		v. db.raffle.find({"ticket_no"}:{"$in"} :{ [725,542,390]}})
	c. 删除文档
		i. db.foo.remove()
		ii. db.mailing.list.remove({"opt-out":true})
		
	d. 更新文档
		i. db.users.update({"_id" : ObjectId("28h32j223e92e")},…{"$set" :  {"favorite book" : "War and Peace"}})     【$set指置换】
		ii. db.games.update({"game" : "pinball", "user" : "joe"},…{"$inc" : {"score" : 50}})

文档模型的设计思想

	a. 优点:每个元素都被视为对象(储存为json格式)

存储器件

3. 数据处理性能的宗旨
	a. 提高数据访问的局部性:
		i. 对磁盘/闪存而言
			1) 减少I/O的次数;
			2) 变随机访问为顺序访问。
		ii. 对内存而言
			1) 增加Cache的命中率
4. 数据库的基本存储架构
	a. 以页为单位存放数据。每一页为512bytes的整数倍,4KB到4MB。

索引:

	a. 对于非聚集索引,有些查询甚至可以不访问数据页。
	b. 聚集索引可以避免数据插入操作集中于表的最后一个数据页。
	
当然,众所周知,虽然索引可以提高查询速度,但是它们也会导致数据库系统更新数据的性能下降,因为大部分数据更新需要同时更新索引。

参考 https://www.cnblogs.com/ccsccs/articles/4243644.html

B-Tree
	a. B-Tree的平衡性
		i. 每个节点的大小固定(e.g. 4KB或8KB),因此最多只能容纳n个键和n+1个指针。
		
	b. 什么决定B-Tree的效率?
		i. 树的高度决定查询需要I/O次数。
		ii. 对于同样规模的数据,n越大树的高度越低。
		iii. 为了提高B-Tree的效率,我们需要增加n,即增加每个节点容纳键和指针的数量。
			1) 用简短的数据类型定义键的属性,e.g. smallint.
			2) 对B-Tree进行压缩。

猜你喜欢

转载自blog.csdn.net/weixin_41045344/article/details/84313001