5

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

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

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

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

4

1 回答 1

3

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

1.每3秒更新一次

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

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

2.多进程共享存储

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

3. 暖冗余

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

于 2013-02-27T21:54:49.310 回答