leveldb之数据库损坏,修复

搜索leveldb看到了一个讨论:http://groups.google.com/group/szlug/browse_thread/thread/ba7945a26b74edc9?pli=1

还在 http://code.google.com/p/leveldb/issues/detail?can=2&start=0&num=100&q=&colspec=ID%20Type%20Status%20Priority%20Milestone%20Owner%20Summary&groupby=&sort=&id=73 地方贴出了代码。

 

他的主要问题是:两个线程 同时 进行 快速 打开leveldb 操作 关闭leveldb。而且 还是 while(1){}循环级别 ,,,leveldb伤不起啊  太快了,导致leveldb可能有所损坏。

所以 leveldb程序开发方法应该是: 在进程 开始 打开leveldb,然后各个线程 随便使用。最后程序 完毕的时候 delete db。这个在程序 关闭时候 也会自动调用。当然手动调用更好了。

我还学到了

 status=leveldb::DestroyDB(dbpath,option);

和 

status=leveldb::RepairDB(dbpath,option);

其中 dbpath="/tmp/test_db/"

leveldb::Options option;

 

但是我也发现了,如果在程序main开始的时候(已经建立db对象了),使用destroyDB,接下来还可以操作,delete db后,数据库会被清空!

如果使用repairDB,然后后面对数据库操作,在deleteDB,leveldb会乱掉的。。。所以 两个操作完毕后 立即 delete db;再建立db对象,再操作 才安全。

 

 

补充:http://duanple.blog.163.com/blog/static/70971767201171705113636/

译文  LevelDB:一个快速轻量级的key-value存储库(译)   ,原文:http://leveldb.googlecode.com/svn/trunk/doc/index.html

这兄弟 翻译的 比我好多了!!!!!!!很赞!

转载于:https://www.cnblogs.com/ayanmw/archive/2012/03/22/2411791.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值