key-value-store - RocksDB:数字范围查询

标签 key-value-store rocksdb

是否可以有效地使用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>

然后你就会

  1. 创建迭代器
  2. 寻求价格下限 [在本例中为 priceIndex:10]
  3. 设置选项上限 [在本例中为 priceIndex:100]
  4. 循环直到迭代器有效

这将为您提供该范围内的所有键值对 - 在您的情况下,这将是价格范围内的所有价格、产品 ID 元组

必须小心,因为许多产品可以具有相同的价格,并且 RocksDB key 是唯一的 - 因此您也可以在价格后添加产品 ID 来使 key 唯一

关于key-value-store - RocksDB:数字范围查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73670453/

相关文章:

c++ - LevelDB --- C++ 代码

database - Riak 数据类型集排序键是否可靠

php - 列数与第 1 行的值数不匹配 - 但我有 27 列和 27 个值? PHP MySQL 错误

sql - 在 ActiveRecord 中存储序列化哈希与键/值数据库对象的优缺点?

database - 为什么 LevelDB 的下层比上层大 10 倍?

c++ - RocksDB 是存储同质对象的好选择吗?

python - 哪个键值存储有不错的扭曲 API(非阻塞)?

bloom-filter - 为什么布隆过滤器无法处理范围查询?

rocksdb - 在 RocksDB 中存储任意字节

c++ - 与使用迭代器相比,为什么 Get 和 MultiGet 对于大型键集要慢得多?