页首Html代码

返回顶部

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

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

posted @ 2012-03-22 16:10  ayanmw  阅读(2765)  评论(1编辑  收藏  举报

页脚Html代码