update
KKKV 是一个高性能的分布式键值存储系统,支持本地存储和分布式存储两种模式。系统具有以下特点:
# 克隆仓库 git clone <repository-url> cd kv-kkkv # 安装依赖 go mod download # 构建项目 go build -o kkkv
本地存储模式适用于单机环境,数据存储在本地文件系统中。
// 创建本地存储引擎 localStore, err := store.NewLocalStore(store.LocalStoreConfig{ BasePath: "/path/to/storage", // 指定存储目录 }) if err != nil { log.Fatalf("Failed to create local store: %v", err) } defer localStore.Close() // 使用存储引擎 localStore.Put("key", []byte("value")) value, err := localStore.Get("key") localStore.Delete("key")
分布式存储模式适用于多节点环境,数据通过纠删码分片存储在多个节点上,提供更高的可靠性和可用性。
// 创建节点管理器 nodeManager := node.NewInMemoryNodeManager() // 注册节点 for i := 0; i < 5; i++ { node := &node.Node{ ID: fmt.Sprintf("node-%d", i), Address: fmt.Sprintf("192.168.1.%d:8000", 10+i), Capacity: 1024 * 1024 * 1024, // 1GB Used: 0, } nodeManager.RegisterNode(node) } // 创建分布式存储引擎 distStore, err := store.NewDistributedStore(store.DistributedStoreConfig{ DataShards: 3, // 数据分片数 ParityShards: 2, // 校验分片数 NodeManager: nodeManager, // 节点管理器 NodeStrategy: node.CapacityStrategy, // 节点选择策略 // 可选:热冷数据管理配置 HotThreshold: 10, // 热数据阈值 CooldownPeriod: 24 * time.Hour, // 数据降温周期 WarmupThreshold: 5, // 数据升温阈值 EnableHotCold: true, // 启用热冷数据管理 // 可选:Raft配置 UseRaft: true, // 使用Raft协议 LocalNodeID: "node-0", // 本地节点ID LocalAddress: "192.168.1.10:8000", // 本地节点地址 RaftPeers: map[string]string{ // Raft对等节点 "node-1": "192.168.1.11:8000", "node-2": "192.168.1.12:8000", }, RaftStoragePath: "/path/to/raft", // Raft存储路径 }) if err != nil { log.Fatalf("Failed to create distributed store: %v", err) } defer distStore.Close() // 使用存储引擎 distStore.Put("dist_key", []byte("dist_value")) value, err := distStore.Get("dist_key") distStore.Delete("dist_key") // 客户端API使用示例 client, err := client.NewClient(client.ClientConfig{ Mode: client.DistributedMode, DataShards: 3, ParityShards: 2, NodeAddrs: []string{"node0:8000", "node1:8000", "node2:8000"}, }) if err != nil { log.Fatal(err) } // 批量操作示例 err = client.BatchPut(map[string][]byte{ "key1": []byte("value1"), "key2": []byte("value2"), }) // 处理不存在key的案例 _, err = client.Get("non_existent_key") if errors.Is(err, store.ErrKeyNotFound) { log.Println("Key not found") }
客户端API提供了统一的接口,可以根据配置使用本地存储或分布式存储。
// 创建本地模式客户端 localClient, err := client.NewClient(client.ClientConfig{ Mode: client.LocalMode, LocalStorePath: "/path/to/storage", }) if err != nil { log.Fatalf("Failed to create local client: %v", err) } // 初始化客户端 if err := localClient.Init(); err != nil { log.Fatalf("Failed to initialize local client: %v", err) } defer localClient.Close() // 使用客户端API localClient.Put("key", []byte("value")) value, err := localClient.Get("key") localClient.Delete("key")
// 创建分布式模式客户端 distClient, err := client.NewClient(client.ClientConfig{ Mode: client.DistributedMode, DataShards: 3, ParityShards: 2, NodeAddrs: []string{ "192.168.1.10:8000", "192.168.1.11:8000", "192.168.1.12:8000", "192.168.1.13:8000", "192.168.1.14:8000", }, }) if err != nil { log.Fatalf("Failed to create distributed client: %v", err) } // 初始化客户端 if err := distClient.Init(); err != nil { log.Fatalf("Failed to initialize distributed client: %v", err) } defer distClient.Close() // 使用客户端API distClient.Put("key", []byte("value")) value, err := distClient.Get("key") distClient.Delete("key")
KKKV 支持热冷数据管理,可以根据数据访问频率自动调整数据存储策略:
热冷数据管理可以通过以下参数配置:
HotThreshold
CooldownPeriod
WarmupThreshold
EnableHotCold
完整的示例代码可以参考 main.go 文件,其中包含了本地存储、分布式存储和客户端API的使用示例。
main.go
MIT License
©Copyright 2023 CCF 开源发展委员会 Powered by Trustie& IntelliDE 京ICP备13000930号
KKKV 分布式键值存储系统
项目概述
KKKV 是一个高性能的分布式键值存储系统,支持本地存储和分布式存储两种模式。系统具有以下特点:
环境要求
安装
启动流程
1. 本地存储模式
本地存储模式适用于单机环境,数据存储在本地文件系统中。
2. 分布式存储模式
分布式存储模式适用于多节点环境,数据通过纠删码分片存储在多个节点上,提供更高的可靠性和可用性。
3. 使用客户端API
客户端API提供了统一的接口,可以根据配置使用本地存储或分布式存储。
本地模式客户端
分布式模式客户端
热冷数据管理
KKKV 支持热冷数据管理,可以根据数据访问频率自动调整数据存储策略:
热冷数据管理可以通过以下参数配置:
HotThreshold
:热数据阈值,默认为10次访问CooldownPeriod
:数据降温周期,默认为24小时WarmupThreshold
:数据升温阈值,默认为5次访问EnableHotCold
:是否启用热冷数据管理,默认为true示例
完整的示例代码可以参考
main.go
文件,其中包含了本地存储、分布式存储和客户端API的使用示例。许可证
MIT License