[英]A problem about Rocksdb deleting data but after that iterator still iterate old data
在使用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 = db.iteritems()
來更新it
變量的信息(您在上一個案例中已完成it = db.iteritems()
。it
變量被更新了,你可以看到數據也被刪除了。解決方案:
創建一個函數來執行該重復性任務,您可以在任何時候想要打印數據時調用它。
def update_func():
it = db.iteritems()
it.seek_to_first()
func(it)
update_func()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.