(Translated by https://www.hiragana.jp/)
GitHub - KipData/kipdb: Lightweight, asynchronous based on LSM Leveled Compaction KV database
Skip to content
This repository has been archived by the owner on Aug 4, 2024. It is now read-only.

KipData/kipdb

Repository files navigation

KipDB - Keep it Public DB

github star github fork

Crates.io LICENSE Rust Community

KipDB 轻量级键值存储引擎

整体せいたい设计参考さんこうLevelDB,むねざいさく为NewSQL分布ぶんぷしきすうすえ库的そん储引擎

  • 支持しじ嵌入かんにゅうしき/单机そん储/远程调用とう应用场景
  • Kissさく为开发理念りねん,设计以简单而だかこう为主
  • 实现MVCC以支持しじACID
  • 高性能こうせいのう,BenchMarkうつしにゅう吞吐りょう约为Sledてき两倍,且大すうすえりょうてき顺序读取平均へいきんのべ迟为1μみゅーs左右さゆう
  • 远程连接使用しようProtoBuf实现,支持しじ语言通信つうしん
  • 极小てきないそんうらないよう(まちつくえ/大量たいりょうひやすうすえ)
  • 并发安全あんぜん,读读、读写并行

组件原理げんりWiki : https://github.com/KKould/KipDB/wiki

快速かいそく上手じょうず 🤞

Tips: 使用しようRPC时请确保 Protocol Buffer Compiler やめあんそう

组件引入

kip_db = "0.1.2-alpha.15 "

だい码编译

基本きほん编译

# だい码编译
cargo build

# だい码编译(正式せいしき环境)
cargo build --release

# 单元测试
cargo test

# 性能せいのうもとじゅん测试
cargo bench

Docker镜像编译

# 编译镜像
docker build -t kould/kip-db:v1 .

# 运行镜像
docker run kould/kip-db:v1

直接ちょくせつ调用(基本きほん使用しよう)

/// 指定していぶんけん夹以开启いち个KvStore
let kip_db = LsmStore::open("/welcome/kip_db").await?;

// 插入そうにゅうすうすえ
kip_db.set(&b"https://github.com/KKould/KipDB", Bytes::from(&b"your star plz"[..])).await?;
// 获取すうすえ
let six_pence = kip_db.get(&b"my deposit").await?;
// やめ占有せんゆうかた盘大しょう
let just_lot = kip_db.size_of_disk().await?
// やめ有数ゆうすうすえ数量すうりょう
let how_many_times_you_inserted = kip_db.len().await?;
// 删除すうすえ
kip_db.remove(&b"ex girlfriend").await?;

// 创建ごと
let mut transaction = kip_db.new_transaction().await?;
// 插入そうにゅうすうすえいたりごと务中
transaction.set(&b"this moment", Bytes::from(&b"hope u like it"[..]));
// 删除该事务中key对应てきvalue
transaction.remove(&b"trouble")?;
// 获取此事务中key对应てきvalue
let ping_cap = transaction.get(&b"dream job")?;
// つつみ交事务
transaction.commit().await?;

// 创建持久じきゅうすうすえ迭代
let guard = kip_db.iter().await?;
let mut iterator = guard.iter()?;

// 获取いち元素げんそ
let hello = iterator.next_err()?;
// うつり动至だいいち元素げんそ
let world = iterator.seek(Seek::Last)?;

// 强制きょうせいすうすえにゅうかた
kip_db.flush().await?;

远程应用

ふく务启动

/// ふく务端启动!
let listener = TcpListener::bind("127.0.0.1:8080").await?;

kip_db::net::server::run(listener, tokio::signal::ctrl_c()).await;

远程调用

/// きゃく户端调用!
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.size_of_disk().await?
// そんにゅう指令しれいすう
client.len().await?
// かずすえにゅうかた
client.flush().await?
// 删除すうすえ
client.remove(&vec![b'k']).await?;
// 批量指令しれい执行(选 并行/どう 执行)
let vec_batch_cmd = vec![CommandData::get(b"k1".to_vec()), CommandData::get(b"k2".to_vec())];
client.batch(vec_batch_cmd, true).await?

うちおけ持久じきゅうないかく👍

  • LsmStore: LSMそん储,使用しようLeveled Compaction策略さくりゃく(だま认内かく)
  • HashStore: 类Bitcask
  • SledStore: もと于Sledすうすえ库进ぎょうふうそう

操作そうさしめせれい⌨️

ふく务端

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 <IP>
--port <PORT>
-V, --version        Print version information

PS D:\Workspace\kould\KipDB\target\release> ./server   
2022-10-13T06:50:06.528875Z  INFO kip_db::kernel::lsm::ss_table: [SsTable: 6985961041465315323][restore_from_file][TableMetaInfo]: MetaInfo { level: 0, version: 0, data_len: 118, index_len: 97, part_size: 64, crc_code: 43553795 }, Size of Disk: 263
2022-10-13T06:50:06.529614Z  INFO kip_db::net::server: [Listener][Inbound Connections]
2022-10-13T06:50:13.437586Z  INFO kip_db::net::server: [Listener][Shutting Down]

きゃく户端

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] <SUBCOMMAND>

