我不确定这个问题是否属于这里,因为它完全基于理论,但我认为这与其他问题相比在这个堆栈交换中最合适。
我有500,000辆出租车,里面装有Android 4电脑。每天,在一个人或一方出行之后,计算机将有关旅行的信息发送到Node.js服务器。每天大约有35次旅行,因此这意味着每天向Node.js服务器发送500,000辆出租车* 35次旅行= 17,500,000份报告。此外,每个报告大约有4000个字符,大小约为5KB。
出租车计算机发送到node.js服务器的报告只是一个http帖子。然后Node.js会向出租车发回确认信息。如果出租车在规定的时间内未收到报告A的确认,则会重新发送报告A.
node.js服务器只接收报告。将确认信息发回出租车。然后将完整的报告发送给MongoDB。
一个潜在问题:出租车1向node.js发送报告A. Node.js在规定的时间内没有响应,因此Taxi 1将报告A重新发送到node.js. Node.js最终处理所有内容并将报告A两次发送到MongoDB。
因此MongoDB负责检查它是否收到多个相同的报告。然后MongoDB插入数据。
我其实有几个问题。这对NodeJS来说是否太过分了(我不这么认为,但这可能是一个问题)?这对MongoDB来说是否太过分了?我觉得检查重复报告可能会严重阻碍性能。
如何让整个系统更高效?我应该改变或添加什么?
答案 0 :(得分:1)
第一个潜在的问题很容易克服。计算行程的哈希并将它们存储在mongo中。将密钥放在该字段上,如果存在相同的散列,则比较每个下一个文档。这样检查重复将非常容易且非常快。请记住,此文档不应该像发送时间那样。
第二个问题:17,500,000 /天是196 /秒虽然听起来很可怕但实际上并不是那么好的服务器,对于Mongodb来说肯定不是问题。
很难说如何提高效率,我非常怀疑你现在应该考虑一下。试一试,做一些事情,检查哪些不能有效工作,然后回答具体问题。
P.S。不要在评论中回答所有这些。你必须明白这个问题非常模糊。没有人知道旅行证件是什么意思,它有多大。它可以是1kb,可能是10Mb,它可以是100Mb(比16Mb mongodb限制更大)。没人知道。当我说196个文件/秒不是问题时,我没有说这个数量的文件是最大上限,所以即使它会是2,3倍,但仍然听起来可行。
您必须亲自尝试。获取avarage amazon实例,查看每秒可以节省多少文档(创建与您的大小和结构接近的文档)。如果它无法处理它,试着看它能用多少,或亚马逊大实例可以处理它。
我粗略估计这是可能的,我不知道你想“使用MongoDB包含管理员,更新,选择”。你在问题中说过这个吗?