Rocksdb删除数据后迭代器仍然迭代旧数据的问题

2024-05-13 22:38:19 发布

您现在位置:Python中文网/ 问答频道 /正文

在使用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'

我想知道为什么我需要重新分配迭代器


Tags: toa2dbputa1batchitseek
1条回答
网友
1楼 · 发布于 2024-05-13 22:38:19

原因:

  • 首先调用db.iteritems(),返回值存储在 it。你知道吗
  • 即使使用db.delete(b'a1')删除了这些信息 存储在it中的数据不会更新。和以前一样。你知道吗
  • 但是为了检查,您需要再次更新it的信息 通过执行it = db.iteritems()来执行变量。你知道吗
  • 现在it变量被更新,您可以看到数据被删除为 好。你知道吗

解决方案:

创建一个函数来完成这个重复的任务,您可以随时调用它来打印数据。你知道吗

def update_func():
    it = db.iteritems()
    it.seek_to_first()
    func(it)

update_func()

相关问题 更多 >