Mongodb 大型mongo更新队列突发问题

Mongodb 大型mongo更新队列突发问题,mongodb,Mongodb,我正在用mongo做一些用户分析跟踪。根据用户的电子邮件地址,我平均每秒更新200次文档(约40万次)。有3个碎片按字母顺序沿电子邮件拆分。除了日常用户状态更改脚本之外,它工作得非常好。它将请求速度提高到每秒约6k 这会导致尾旋效应,使mongo队列过载,并且它似乎再也赶不上了。脚本失败,老板生气,等等。他们也不允许脚本被限制。由于它们是更新操作而不是插入操作,因此无法批量提交。我看到的是我的选择 1:)找到一种方法将大型队列分配给mongo,以便它可以等待低点并更新数据 2:)编写自定义节流解

我正在用mongo做一些用户分析跟踪。根据用户的电子邮件地址,我平均每秒更新200次文档(约40万次)。有3个碎片按字母顺序沿电子邮件拆分。除了日常用户状态更改脚本之外,它工作得非常好。它将请求速度提高到每秒约6k

这会导致尾旋效应,使mongo队列过载,并且它似乎再也赶不上了。脚本失败,老板生气,等等。他们也不允许脚本被限制。由于它们是更新操作而不是插入操作,因此无法批量提交。我看到的是我的选择

1:)找到一种方法将大型队列分配给mongo,以便它可以等待低点并更新数据

2:)编写自定义节流解决方案

3:)找到更有效的索引策略(目前仅对电子邮件地址进行索引)

桌上几乎什么都有


任何帮助都非常感谢

你的“每日用户状态改变脚本”在做什么?通过$PASS将一个小对象添加到文档上的一个数组中。不是答案,而是在调用更新之前考虑“加热”文档。您可以通过在更新之前调用find将其放入ram来实现这一点。此外,考虑随机更新。如果您是按ascii顺序更新的,那么通过一次强制一个节点进行所有更新,可能会破坏碎片集群的点。如果您可以随机更新,那么就可以更好地利用碎片集群。最后,在我的非科学测试中,我得到大约500次商品硬件更新/碎片/秒。很明显,那里有成吨的VAR。您可能需要一个更大的集群您可以共享一个示例文档和状态更改更新吗?您还可以共享此集合上的索引吗?