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

标签 mongodb performance multiprocessing shared-memory database

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

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

一切似乎都指向 MongoDB,但我希望您确认 MongoDB 将满足我的需求。所以你认为这是一个去吗? -谢谢

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

最佳答案

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

1.每 3 秒更新一次

MongoDB 有一个 database level write-lock (通常短暂的)阻止读取操作。这意味着您需要确保您有足够的内存来容纳您的working set。 ,并且您通常不会遇到任何写锁定问题。请注意,批量插入将保持写锁定的时间更长。

如果您要进行分片,则需要考虑允许 write scaling 的分片键。即在不同的分片上分配写入。

<强>2。多个进程的共享存储

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

3.热冗余

通过 MongoDB replication 支持.如果您想从辅助服务器读取,您需要设置 Read Preference到您的驱动程序中的 secondaryPreferred

关于mongodb - MongoDB 是否可用作并行处理/多实例应用程序的共享内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15120901/

相关文章:

javascript - mongoDB 通过查找获取 'undefined'

MongoDB Atlas 副本集名称

javascript - 模拟调用 'upvote' 的效果时出现异常。类型错误 : undefined is not a function

performance - 在 clojure 中添加两个整数数组的最快方法是什么?

Java 简单图形循环很慢

performance - AVL 树上的二叉搜索树

python多处理池超时

python - 在多个实时线程之间共享字典

javascript - 从客户端的 mongo _id 中提取日期

c# - 创建在所有进程之间共享状态的多进程架构的最轻量级解决方案是什么