文档型数据库

文档型数据库

简介

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

基础概念:

  • 文档(数据模型) 【关系数据库的数据模型是表格】

    • 用<key/attribute,value>存放,json的格式
    • 一个文档里还可以包括子文档
    • 每个文档都有个_id,如果在一个文档中没有说_id是什么,数据库会自动分配一个,可以通过_id找到数据库的任何一个文档
    • 一个文档可以是做一个对象(json)
  • 文档集(collection)

    • 文档的集合(一个文档集可以视为一类对象)
  • 数据库(database)

    • 若干个文档集构成一个数据库
    • 部署在一个服务器上,【一般】一个数据库对应一个应用

文档的访问接口

  • 插入文档

    • db.foo.insert({“bar”:“baz”})
      • db:datebase foo:collection
    • db.foo.batchinsert() 批量插入
  • 查找文档

    • db.blog.find() [查blog文档集的所有文档]
    • Joe=db.people.findOne({“name”:“joe”,“age”:20}); [查people文档集特定属性的文档]
    • db.users.find({},{“username”:1,“email”:1}) [只返回users文档的username,email这两个属性、前面的空括号表明不限定如何查询条件,如果这里去掉后面两个属性就变成查询条件了]
    • db.users.find({“age”:{“ g t e &quot; : 18 , &quot; gte&quot;:18,&quot; gte":18,"lte”:30}}) 【查年龄在18~30的用户文档】
    • db.raffle.find({“ticket_no”}:{"$in"} :{ [725,542,390]}})
  • 删除文档

    • db.foo.remove()
    • db.mailing.list.remove({“opt-out”:true})
  • 更新文档

    • db.users.update({"_id" : ObjectId(“28h32j223e92e”)},…{"KaTeX parse error: Expected 'EOF', got '}' at position 44: …War and Peace"}}̲) 【set指置换】
    • db.games.update({“game” : “pinball”, “user” : “joe”},…{"$inc" : {“score” : 50}})

文档模型的设计思想

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

存储器件

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

索引:

  • 对于非聚集索引,有些查询甚至可以不访问数据页。

  • 聚集索引可以避免数据插入操作集中于表的最后一个数据页。

    当然,众所周知,虽然索引可以提高查询速度,但是它们也会导致数据库系统更新数据的性能下降,因为大部分数据更新需要同时更新索引。

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

  • B-Tree
    • B-Tree的平衡性

      • 每个节点的大小固定(e.g. 4KB或8KB),因此最多只能容纳n个键和n+1个指针。
    • 什么决定B-Tree的效率?

      • 树的高度决定查询需要I/O次数。
      • 对于同样规模的数据,n越大树的高度越低。
      • 为了提高B-Tree的效率,我们需要增加n,即增加每个节点容纳键和指针的数量。
        • 用简短的数据类型定义键的属性,e.g. smallint.
        • 对B-Tree进行压缩。
  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值