【发布时间】:2013-12-01 22:24:10
【问题描述】:
我正在尝试创建 NoSQL 类型的数据库来存储 blob。每个 blob 将具有固定大小,例如 4KB 到 64KB。每个 blob 都将被完全重写,所以假设我有 1GB 到 1TB 的文件,在 FileStream 中我可以执行 Seek 和 write 等操作。但是我对 Locking 持怀疑态度。
MemoryMappedFile 对于 View 只有 4KB 到 64KB 的大文件会表现更好吗?或者我应该使用带锁定的 FileStream。
FilStream 提供 Lock API,但是 MemoryMappedFile 不提供锁定,所以我将不得不使用一些进程间锁定。
我的要求是,
- 我希望文件只能由单个进程打开
- 单个进程将有多个线程访问同一个 MMF,但可能有不同的视图
- 我想轻松读/写 4B 到 64KB 的块,但要使用完全锁定,将使用互斥锁
- 我会将 4KB 的整个页面写入 64KB 的固定大小,并且我只想在处理结束时执行刷新。但我希望这个写操作非常持久。
从 MSDN 上的文档中,我认为 MemoryMappedFile 是创建数据库系统的最佳候选者,但是我看到了一些开源 nosql c# 数据库,但我还没有看到它们中的任何一个使用它,所以它让人怀疑什么是瓶颈。另一个原因可能是 MMF 在 .NET 中引入的时间很晚,而那些数据库没有 MMF 选项。
【问题讨论】:
标签: .net-4.5 memory-mapped-files