在 leveldb 上按值查找

Find by value on leveldb

我一直在玩 leveldb,它非常擅长它的设计目的——基于键存储和获取 key/value 对。

但现在我想做一些更高级的事情,但发现自己马上就卡住了。没有办法按值查找记录吗?我能想到的唯一方法是遍历整个数据库,直到找到具有我要查找的值的条目。如果我正在寻找具有该值的多个条目(基本上是 "where" 查询),情况会变得更糟,因为每次我尝试执行此类查询时都必须遍历整个数据库。

我是否正在尝试做 Leveldb 不打算做的事情,我应该改用另一个数据库吗?或者有什么好的方法吗?

你是对的。基本上你需要知道的是 key composition.

其次,您不在 SQL WHERE 子句中按值本身查询,而是使用像 age = 42.

这样的布尔查询

要回答您的特定问题,假设您在 leveldb 中有第一个键值命名空间,您将对象存储在其中,值在 json 中序列化,例如:

 key                    |          value
-------------------------------------------------
 namespace |    uid     |          value
================================================
 users     |    1       | {name:"amz", age=32}
------------------------------------------------
 users     |    2       | {name:"abki", age=42}

在另一个命名空间中,您按年龄索引用户 uid:

         key              | value
----------------------------------
 namespace    | age | uid | value
==================================
 users-by-uid |  32 | 1   | empty
----------------------------------
 users-by-uid |  42 | 2   | empty

此处值为空,因为键必须是唯一的。我们可以认为给定行的值是 uid 它组成的列 进入键,使每一行的键都是唯一的。

在第二个命名空间中,开头的每个键和 (user-by-uid, 32) 匹配回答查询 age = 32.

的记录