Mmkv(Memory Key-Value database/cache)#

license code-top C++ standard


linux-build


version commit-date


Introducation#

mmkv是一个基于内存键值型数据库(或缓存),支持多种数据结构,包括

  • 字符串(string)

  • 列表(list)

  • 有序集合(sorted set)

  • 无序集合(hash set)

  • 映射(map)

暂时没有考虑针对个别数据类型进行特化,比如满足一定的条件,list可以采用局部性更好的动态数组而不是链表等。

Schedule#

现在该项目还处于初级阶段,只是个单纯支持多个数据结构的单机单线程服务器, 尽管要支持多线程是较为简单的(因为kanon支持mutilthread-reactor),但是现在我暂时不关注这方面。

Server#

  • [x] 支持string并实现其相关命令

  • [x] 支持list并实现其相关命令

  • [x] 支持sorted set并实现其相关命令

  • [x] 支持map并实现其相关命令

  • [x] 支持hash set并实现其相关命令

  • [x] 支持LogRecovery(目前仅支持request log)

  • [x] 实现key的expiration管理(包括是否允许设置过期时间,删除过期时间,过期键的检测策略)

  • [x] 实现key的replacement管理(包括是否配置最大内存占用,达到最大内存占用时的替换策略)

  • [x] 支持多线程处理请求

  • [x] 支持分布式存储(暂时不完整)

  • [ ] 支持Raft一致性算法,实现高可用

CLI#

  • [x] 实现translator将输入行翻译成MMBP request

  • [x] 能够输入命令(command)和参数(arguments)与mmkv server进行交互

  • [x] 能够对用户输入的命令的提示(hint),历史(history)浏览,以及补全(completion)

  • [x] 实现ternary-tree以优化自动补全

  • [x] 支持通过!command arguments执行shell命令

  • [x] 对于输入的命令大小写不敏感(可以识别,提示,补全)

Client API#

参考mmkvc

Build#

CMake#

mkdir build
cd build
cmake ..
cmake --build . --target mmkv-cli --parallel $(nproc)
cmake --build . --target mmkv-server --parallel $(nproc)

Shell Script#

为了避免CMake的命令比较长,也可以通过以下脚本编译:

cd bin
chmod u+x build.sh
./build.sh mmkv-cli
./build.sh mmkv-server