Giter Club home page Giter Club logo

mmkv's Introduction

Mmkv(Memory Key-Value database/cache)

license code-top C++ standard
linux-build win-build
version commit-date

Windows目前仅支持 mmkv-cli,即CLI Client

Introducation

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可以采用局部性更好的动态数组而不是链表等。

Schedule

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

Server

  • 支持string并实现其相关命令
  • 支持list并实现其相关命令
  • 支持sorted set并实现其相关命令
  • 支持map并实现其相关命令
  • 支持hash set并实现其相关命令
  • 支持LogRecovery(目前仅支持request log)
  • 实现key的expiration管理(包括是否允许设置过期时间,删除过期时间,过期键的检测策略)
  • 实现key的replacement管理(包括是否配置最大内存占用,达到最大内存占用时的替换策略)
  • 支持多线程处理请求
  • 支持分布式存储(暂时不完整)
  • 支持Raft一致性算法,实现高可用

CLI

  • 实现translator将输入行翻译成MMBP request
  • 能够输入命令(command)和参数(arguments)与mmkv server进行交互
  • 能够对用户输入的命令的提示(hint),历史(history)浏览,以及补全(completion)等
  • 实现ternary-tree以优化自动补全
  • 支持通过!command arguments执行shell命令
  • 对于输入的命令大小写不敏感(可以识别,提示,补全)

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

Usage

话不多说,简单部署下 mmkv-server

# port default is 9998
./mmkv-server -p [port]

然后通过 mmkv-cli 进行交互吧!

./mmkv-cli -h [host ip/domain name] -p [port]
# 进入mmkv的CLI交互环境
# 通过help查看命令
mmkv [...]> help

如有其他问题,请参考 文档

mmkv's People

Contributors

conzxy avatar

Stargazers

 avatar  avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.