在 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
.
的记录
我一直在玩 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
.