news 2026/5/26 9:24:11

PikiwiDB新存储引擎 官文解读

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
PikiwiDB新存储引擎 官文解读

原文连接https://github.com/OpenAtomFoundation/pikiwidb/discussions/2052

1.要点

首先提出:上一方案每种数据类型对应一个RocksDB,导致不同数据类型可以重名的问题,同时业务集中使用一种数据类型,造成负载不均衡和资源浪费。

新的存储架构中,Pika 实例存储引擎包括内存缓存和硬盘持久存储 RocksDB。每个 Pika 实例由一个内存缓存和多个 RocksDB 实例构成,每个数据分片对应一个 RocksDB 实例。同一个Pika实例的多个 RocksDB 实例共享同一个 compaction 和 flush 线程池。

2.Zset数据类型讨论

Zset由两部分组成:元数据(meta_key, meta_value),和普通数据(data_key,data_value)

元数据存储:Zset集合member的数量以及当前Zset集合的版本号和过期时间

普通数据存储: Zset集合的每个成员(membeer)及对应的分数(score)

因为Zset需要按照member排序,耶需要按照score排序;所以有两种格式:member to score和score to member

3.kvrocks向量存储

向量的存储格式分为 Metadata 和 Data 两部分:

1. Metadata(元数据)

向量字段元数据
[1 byte] flag (noindex:1 bit | type:4 bits | reserved:3 bits) [1 byte] vector_type (1 = FLOAT64) [2 bytes] dim (向量维度) [1 byte] distance_metric (0=L2, 1=IP, 2=COSINE) [4 bytes] initial_cap (初始容量) [2 bytes] m (每层最大邻居数) [4 bytes] ef_construction (构建时候选数) [4 bytes] ef_runtime (查询时候选数) [8 bytes] epsilon (范围查询因子) [2 bytes] num_levels (HNSW图层数)
HNSW节点元数据
[2 bytes] num_neighbours (邻居数量) [2 bytes] dim (向量维度) [dim * 8 bytes] vector (FLOAT64 向量数据)

2. Data

键格式
HNSW节点键
[1 byte] ns_size (命名空间长度) [ns_size bytes] ns (命名空间) [1 byte] type (3 = SearchSubkeyType::FIELD) [4 bytes] index_size (索引名长度) [index_size bytes] index (索引名) [4 bytes] field_size (字段名长度) [field_size bytes] field (字段名) [2 bytes] level (HNSW层级) [1 byte] level_type (1 = HnswLevelType::NODE) [4 bytes] key_size (数据键长度) [key_size bytes] key (数据键)
HNSW边键
[1 byte] ns_size [ns_size bytes] ns [1 byte] type (3 = FIELD) [4 bytes] index_size [index_size bytes] index [4 bytes] field_size [field_size bytes] field [2 bytes] level [1 byte] level_type (2 = EDGE) [4 bytes] key1_size [key1_size bytes] key1 [4 bytes] key2_size [key2_size bytes] key2
值格式
节点值
[2 bytes] num_neighbours (邻居数量) [2 bytes] dim (向量维度) [dim * 8 bytes] vector (FLOAT64 向量数据)
边值
(空) - 边的值是一个空的 Slice,所有信息都存储在键中

4.redis 向量存储格式

1.meta data

typedef struct hnswNode { uint32_t level; // 节点的最大层级 uint64_t id; // 唯一标识符 void *vector; // 向量数据(指针) float quants_range; // 量化范围(-quants_range 到 +quants_range) float l2; // 归一化前的 L2 范数 uint64_t visited_epoch[HNSW_MAX_THREADS]; // 访问时间戳(每个线程一个) void *value; // 关联的用户值(vsetNodeVal) struct hnswNode *prev, *next; // 双向链表指针 hnswNodeLayer layers[]; // 各层的邻居链接(柔性数组) } hnswNode;

2.data

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/26 9:23:35

Deepin Boot Maker:跨平台启动盘制作工具的技术架构与实践指南

Deepin Boot Maker:跨平台启动盘制作工具的技术架构与实践指南 【免费下载链接】deepin-boot-maker 项目地址: https://gitcode.com/gh_mirrors/de/deepin-boot-maker Deepin Boot Maker是一款专为Linux用户设计的开源启动盘制作工具,通过智能架…

作者头像 李华
网站建设 2026/5/26 9:23:33

C++OJ题经验总结(竞赛)2

注意:本篇标红字段均是可纳为己用的经验条。OJ题知识归属:1、第一题:动态规划 -> 背包问题的分组背包2、第二题:动态规划 -> 背包问题的分组背包3、第三题:动态规划 -> 背包问题的混合背包4、第四题&#xff…

作者头像 李华
网站建设 2026/5/26 9:22:59

思必驰重启IPO:年营收6.9亿,拟募资15.6亿 估值64亿 阿里加持

雷递网 雷建平 5月25日思必驰科技股份有限公司(简称:“思必驰”)再次冲刺科创板,计划募资15.55亿元。其中,6.8亿用于AI软件及软硬一体化解决方案项目,3.25亿用于AI 智能终端产品研发升级项目,5.…

作者头像 李华