Skip to content
A key-value database which is based on c++
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
conf
src
.gitignore
CMakeLists.txt
README.md

README.md

flyDB

项目介绍

FlyDB: 一个基于C++语言实现的kv存储。支持以下特性:

1、多种数据类型。支持hash,string,set,list,sort list;其内部由跳跃表,字典,整数集合等数据结构实现。其中string类型是二进制安全的、字典支持自动扩容和缩容以及渐进式rehash、整数集合支持自动升级和降级。

2、支持RESP协议,RESP协议是一种与客户端通信的协议,具有二进制安全、可读性高的优点

3、支持多种持久化方式,包括快照型(FDB)、追加型(AOF)以及混合模式,其中FDB方式支持background save和直接save两种方式,background是将持久化工作交给子进程处理,这样主进程可以不阻塞的、持续的响应客户端命令。FDB save可以通过客户端发送命令保存或者自动触发。自动触发是指,在一定时间内写入次数大于指定的次数,便会触发save操作。当然,这里的时间和次数都可以通过配置来指定。AOF是指将当前数据库中的数据以命令的方式保存,并且支持AOF文件重写。持久化后,服务端响应的命令可以追加到AOF文件中。随着AOF执行,该文件可能会过大,当达到一定条件后(可以根据配置修改),便触发AOF重写,来缩小AOF文件大小,合理利用磁盘空间。在命令追加时,并不一定每次都同步到磁盘中,在此AOF支持三种方式:每秒同步一次,每次写都同步以及从不同步(可以通过配置修改)。混合模式是兼并FDB和AOF的优点,FDB文件小但是不够安全(因为两次save间隔的数据无法保存),AOF安全但是文件过大。所以在执行save时利用FDB重写,后续命令追加时利用AOF命令追加。这样便可以集合两者的优点。另外,由于aof相对于FDB更加耗费io性能,所以支持通过配置以及客户端命令的方式打开与关闭。同时,FDB也可以通过设置写入次数以及时间间隔都设置为0来关闭。

4、支持文件事件和时间事件。时间事件是指定期执行的事件以及周期执行的事件。文件事件是指网络事件,包括socket读/写/连接以及管道读/写操作。

5、支持background线程池。有一个固定线程池,专门用于处理一些文件操作,包括文件同步、文件关闭等。其中AOF中的EVERY_SECOND就用到了这里的background线程去做fsync操作,彻底将主进程从这种耗时操作中解放出来。

6、支持多数据库实例。最多支持4个数据库实例,客户端可以通过select命令进行选择,每个实例间互相独立,数据互不联通。

7、支持过期键设置。过期键的删除有主动式和被动式两种方式结合实现。被动式即在访问时才去删除,这样对内存是不友好的、但对cpu却是友好的。主动式则是按照一定规则集中对过期键进行处理,由于集中处理对cpu不友好、但是对内存却是友好的。所以这里采用了两者结合的方式

DOING: 主从复制

TODO: 1.Memory Pool 2.选举 3.集群分片

You can’t perform that action at this time.