【发布时间】:2013-11-26 08:57:45
【问题描述】:
我不确定这个问题是否属于这里,因为它仅基于理论,但是我认为与其他问题相比,这最适合这个 stackexchange。
我有 500,000 辆出租车,里面装有 Android 4 电脑。每天,在一个人或一方旅行后,计算机会将有关旅行的信息发送到 Node.js 服务器。每天大约有 35 次行程,这意味着 500,000 辆出租车 * 35 次行程 = 17,500,000 份报告每天发送到 Node.js 服务器。此外,每份报告中大约有 4000 个字符,大小约为 5KB。
出租车计算机发送到 node.js 服务器的报告只是一个 http 帖子。然后 Node.js 将向出租车发回确认信息。如果出租车在规定的时间内没有收到报告 A 的确认,它将重新发送报告 A。
node.js 服务器只接收报告。将确认信息发送回出租车。然后将完整的报告发送到 MongoDB。
一个潜在的问题:出租车 1 将报告 A 发送到 node.js。 Node.js 在分配的时间内没有响应,因此 Taxi 1 将报告 A 重新发送到 node.js。 Node.js 最终会处理所有内容并将报告 A 两次发送到 MongoDB。
因此,MongoDB 负责检查它是否收到了多个相同的报告。然后 MongoDB 插入数据。
我实际上有几个问题。这对 NodeJS 来说是不是太多了(我不这么认为,但这可能是个问题)?这对 MongoDB 来说是否太多了?我觉得检查重复报告可能会严重影响性能。
如何让整个系统更高效?我应该更改或添加什么?
【问题讨论】:
-
我会给你的报告一个哈希值(可能来自旅行的时间戳和出租车 ID),索引它们并将它们缓存在你的 node.js 服务器中一定的时间。如果您收到报告,只需检查最近的哈希值,如果您已经拥有此哈希值,则不要进一步处理
-
不是每次旅行都通知服务器,你能把一组旅行的数据发送到服务器吗?就像每 7 次旅行后,您将向服务器发送数据。这样,每辆出租车的请求/响应数量将减少。
-
同意 RafaelT。最好生成哈希,然后发送报告。有什么让我感到困扰的是,一次最大并发出租车请求是多少?在一天中平均分配 17,500,000 个请求是没有意义的。您的 500,000 辆出租车将迎来高峰期。知道这个数字很重要。
-
@Shrikant 是的,这当然是可能的,因为当前系统现在每天结束时都会发送一个日志文件。但“实时”方面似乎有某种光芒(至少在公司眼中)。
标签: android node.js mongodb performance database