我会考虑使用 NoSQL 存储引擎。我尤其在考虑 Redis。Redis 是一个内存中的、快速的、具有持久性的键值对存储,应该非常适合这种场景。然后,您可以将大部分锁定/一致性问题推迟到它身上。
Redis 的一个问题是您是否真的绑定到 Windows 环境。有一个“非官方”的 redis 端口;移植是由微软自己完成的。但我承认我对在生产中使用它不是很有信心。至于 C# 客户端/库,有 Booksleeve。这个网站(SO)使用它:)所以我敢打赌它非常稳定!
当然,您需要根据您的需要定制 Redis。Redis 确实提供了持久性,并且持久性是可配置的(请参阅http://redis.io/topics/persistence)。此外,它还提供对象过期(http://redis.io/commands/expire),对于类似缓存的机制非常方便,并且能够从更简单的命令开始构建更复杂的原子命令。
我会使用 Redis 来处理内存缓存,将所有(主)键保存在内存中,同时将数据保存在磁盘和内存中。与易失性密钥关联的内存数据。主键指向内存中的键和文件名;如果它指向的键无效,您可以重新加载数据并访问它。
这是一个复杂的解决方案,但它有两个优点:
- 它应该变化很快
- 它将一些锁/等负担卸载到 Redis
- 应该很容易从您的解决方案迁移到这个解决方案
或者,Redis 也提供了一个 VM 解决方案
http://oldblog.antirez.com/post/redis-virtual-memory-story.html,但我不知道它有多稳定,我也没有尝试过。
另一种选择是探索其他 NoSQL 解决方案;既然你提到了 JSON 数据,我将看看 MongoDB。
最后,一个疯狂的想法......你在 64 位机器上吗?您是否考虑过使用非常大的页面文件和页面文件支持的内存映射文件(或标准文件)“让操作系统处理它”?请注意,这可能是一个非常糟糕的主意......!但也许你可以尝试/研究一下?