对象存储 - 日志结构哈希表
- 读写低延迟
- 高吞吐量,尤其针对大对象存储
- 存储海量数据
- 崩溃优化,可以快速修复数据
- 轻松备份和还原
安装说明
编译, 运行(认为你已经安装好golang环境)
git clone https://github.com/xincao9/dkv.git
cd ./dkv
sudo make install
运行命令: dkv -d=true -conf=config-prod.yaml
可执行文件: /usr/local/dkv/bin/dkv
配置文件目录: /usr/local/dkv/conf/
数据目录: /usr/local/dkv/data/
日志目录: /usr/local/dkv/log/
容器化部署
docker pull xincao9/dkv
docker run -d -p 9090:9090 -p 6380:6380 dkv:latest
config.yaml 配置说明
data:
dir: /usr/local/dkv/data
invalidIndex: false
cache:
open: true
size: 1073741824
compress:
open: false
server:
mode: release
port: 9090
sequence: true
redis:
port: 6380
logger:
level: info
dir: /usr/local/dkv/log
ms:
role: 0
HTTP 接口
键值存储
-
增加或修改
curl -X PUT -H 'content-type:application/json' 'http://localhost:9090/kv' -d '{"k":"name", "v":"xincao9"}'
-
查询
curl -X GET 'http://localhost:9090/kv/name'
-
删除
curl -X DELETE 'http://localhost:9090/kv/name'
对象存储
-
上传对象,最大64M
curl -X POST 'http://localhost:9090/oss' -F "file[]=@config.yaml" -H 'content-type:multipart/form-data'
-
读取文件
curl -X GET 'http://localhost:9090/oss/116a71ebd837470652f063028127c5cd'
REDIS 支持命令
- SET key value
- GET key
- DEL key
- PING
go get github.com/go-redis/redis
client := redis.NewClient(&redis.Options{
Addr: "localhost:6380",
Password: "", // no password set
DB: 0, // use default DB
})
err := client.Set("name", "xincao9", 0).Err()
if err != nil {
log.Println(err)
}
val, err := client.Get("name").Result()
if err != nil {
log.Println(err)
}
log.Println(val)
GO SDK 接入
go get github.com/xincao9/dkv/client
c, err := client.New("localhost:9090", time.Second)
if err != nil {
log.Fatalln(err)
}
r, err := c.Put("name", "xincao9")
if err == nil {
log.Println(r)
}
r, err = c.Get("name")
if err == nil {
log.Println(r)
}
管理接口
-
运行时配置
curl -X GET 'http://localhost:9090/config'
-
普罗米修斯指示器
curl -X GET 'http://localhost:9090/metrics'
-
pprof 接口
curl -X GET 'http://localhost:9090/debug/pprof'
Grafana dashboard 资源
压力测试
执行: benchmark/start.sh
参考