当漂亮的圆形轮子已经存在时,您正试图重新发明一个方形轮子!
让我们更上一层楼来描述您的需求:
- 一个大型数据集,构建成本很高
- 不同的流程需要使用数据集
- 性能问题不允许简单地从永久存储中读取完整集
恕我直言,我们正面临着创建数据库的目的。对于常见的用例,让多个进程都使用自己的 10G 对象副本是一种内存浪费,常见的方法是一个进程拥有数据,其他进程发送数据请求。你没有充分描述你的问题,所以我不能说最好的解决方案是:
- 像 PostgreSQL 或 MariaDB 这样的 SQL 数据库——因为它们可以缓存,如果你有足够的内存,所有的都将自动保存在内存中
- 如果您唯一(或主要)需要单键访问,则使用 NOSQL 数据库(MongoDB 等) - 在处理需要快速但简单访问的大量数据时非常好
- 如果您的需求非常具体并且上述解决方案都不能满足它们,则使用专用查询语言的专用服务器
- 一个进程设置了一块巨大的共享内存,供客户端进程使用——最后一个解决方案肯定会最快提供:
- 所有客户端都进行只读访问 - 它可以扩展到 r/w 访问,但可能导致同步噩梦
- 你肯定在你的系统上有足够的内存从不使用交换 - 如果你这样做,你将失去真实数据库实现的所有缓存优化
- 数据库的大小和客户端进程的数量以及整个系统的外部负载永远不会增加到您陷入上述交换问题的程度
TL/DR:我的建议是使用高质量的数据库和可选的专用缓存来试验性能。这些解决方案几乎可以在不同机器上实现开箱即用的负载平衡。仅当这不起作用时,仔细分析内存需求并确保记录客户端进程数量和数据库大小的限制以供将来维护并使用共享内存 - 只读数据暗示共享内存可能是一个很好的解决方案