leveldb之数据库损坏,修复
搜索leveldb看到了一个讨论:http://groups.google.com/group/szlug/browse_thread/thread/ba7945a26b74edc9?pli=1
他的主要问题是:两个线程 同时 进行 快速 打开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
这兄弟 翻译的 比我好多了!!!!!!!很赞!
------------------------------------------------------------------------------------------------
一定要专业!本博客定位于 ,C语言,C++语言,Java语言,Android开发和少量的Web开发,之前是做Web开发的,其实就是ASP维护,发现EasyASP这个好框架,对前端后端数据库 都很感觉亲切啊。. linux,总之后台开发多一点。以后也愿意学习 cocos2d-x 游戏客户端的开发。