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

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

转载请注明出处:http://www.cnblogs.com/ayanmw 多谢

------------------------------------------------------------------------------------------------

一定要专业!本博客定位于 ,C语言,C++语言,Java语言,Android开发和少量的Web开发,之前是做Web开发的,其实就是ASP维护,发现EasyASP这个好框架,对前端后端数据库 都很感觉亲切啊。. linux,总之后台开发多一点。以后也愿意学习 cocos2d-x 游戏客户端的开发。

原文地址:https://www.cnblogs.com/ayanmw/p/2411791.html