Mongo查询返回每个节点的最后更新时间
Posted
技术标签:
【中文标题】Mongo查询返回每个节点的最后更新时间【英文标题】:Mongo query to return the last update time of each node 【发布时间】:2013-07-26 02:34:09 【问题描述】:我们有一百台计算机在运行,每台计算机会在几分钟内发送一次心跳。我们在 mongodb 数据库中捕获这些心跳。现在我们想检查他们最后一次发回心跳是什么时候。我们有一个解决方案是查询每个节点并取回其最后一次心跳时间。但这将向数据库引入与我们拥有的节点数量相同数量的查询。我们想知道是否有更简单的方法来做到这一点。
更具体地说,我们将来自节点的每个心跳存储在单独的文档中,如下所示
"_id" : ObjectId("51d173adedfce2c67fe04c4a"),
"nodeId" : 260,
"heartBeat" : NumberLong(1374778030),
"status" : "DEPLOYED"
【问题讨论】:
您能否提供更多信息:1. # 您计划在此集合中保留的文档 2. 此集合是否已分片,如果是,当前密钥是什么 3. 您多久查询一次节点的最新心跳? 4. 任何其他关键查询。谢谢 【参考方案1】:您可以从ObjectId 获取时间。按节点id查询,然后按ObjectId排序,从最新文档的objectId中获取时间戳。这将是您的最后一次 ping 时间。
见Here。和Here。
【讨论】:
【参考方案2】:与 Dylan 的评论相同,您可能应该提供更多信息以获得最佳响应。除了他的 cmets,我想到的一个问题是,如果您每次寻找心跳时都进行全面扫描。也就是说,您可以将文档中的一些节点分组为数组(或根据访问模式创建新集合)并在应用层进行操作。
【讨论】:
以上是关于Mongo查询返回每个节点的最后更新时间的主要内容,如果未能解决你的问题,请参考以下文章