OPTIONS:
    -h, --help                   Print help information
        --hostname <hostname>    [default: 127.0.0.1]
        --port <PORT>            [default: 6333]
    -V, --version                Print version information

SUBCOMMANDS:
    batch-get
    batch-remove
    batch-set
    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", "!"]

Features🌠

  • Major Compation
    • 级递ぞう循环压缩 ✅
    • SSTable压缩じょう态互斥
      • 避免并行压缩时数すえ范围じゅう复 ✅
  • KVStore
    • 参考さんこうSled增加ぞうかapi
      • size_of_disk ✅
      • clear
      • contains_key
      • iter ✅
      • len ✅
      • is_empty ✅
      • ...
    • 进程锁 ✅
      • 防止ぼうし进程对文けん进行读写造成ぞうせいすうすえ异常
  • SSTable
    • ぬのたかし过滤
      • かい获取键值てき速度そくど
    • MetaBlock ✅
      • よう于存储统计数すえぬのたかし过滤てきそん
  • Block
    • DataBlock、IndexBlock复用实现并共とおる缓存 ✅
    • 实现ぜん缀压缩并使用しようvarint编码以及LZ4减小そら间占よう
    • もと于前缀进ぎょうふん查询 ✅
  • Cache
    • TableCache: SSTableLoader懒加载 ✅
    • BlockCache: まれ疏索引数ひきすうすえ块缓そん
    • 类LevelDBてき并行LruCache: ShardingLruCache ✅
  • Iterator 迭代
    • BlockIterator ✅
    • SSTableIterator ✅
    • LevelIterator ✅
    • VersionIterator ✅
  • WAL ぼう灾日こころざし
    • 落盘时异つねきさきじゅう启数すえかい复 ✅
    • 读取すうすえ存在そんざい时尝试读取 ✅
  • MVCC单机ごと务 ✅
    • Manifest版本はんぽん持久じきゅう
    • SSTable版本はんぽん持久じきゅう
  • 网络通信つうしん
    • 使用しようProtoBuf进行语言序列じょれつ
    • Ruby of KipDB
    • Java of KipDB
    • Rust of KipDB ✅
  • 分布ぶんぷしき
    • 使用しようRaft复制协议保持ほじじょう一致いっち

Perf焰图监测

  • 为了方便ほうべん性能せいのう调优とう监测,提供ていきょうりょう两个Dockerfileさく支持しじ
    • Dockerfile: KipDBてきServerあずかCli
    • Dockerfile-perf: 外部がいぶPerf监测

使用しよう

  1. つつみKipDB本体ほんたい镜像docker build -t kould/kip-db:v1 .
  2. つつみPerf监测镜像docker build -f Dockerfile-perf -t kould/perf:v1 .
  3. 任意にんい形式けいしき执行kould/kip
    • れい: docker run kould/kip-db:v1
  4. 执行attach-win.sh <kip-db容器ようきID>
    • れい: ./attach-win.sh 263ad21cc56169ebec79bbf614c6986a78ec89a6e0bdad5e364571d28bee2bfc
  5. ざい该bashない输入. record.sh <kip-dbてきserver进程pid>
    • わか清楚せいそ进程id多少たしょう直接ちょくせつ输入ps,通常つうじょう为1
    • 注意ちゅうい!: 不要ふよう关闭bash,いや则会监听しつ败!
  6. ずいきさき对KipDB进行对应需要じゅよう监测てき操作そうさ
  7. 操作そうさかん毕后かいいた骤5てきbashない,以ctrl + c终止监听,とくいたperf.data
  8. 继续ざい该bashない输入. plot.sh <图片めい.svg>, そく生成せいせい焰图
    • 导出图片一般いっぱん使用しよう docker cp docker exec ある挂载 volume,为方便びん预览复制ぶんけん容器ようきないおけりょう轻量网页ふく务,执行 thttpd -p <はしこうごう> そくよし于脚本中ほんなかぼつゆう设置はしこう转发,需要じゅよう docker inspect <标容ID> | grep IPAdress 查看标容てき IP,しかきさきざい浏览ちゅう访问そくわか需要じゅようさら灵活てき操作そうさ不用ふよう以上いじょう脚本きゃくほんしゅ添加てんかさんすう运行容器ようき

参考さんこうhttps://chinggg.github.io/post/docker-perf/

如果你想参与さんよKipDBあるKipSQL,欢迎どおり过下かたほろしん维码あずかわが交流こうりゅう

微信联系方式

Thanks For

JetBrains