一:一个键值数据库包含了什么/如何设计一个键值数据库?
原文:《01丨基本架构:一个键值数据库包含什么?》
设计一个键值型数据库时要考虑:
-
存哪些数据? => 数据类型。key大多为String,value可以多种多样,如Redis的string、set、hash…
-
可以对数据做哪些操作? => 操作模块。如put、get、scan、delete、set…
-
键值对保存在内存还是外存? => 存储模块。内存快但可能丢失(作缓存),外存慢但安全(作数据库)。
-
怎么访问? => 访问框架。动态库访问简单但功能弱,网络框架访问功能强大但复杂( 比如多线程时要考虑阻塞、并非问题)。
-
如何确定键值对位置? => 索引模块。Redis采用的是Hash索引。
-
内存的分配和回收? => 存储模块。
-
重启后如何快速恢复? => 存储模块的持久化机制。
-
如何实现分布式、高可用? => 高可用、高扩展模块。