-
Notifications
You must be signed in to change notification settings - Fork 0
Home
Conzxy edited this page Jul 14, 2022
·
6 revisions
mmkv
是一个基于内存的键值型数据库(或缓存),支持多种数据结构,包括
- 字符串(string)
- 列表(list)
- 有序集合(sorted set)
- 无序集合(hash set)
- 映射(map)
数据类型 | 实现 | 对应数据结构 | 源文件 |
---|---|---|---|
string | 支持动态增长的字符串 | mmkv::algo::String | algo/string.h |
list | 无哨兵的双向链表(暂时) | mmkv::algo::Blist | algo/blist.h, algo/internal/bnode.h, algo/internal/blist_iterator.h |
sorted set(vset) | AvlTree与哈希表共同实现, AvlTree允许键(权重)重复而member是unique的,基于这个特性和一些命令的实现需要哈希表提供反向映射 | mmkv::db::Vset | db/vset.h, algo/avl_tree.h, algo/internal/avl*.h, algo/internal/func_util.h, algo/dictionary.h |
hash set | 采用separate list实现的哈希表(支持Incremental rehash) | mmkv::algo::HashSet | algo/hash_set.h, slist.h, reserved_array.h, hash*.h, algo/internal/hash*.h |
map | 同hash set,不过元素类型是KeyValue | mmkv::algo::Dictionary | algo/dictionary.h, slist.h, reserved_array.h, hash*.h, algo/internal/hash*.h |
database instance | 以avl-tree作为list、基于separate-list实现的哈希表 | mmkv::db::MmkvDb, mmkv::algo::AvlDictionary | algo/avl_dictionary.h, algo/internal/avl*.h, algo/internal/tree_hash*.h, db/kvdb.h |
暂时没有考虑针对个别数据类型进行特化,比如满足一定的条件,list可以采用局部性更好的动态数组而不是链表等。
项目依赖于kanon和xxHash。
前者是我个人开发的网络库,后者是项目使用的哈希算法。
安装参考各自的github
页面中的README.md
。
git clone https://github.com/Conzxy/mmkv
cd mmkv/bin
export MMKV_BUILD_PATH=... # build目录的路径
# 或在~/.bash_profile中加上该句
chmod u+x release_build.sh
./release_build.sh mmkv_client
./release_build.sh mmkv_server
# Debug mode by following:
# chmod u+x build.sh
# ./build.sh mmkv_client
# ./build.sh mmkv_server