01 键值数据库的基本架构
本篇重点:通过SimpleKV了解KV数据库的基本架构
Redis: 键值DB
从SimpleKV入手学习Redis
SimpleKV | Redis | |
---|---|---|
数据模型 | key:value组成的KV键值对 key-type: String value-type: 基本数据类型(int、double等) |
KV键值对 value-type: String、哈希表、列表、集合等 |
操作接口 | PUT/GET/SCAN/DELETE | .. |
KV存储位置 | 内存 | 内存 |
基本组件 | 访问框架、索引模块、操作模块、存储模块 | .. |
访问模式 | 函数库调用(dll)、网络框架(Socket) (RocksDB用函数库调用,Memcached、Redis用网络框架) |
网络框架——“单线程、高性能” |
索引模块 | 哈希表、B+树、字典等 (Memcached、Redis用哈希表,RocksDB用跳表) |
哈希表 |
持久化功能 | 文件形式存储内存中的KV | AOF、RDB |
Q-A:
-
KV保存在内/外存的区别?
内存:优点——读写快,缺点——掉电数据丢失
外存:优点——避免数据丢失,缺点:慢,速度受限于磁盘 -
如何根据不同场景选择KV的存储位置?
缓存场景:要求快速访问但允许数据偶有丢失——内存
Memcached/Redis都是内存键值DB -
两种访问模式——函数库调用/网络框架中,网络框架需要考虑的问题?
a. 网络连接的处理(连接/断开/重连)
b. 网络请求的解析(接口)
c. 数据存取的处理(单/多线程,多进程)——IO模型设计 -
索引模块:Redis采用哈希表作为索引的原因?
内存的高性能随机访问特性可以很好匹配哈希表O(1)的操作复杂度
-
操作的逻辑步骤
GET/SCAN: 根据Key返回value值
PUT/DELETE: a. 新写入/删除KV
b. 分配/释放内存
图片来源于极客时间专栏《Redis核心技术与实战》