在Tokyo Cabinet中hashDB中的hash索引是通过mmap将数据库文件的一部分映射到内存中的,
之前把Tokyo Cabinet移植到手机淘宝客户端当做一个通用的KV数据库来使用,因为各种手机
的环境千差万别,手淘某些机型中得crash率很高. Tokyo Cabinet数据库文件总是不完整.
因为是手机客户端又不方便像在server端一样使用一个单独的线程定时同步mmap内存到文件中去....
手机淘宝的突然crash是导致mmap的数据不能及时写到文件,使得数据库文件被破坏的原因吗?
突然想到一个问题假设是进程中得其他lib引起crash,当crash时Tokyo Cabinet使用mmap打开的文件
在内存中的修改能否同步到硬盘中呢..搜了一些资料基本得出一个结论:
进程崩溃时,mmap的内存内核是会帮你写回到磁盘的
参照:
http://stackoverflow.com/questions/5902629/mmap-msync-an