暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

原创|浅析各类数据库存取策略

DLab数据实验室 2020-10-09
107

国庆节快乐~点击上方文字关注我们哦


零星的搞了很久的数据库,包括关系数据库、图数据库和键值数据库,今天先来抛砖引玉做个对比。
数据库中比较核心的技术无非以下三个方面:查询、事务、存储。今天先来进行存储策略的对比。



关系数据库存取策略



元组读写过程

  • 读取元组
    • 构建表信息和元组模式(每个进程的本地内存cache中)
    • 从共享缓冲池中读取元组
      • 有:
        跟模式信息解析属性值
      • 无:
        从文件块读取元组数据到缓冲池,再从缓冲池读取元组
    • 文件块在磁盘存储,不同介质的磁盘由存储介质管理器来适配对上层提供统一接口
  • 写出元组
    • 找到合适的有空闲空间的缓冲块
      • 空闲空间映射表,加快缓冲块空闲空间的查找
    • 将元组写入共享缓冲池中的缓冲块
    • 记录最近插入/使用的缓冲块块号(对于单个进程尽可能将数据写入一个缓冲块中)
    • 合适时间将缓冲块刷回到存储介质中




图数据库存取策略





  • 读取邻接节点
    • 免索引邻接(Neo4j/OrientDB)
      • 源节点中存储了关系地址,关系字段又存储了原节点和目标节点地址
    • 全索引(ArrangoDB)
      • 节点字段中对id创建哈希索引
      • 关系字段中,源节点和目的节点都创建了哈希索引
      • 查找某个节点的邻接节点,通过索引可以快速定位
  • 存储关系和节点
    • 原生图存储
      • 节点和关系存储实际的物理地址(计算出的物理地址)
    • 非原生存储
      • 通过相应的适配器接入不同的存储引擎
      • 关系数据库
      • K-V存储



键值数据库存取策略




  • 写入数据(K-V存储的写效率远高于读效率)
    • 根据记录的key值有序存储的
    • Kv数据库在存储数据时,相邻的key值在存储文件中是依次顺序存储的(可以自定义key大小比较函数,默认通过skiplist来实现)
    • WAL
      • 当应用写入一条Key:Value记录的时候,会先往log文件里写入,成功后将记录插进Memtable中,这样基本就算完成了写入操作
      • 因为一次写入操作只涉及一次磁盘顺序写和一次内存写入,因此写入速度极快
    • 在每层compaction的时候进行合并/键值的更新等操作
  • 读取数据
    • 原则:
      读取最新的数据
    • 首先从MemTable中读取,没有则从Immutable MemTable中读取,依次Level0/1/2读取
先讲这么多,抛砖引玉,后续继续进行深入分析。
                                长按二维码识别关注




文章都看完了不点个 吗

文章转载自DLab数据实验室,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论