文章目录
- 数据模型
- 操作接口
- 数据存储
- 内存
- 外存
- 基本架构
- 访问模块
- 索引模块
- 操作模块
- 重启恢复
- 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
架构层
两大维度,三大主线