# kvlib
**Repository Path**: whosly/kvlib
## Basic Information
- **Project Name**: kvlib
- **Description**: key-value storage library with java17
- **Primary Language**: Java
- **License**: AGPL-3.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2024-11-29
- **Last Updated**: 2024-12-03
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# LibKV
## 1. 概述
LibKV 是用Java编写的高效可靠的key-value存储库。
LibKV 有以下特点:
1. 读写速度快
- 二进制编码,编码后的体积相对XML等文本编码要小很多;
- 增量编码:LibKV 记录了各个key-value相对文件的偏移量,从而在更新数据时可以直接在指定的位置写入数据。
- 默认用mmap的方式记录数据,更新数据时直接写入到内存即可,没有IO阻塞。
- 对超大字符串和大数组做特殊处理,另起文件写入,不影响主文件的加载和更新。
2. 支持多种类型
- 支持常用的boolean/int/float/long/double/String等基础类型。
- 支持ByteArray (byte[])。
- 支持存储自定义对象。
- 支持Set。
3. 支持多种写入模式[Future]
- 除了mmap这种非阻塞的写入方式,LibKV 也支持常规的阻塞式写入方式,并且支持同步阻塞和异步阻塞。
4. 支持数据加密[Future]
- 支持注入加密解密的实现,在数据写入磁盘之前执行加密。
- 解密处理发生在数据解析阶段,解析完成后,数据是缓存的(用HashMap缓存),
所以加解密会稍微增加写入(put)和解析(loading)的时间,不会增加索引数据(get)的时间。
5. 支持多进程[Future]
- 项目提供了支持多进程的存储类(MPLibKV)。
- 支持监听文件内容变化,其中一个进程修改文件,所有进程皆可感知。
6. 方便易用
- LibKV 提供了了丰富的API接口,开箱即用。
- 提供的接口其中包括getAll()和putAll()方法。
7. 稳定可靠
- 通过double-write等方法确保数据的完整性。
- 在API抛IO异常时自动降级处理。
8. 代码精简
- LibKV 由纯Java实现。
## 2. 使用方法
### 2.1 导入
```maven
```
### 2.2 初始化
```java
```
### 2.3 基本用法
```java
```
Builder的构造可传Context或者path。
如果传Context的话,会在内部目录的'files'目录下创建'libkv'目录来作为文件的保存路径。
## 3. 性能测试