MongoDB是否可用作并行处理/多实例应用程序的共享内存?

Lot*_*lux 5 database performance shared-memory multiprocessing mongodb

我正在计划一种将处理来自多个数据源的更新的产品。估计输入数据为总共100Mbps流,其中包含100字节大小的消息。这些消息包含几个数据字段,需要检查这些数据字段是否与应用程序中的现有数据集相关。如果输入消息与现有数据记录相关,则输入消息将更新现有数据记录;如果不相关,则将创建一个新记录。假设数据平均每3秒更新一次。

假定关联过程是一个瓶颈,因此我打算使我们的产品能够在需要时在多个过程中平衡运行(很可能在单独的硬件或VM上)。大约在天基建筑附近。然后,我希望在进程之间共享一个存储,以便所有现有数据记录对所有正在运行的进程可见。共享存储将必须通过基于某些属性(例如海拔)的查询/搜索来获取可能的候选关联对象。它必须提供配置热冗余,并有可能每5分钟存储一次快照以进行记录。

一切似乎都指向MongoDB,但我想向您确认MongoDB将满足我的需求。那么您认为这是可行的吗?-谢谢

注意:我不考虑使用关系数据库,因为我们希望将所有编码集中在应用程序中,而不是必须在单独的环境中进行“存储过程” /“功能”以优化系统性能。此外,数据是多种多样的,我不想尝试将其标准化为模式。

Zai*_*sud 4

是的,MongoDB 会满足您的需求。我认为您描述的以下方面与您的数据库选择决策特别相关:

1.每3秒更新一次

MongoDB 有一个数据库级别的写锁通常是短暂的),可以阻止读操作。这意味着您需要确保有足够的内存来适应您的工作集,并且通常不会遇到任何写锁定问题。请注意,批量插入将使写锁保持更长时间。

如果您正在进行分片,您将需要考虑允许写入扩展的分片键,即在不同的分片上分布写入。

2、多进程共享存储

这是一个很常见的场景;事实上,许多 MongoDB 部署都需要从多个进程同时访问。与写锁不同,读锁不会阻止其他读取。

3. 热冗余

通过MongoDB 复制支持。如果您想从辅助服务器读取数据,则需要在驱动程序中将读取首选项设置为。secondaryPreferred