文章目录

  • 数据模型
  • 操作接口
  • 数据存储
  • 内存
  • 外存
  • 基本架构
  • 访问模块
  • 索引模块
  • 操作模块
  • 重启恢复
  • SimpleKV VS Redis
  • 架构层
  • 两大维度,三大主线


数据模型

键值数据库的基本数据模型是key-value模型。

  • key:一般都是String类型
  • value:不同的键值数据库一般区别在value
  • Memcached的value为String类型
  • Redis的value可以为String、哈希表、列表、集合等。

Redis因为支持更广泛的类型的value,而在实际场景中受到了更多的应用。

操作接口

三种基本操作

  • PUT:写入或更新一个key-value对,有的叫SET
  • GET:根据key获取value
  • DELETE:根据key删除key-value对
  • SCAN:根据一段key返回相应的value值

数据存储

内存
  • 优点:速度快,百ns级别
  • 缺点:一旦掉电,数据丢失
外存
  • 优点:避免数据丢失
  • 缺点:磁盘的慢速读写,几ms级别

缓存场景下的数据需要能快速访问但允许丢失,用于此场景的键值数据库通常采用内存保存键值数据。

基本架构

键值数据库根据什么建立索引的_数据


分为访问模块、操作模块、索引模块、存储模块四部分。

访问模块
  • 通过函数库调用的方式供外部应用使用
  • 通过网络框架以Socket通信的形式对外提供键值对操作
索引模块

通过索引让键值数据库通过key找到value的存储位置,进而执行操作。
索引的类型有哈希表、B+树、字典树等

  • Memcached和Redis采用哈希表作为key-value索引
  • RocksDB则采用跳表作为内存中key-value的索引

内存类键值数据库采用哈希表作为索引,键值数据基本都是保存在内存中的,内存的高性能随机访问特性可以很好的与哈希表O(1)的操作复杂度相匹配。

在Redis中,由于value存在不同的数据结构,所以需要二次定位,同时value也是一种高效的数据结构,提高定位效率。

操作模块
  • GET、SCAN操作,根据value的存储位置返回value值即可
  • PUT 一个新的键值对数据,为该键值分配内存空间
  • DELETE删除键值对,释放内存空间,由分配器完成
重启恢复

通过持久化功能来提供重启恢复。将键值数据调用本地文件系统的操作接口保存在磁盘上,但是需要考虑保存时机

  • 每个键值对,都落盘操作,每次都要写盘,所以性能影响较大
  • 周期性落盘,有丢失数据的风险

SimpleKV VS Redis

架构层

键值数据库根据什么建立索引的_键值_02

两大维度,三大主线

键值数据库根据什么建立索引的_键值_03