Hash存储模型、B-Tree存储模型、LSM存储模型介绍

每一种数据存储系统,对应有一种存储模型,或者叫存储引擎。咱们今天要介绍的是三种比较流行的存储模型,分别是:redis

  1. Hash存储模型
  2. B-Tree存储模型
  3. LSM存储模型

不一样存储模型的应用状况

一、Hash存储模型数据库

  • redis
  • memcache

二、B-Tree存储模型缓存

  • MySQL(以及大多数的关系型数据库)
  • MongoDB

三、LSM树存储模型异步

  • HBase
  • RocksDB

不一样存储模型介绍

一、Hash存储模型

Hash存储模型其实就是HashMap(哈希表)的持久化实现。这种模型的特色是与HashMap有密切关系的。咱们知道HashMap能够支持:put(key)增长/修改、delete(key)删除、get(key)随机获取操做,可是HashMap不支持get(1)这样的操做。由于HashMap是无序的,不支持顺序扫描。针对put、get操做,它的时间复杂度是O(1),也就是说读写速度都很快,因此针对单个Key的操做是很是快速的。若是咱们在应用中无需遍历数据,Hash引擎是很是合适的。学习

image

首先,经过key,找到对应的文件编号。这个检索的过程,是经过HashMap来实现的。线程

其次,经过文件编号找到存储中的文件日志

再者,经过value长度和位置找到对应的行数据blog

最后,读取出value内容索引


二、B-Tree存储模型

B-Tree存储模型因为是树状结构存储,因此,它是不支持随机读写的。就像咱们学习二叉树时,查找数据得经过遍历树的方式来查找数据。内存

image

上图是一种典型的B-Tree存储索引。叶子节点保存了每行的完整数据,非叶子节点保存了索引信息。数据在每一个节点都是有序存储的,但查询数据的时候,须要从根节点遍历,而后根据二分查找直到找到叶子节点。若是数据再也不内存中,须要从磁盘中读取,并加载到缓存。B+树的根节点是常驻内存的,最多须要h-1次磁盘IO,复杂度为O(h) = O(logdN)。修改操做首先要记录提交日志,而后在修改内存中的B+树。

三、LSM树存储引擎

LSM树的思想很容易理解,就是将数据的新增、修改增量数据先保存在内存中,到达指定的大小限制后将修改操做批量写入到磁盘。读取时,须要合并磁盘中的历史数据和内存中最近的修改操做。LSM的优点在于有效地随机写入问题,但读取可能须要访问较多的磁盘文件。

image

  • Level 0 :日志/内存
    • 先写入预写日志,再写内存
    • 写入日志是为了保障可用性
  • Level 1:日志/内存,当Level 0写入达到阈值,经过异步方式将部分数据刷写到硬盘上
  • Level 2:合并,因为不断刷写会产生大量小文件,这样不利于管理和查询。须要在合适的时机启动一个异步线程进行合并操做生成一个大文件
相关文章
相关标签/搜索