在nodejs中的leveldb数据库中查询值

时间:2018-07-06 14:20:50

标签: node.js leveldb levelup leveldown

如何通过nodejs中的值查询levelDB数据库? 我在我的leveldb数据库中有键:值对,我想在其中搜索一些值,然后从该结果中找到键/值对。我是leveldb的初学者。

{
    "key1" : {
                 "data1": "value1",
                 "data2": "value2",
                 "data3": "value3"
             }
}

因此,我想查询data3 == value3的值并获取该键值对。

在levelDB中,我们只能基于密钥来获取数据。 还有其他选择吗?

1 个答案:

答案 0 :(得分:1)

在leveldb中,您可以通过完全匹配或前缀范围来“仅”查询低级别的数据库抽象。

没有某种重复就无法按值查询。

我在graphdb项目中采用的模式是在this之后跟随一个辅助“表”来存储索引。

在Python plyvel中,您可以使用EAV model模拟“表”。或者查看FoundationDB在其Subspace实现中是如何做到的。基本上,给定“表”或“空间”的每个键值对都以特定的字节序列作为前缀。

第一个表如下所示:

(Entity, Attribute) → (Value)

其中Entity是一个(随机)标识符,而Attribute是字段名的字节表示,最后但并非最不重要的Value是与Attribute相关的字节序列化值给定的Entity

以这种方式完成表架构,以便您可以使用给定Attribute上的前缀范围搜索,使用全部ValueEntity的范围查询来快速获取。

索引表使用以下架构:

(Attribute, Value) → Entity

那是第一个表的改组版本。

这样做是为了快速获取与您要查找的特定Entity相匹配的Attribute == Value

您要寻找的还有其他实现。查找有关prefixed databases和键值存储的答案,例如leveldb

祝你好运!