是否可以有效地使用RocksDB range queries关于数字?
例如,如果我有数十亿个元组 (price, product_id)
我可以使用 RocksDB 检索具有 10 <= price <= 100
的所有产品吗? ?或者它不能用于此目的?
我很困惑,因为我找不到任何有关数字键和范围查询的具体文档。不过,我还了解到 RocksDB 被用作许多 DBMS 的数据库引擎,这表明在这种情况下可以有效地查询它。
在像 RocksDB 这样的键值存储中组织上述元组以获得任意范围(提前未知)的推荐方法是什么?
您会使用哪种 key ?您会使用什么类型的查询?
最佳答案
是的,rocksdb 支持高效的范围查询[即使是预先未知的任意范围]
range queries.
https://github.com/facebook/rocksdb/wiki/Prefix-Seek
number keys
没有关于如何对数据进行建模的文档 - 如果您不知道如何对其进行建模,那么您首先就不应该使用rocksdb,因为它的级别太低了
What is the recommended way to organize the above tuples in a key-value store like RocksDB in order to get arbitrary ranges (not known in advance)?
在您的示例中 - 它正在创建价格索引来查找产品 ID
因此,您可以将价格编码为字节数组并将其用作键,然后将产品 id 作为字节数组作为值
示例格式
key => value
priceIndex:<price>#<productId> => <productId>
然后你就会
- 创建迭代器
- 寻求价格下限 [在本例中为
priceIndex:10
] - 设置选项上限 [在本例中为
priceIndex:100
] - 循环直到迭代器有效
这将为您提供该范围内的所有键值对 - 在您的情况下,这将是价格范围内的所有价格、产品 ID 元组
必须小心,因为许多产品可以具有相同的价格,并且 RocksDB key 是唯一的 - 因此您也可以在价格后添加产品 ID 来使 key 唯一
关于key-value-store - RocksDB:数字范围查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73670453/