在leveldb上按值查找

时间:2018-01-16 16:12:41

标签: node.js database key-value-store leveldb

我一直在玩leveldb并且它非常擅长于它的设计目的 - 根据键存储和获取键/值对。

但现在我想做一些更高级的事情,发现自己立即陷入困境。有没有办法按价值找到记录?我能想到的唯一方法是迭代整个数据库,直到找到一个值为I' m的条目。如果我正在寻找具有该值的多个条目(基本上是"其中"查询),这会变得更糟,因为每次我尝试执行此类查询时都必须遍历整个数据库。 / p>

我是否正在努力做Leveldb没有设计的事情,我应该使用其他数据库吗?或者有一个很好的方法来做到这一点?

1 个答案:

答案 0 :(得分:1)

你是对的。基本上你需要知道的是关键成分

其次,您不是在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的记录。