在使用pyrocksdb开发系统时,我做了一个实验来解决rocksdb问题。我试着遵循:
def func(iterator):
for k, v in iterator:
print("k:{}, v:{}".format(k, v))
import rocksdb
db = rocksdb.DB("test.db", rocksdb.Options(create_if_missing=True))
batch = rocksdb.WriteBatch()
batch.put(b'a1', b'data1')
batch.put(b'a2', b'data2')
batch.put(b'a3', b'data3')
db.write(batch)
it = db.iteritems()
it.seek_to_first()
func(it)
#print info
k:b'a1', v:b'data1'
k:b'a2', v:b'data2'
k:b'a3', v:b'data3'
#delete a kv
db.delete(b'a1')
it.seek_to_first()
func(it)
#print info, k:b'a1', v:b'data1' is still available
k:b'a1', v:b'data1'
k:b'a2', v:b'data2'
k:b'a3', v:b'data3'
#but if I reassign it
it = db.iteritems()
it.seek_to_first()
func(it)
#print info, delete takes effect
k:b'a2', v:b'data2'
k:b'a3', v:b'data3'
我想知道为什么我需要重新分配迭代器
原因:
db.iteritems()
,返回值存储在it
。你知道吗db.delete(b'a1')
删除了这些信息 存储在it
中的数据不会更新。和以前一样。你知道吗it
的信息 通过执行it = db.iteritems()
来执行变量。你知道吗it
变量被更新,您可以看到数据被删除为 好。你知道吗解决方案:
创建一个函数来完成这个重复的任务,您可以随时调用它来打印数据。你知道吗
相关问题 更多 >
编程相关推荐