Kiss First Data Base
```rust /// 指定文件夹以开启一个KvStore let kip_db = LsmStore::open("/tmp/learning materials").await?;
// 插入数据 kipdb.set(&vec![b'k'], vec![b'v']).await?; // 获取数据 kipdb.get(&vec![b'k']).await?; // 已占有硬盘大小 kipdb.sizeofdisk().await? // 已有数据数量 kipdb.len().await?; // 删除数据 kip_db.remove(&vec![b'k']).await?;
// 强制数据刷入硬盘 kip_db.flush().await?; ```
```rust /// 服务端启动! let listener = TcpListener::bind("127.0.0.1:8080").await?;
kip_db::net::server::run(listener, quit()).await; ```
```rust /// 客户端调用! let mut client = Client::connect("127.0.0.1:8080").await?;
// 插入数据 client.set(&vec![b'k'], vec![b'v']).await? // 获取数据 client.get(&vec![b'k']).await? // 已占有硬盘大小 client.sizeofdisk().await? // 存入指令数 client.len().await? // 数据刷入硬盘 client.flush().await? // 删除数据 client.remove(&vec![b'k']).await?; // 批量指令执行(可选 并行/同步 执行) let vecbatchcmd = vec![CommandData::get(b"k1".tovec()), CommandData::get(b"k2".tovec())]; client.batch(vecbatchcmd, true).await? ```
``` shell PS D:\Workspace\kould\KipDB\target\release> ./server -h KipDB-Server 0.1.0 Kould 2435992353@qq.com A KV-Store server
USAGE: server.exe [OPTIONS]
OPTIONS:
-h, --help Print help information
--ip
PS D:\Workspace\kould\KipDB\target\release> ./server
2022-10-13T06:50:06.528875Z INFO kipdb::kernel::lsm::sstable: [SsTable: 6985961041465315323][restorefromfile][TableMetaInfo]: MetaInfo { level: 0, version: 0, datalen: 118, indexlen: 97, partsize: 64, crccode: 43553795 }, Size of Disk: 263
2022-10-13T06:50:06.529614Z INFO kipdb::net::server: [Listener][Inbound Connections]
2022-10-13T06:50:13.437586Z INFO kipdb::net::server: [Listener][Shutting Down]
```
``` shell PS D:\Workspace\kould\KipDB\target\release> ./cli --help KipDB-Cli 0.1.0 Kould 2435992353@qq.com Issue KipDB Commands
USAGE:
cli.exe [OPTIONS]
OPTIONS:
-h, --help Print help information
--hostname
SUBCOMMANDS: batch-get batch-get-parallel batch-remove batch-remove-parallel batch-set batch-set-parallel flush get help Print this message or the help of the given subcommand(s) len remove set size-of-disk
PS D:\Workspace\kould\KipDB\target\release> ./cli batch-set kould kipdb welcome ! 2022-09-27T09:50:11.768931Z INFO cli: ["Done!", "Done!"]
PS D:\Workspace\kould\KipDB\target\release> ./cli batch-get kould kipdb
2022-09-27T09:50:32.753919Z INFO cli: ["welcome", "!"]
```
分布式
为了方便性能调优等监测,提供了两个Dockerfile作为支持
docker build -t kould/kip-db:v1 .
docker build -f Dockerfile-perf -t kould/perf:v1 .
docker run kould/kip-db:v1
attach-win.sh <kip-db容器ID>
./attach-win.sh 263ad21cc56169ebec79bbf614c6986a78ec89a6e0bdad5e364571d28bee2bfc
record.sh <kip-db的server进程pid>
. plot.sh <图片名.svg>
, 即可生成火焰图
docker cp
和 docker exec
或挂载 volume,为方便预览和复制文件,容器内置了轻量网页服务,执行 thttpd -p <端口号>
即可。由于脚本中没有设置端口转发,需要 docker inspect <目标容器ID> | grep IPAdress
查看目标容器的 IP,然后在浏览器中访问即可。若需要更灵活的操作,可不用以上脚本手动添加参数运行容器。参考自:https://chinggg.github.io/post/docker-perf/