key-value-store - RocksDB如何组织键值来实现Redis ZSet命令?
问题描述
我通过 RocksDB 实现 Redis ZSet 命令,并且迭代器使用大键真的很慢,我该如何优化这些键值?
我将 1 个 zset key-element-score 与 3 个 RocksDB 键值分开,例如name2age:linda:25
元键:
"name2age": 1
// 计数一个元素,用于 zcard索引键:
"name2age:linda": 25
// 用于 zrangebyindex分数键:
"name2age:25:linda": NULL
// 用于 zrangebyscore
// using rocksdb iterate to start index, count offset, and select elements
// this will be slow when zset have too many elements
我想要一个新的实现来重写zset,也许有一些提示,非常感谢
解决方案
要在有序键值存储之上实现排序集,您必须依赖称为skip-list的概率数据结构。
但是在您的问题中,您要执行的操作不需要跳过列表。
有关跳过列表的介绍,请参阅此幻灯片
并且在foundationdb 论坛上的这个线程关于如何实现最有可能是你想要的排行榜。
这链接到可以在github上找到的 C# 实现
祝你好运!
推荐阅读
- python - 为实时模式和测试模式创建帐户和 API 令牌
- git - 用重写提交历史的分支强制更新“main”的正确方法是什么?
- postgresql - 更改端口号后,Unix 域套接字“/var/run/postgresql/.s.PGSQL.5432”上的连接
- python - pygame event AttributeError: 'Event' 对象没有属性 'MOUSEBUTTONUP'
- odoo - odoo 8 计数附件并在列表视图中显示
- mysql - 获取 ConnectionRefusedError [SequelizeConnectionRefusedError]:运行 React.js 应用程序时连接 ECONNREFUSED 127.0.0.1:3306
- c - 来自简单程序的奇怪打印
- qlikview - 如何创建具有多个参数化实例的 qliksense 应用程序
- excel - 使用 VBA 在现有工作表中创建数据透视表
- r - GGPlot2 - 对每个 X 处的 y 值求和,用于多面板图