我有一项服务,负责从网络上收集不断更新的数据流。目的是整个数据集必须随时可供使用(只读)。这意味着客户端代码应该可以访问到达最早的数据消息的最新数据消息。
当前计划是在 Windows 上使用内存映射文件。主要是因为数据集非常庞大,跨越数十 GiB。无法知道需要哪部分数据,但是当需要时,客户端可能需要随意跳转。
内存映射文件符合要求。然而,我看到它说(写)它们最适合已经定义的数据集,并且不会不断变化。这是真的?我上面描述的场景可以很好地处理内存映射文件吗?
或者我最好为所有数据保留一个内存映射文件,直到最近的数据达到一定数量的MB,以便内存映射文件保存几乎99%的传入数据的历史记录,但我存储最多的数据最近,比如说 100MB 在一个单独的内存缓冲区中。每次此缓冲区变满时,我都会将其移动到内存映射文件,然后清除它。
最佳答案
任何已定义且不更改的数据集都是最好的!
内存映射文件通常胜过其他东西——大多数操作系统无论如何都会将访问缓存在 RAM 中。
而且性能是可预测的,当你开始交换时你不会掉下悬崖。
关于c++ - 内存映射文件对于不断变化的数据有害吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/796175/