java-dirty是一个只追加数据的数据存储

15-04-15 banq
              

java-dirty是一个轻量的只追加 append-only的数据存储,该存储用于记录保存事件,适合EventSourcing的存储。存储介质是文件,使用的Java NIO MappedByteBuffer用于快速读写。

java-dirty支持对象中原始类型,MappedByteBuffer提供的.putLong() 之类特性能够直接写入long到文件中。

创建一个存储很容易,使用 Class<?>作为参数:

Store<Event> eventStore = Store.of(Event.class).from("/path/to/file");

存储会注意到对象的偏移字节量,也会跟踪存储中的数据个数,这用于重新打开存储并且能知道有多少对象并发写操作。

假设有一个Event对象:

class Event {
  public int one, two;
}
<p>

事件的存储如下图,每个对象占8个字节,其中4个字节是整数字段:

在SSD闪存盘中,可以每秒插入4百万个对象,读取也是类似速度。

GitHub项目地址