如果我将数据块存储在 Linux PAGE_SIZE 的 1/n 或磁盘块大小中,mmap() 能否保证崩溃时的数据完整性?
Posted
技术标签:
【中文标题】如果我将数据块存储在 Linux PAGE_SIZE 的 1/n 或磁盘块大小中,mmap() 能否保证崩溃时的数据完整性?【英文标题】:Can mmap() guarantee the data integrity on crash, if I store data chunks in 1/n of Linux PAGE_SIZE?or disk block size? 【发布时间】:2011-01-12 03:01:31 【问题描述】:我需要设计一个数据持久化和快速重载的系统,用mmap()
实现。但是使用mmap()
进行持久化的系统通常会在系统崩溃时丢失数据完整性,例如单节点 MongoDB。
我有一个非常扁平的数据结构来存储:数据被分成 1024 个大小的块,块之间没有依赖关系。在服务器正常运行期间,块会被随机大量访问和更新。
【问题讨论】:
【参考方案1】:您可以使用msync
将映射的数据刷新到磁盘。
见http://linux.die.net/man/2/msync。
【讨论】:
已经多次使用mmap
,但从来没有存在持久性问题,所以我没有涉足msync
。学习已经发生。谢谢。以上是关于如果我将数据块存储在 Linux PAGE_SIZE 的 1/n 或磁盘块大小中,mmap() 能否保证崩溃时的数据完整性?的主要内容,如果未能解决你的问题,请参考以下文章