开篇
PalDB在我的工作中被大面积使用,场景我就不描述了,这里我只想直白的说一句,这个系列的PalDB博文绝对是国内最详细的,如果有兴趣非常建议收藏了好好看看。
整个系列的文章会讲清楚PalDB的存储结构,写过程,读过程这三个核心过程,然后会创新的写明我们这边大神是如何解决线程不安全问题。网上绝无仅有,感谢组内大神!!!
PalDB介绍
PalDB 是一个由 LinkedIn 开源并使用 Java 编写的一次写入键值存储数据库。当存储创建后所有的操作都是禁止的,它是只读的。这样做的目的是提升读操作的性能并降低内存占用。LinkedIn 的建议是使用它来存储 side data,他们对于 side data 的定义是“一个过程以完成其工作而需要的额外的只读数据。
PalDB的性能还是非常客观的,具体测试数据参考官方资料如下图
PalDB用法介绍
//写数据
StoreWriter writer = PalDB.createWriter(new File("store.paldb"));
writer.put("foo", "bar");
writer.put(1213, new int[] {1, 2, 3});
writer.close();
//读数据
StoreReader reader = PalDB.createReader(new File("store.paldb"));
String val1 = reader.get("foo");
int[] val2 = reader.get(1213);
reader.close();
PalDB存储结构
PalDB的文件存储结构很重要,后面分析数据的读写过程都需要参考下面这张图,可以很自豪的说全网最详细的PalDB的存储格式就是下图了。
PalDB是采用文件直接存储数据的,所有的key/value数据都是存在文件当中,在文件内部数据存储主要分为三大块,数据之间通过位移进行关联:
- 元数据:存储整个PalDB数据存储的元数据信息,通过位移和key数据&value数据进行关联。
- key数据:存储key数据,通过位移与value数据进行关联
- value数据:存储value数据