使用元组索引leveldb
项目描述
Jigfyp是一个leveldb查询构建器。它允许您使用字符串元组指定leveldb范围。
初始化
使用LevelDB对象初始化Jigfyp。
import leveldb, Jigfyp db = leveldb.LevelDB() j = jigfyp.Jigfyp(db)
处理单个键
以下示例中的键是 b'one!two!three'。
j.put_one((b'one', b'two', b'three'), b'Hi') j.get_one((b'one', b'two', b'three')) j.delete_one((b'one', b'two', b'three'))
处理键范围
以下是如何添加几条记录的一种方法。
j.put_one((b'one', b'two', b'three'), b'Hi') j.put_one((b'one', b'two', b'four'), b'Hi') j.put_one((b'one', b'two', b'seven), b'Hi') j.put_one((b'over', b'nine', b'thousand'), b'Hi')
如果您正在写入多条记录,可以使用 put_many 方法来保存相同的数据,但使用 leveldb.WriteBatch,这通常更快。
records = [ ((b'one', b'two', b'three'), b'Hi'), ((b'one', b'two', b'four'), b'Hi'), ((b'one', b'two', b'seven), b'Hi'), ((b'over', b'nine', b'thousand'), b'Hi'), ] j.put_many(records)
酷的地方在于 get_many 和 delete_many 方法。使用这些方法,您指定部分键,并发出以该键开始的全部内容。考虑一个包含上述四个记录的数据库。如果我们不对 get_many 传递任何参数,我们将读取所有数据。
j.get_many()
如果我们传递 (b'one', b'two'),
j.get_many(b'one', b'two')
我们将得到以下键的三个记录
* ``(b'one', b'two', b'three')`` * ``(b'one', b'two', b'four')``
而不是以下键的记录
(b'one', b'two', b'seven')
(b'over', b'nine', b'thousand')
同样,如果我们运行以下命令,
j.delete_many(b'one')
我们将删除所有以 b'one' 开头的记录,留下数据库中的单个记录,键为 (b'over', b'nine', b'thousand')。