0

100 台のコンピューターが実行されており、各コンピューターは数分に 1 回ハートビートを返します。これらのハートビートを mongodb データベースにキャプチャします。ここで、彼らが最後に心拍を送り返したのはいつかを確認したいと思います。解決策の 1 つは、各ノードに対してクエリを実行し、最後のハートビート時間を取得することです。しかし、それは私たちが持っているノードの数と同じ数のクエリをデータベースに導入します. それを行うためのより簡単なアプローチがあるかどうか疑問に思います。

より具体的には、次のように、ノードからの各ハートビートを別のドキュメントに保存します。

{
    "_id" : ObjectId("51d173adedfce2c67fe04c4a"),
    "nodeId" : 260,
    "heartBeat" : NumberLong(1374778030),
    "status" : "DEPLOYED"
}
4

2 に答える 2

2

ObjectIdから時刻を取得できます。ノード ID でクエリを実行し、ObjectId で並べ替えて、最新のドキュメントの objectId からタイムスタンプを取得します。これが最後の ping 時間になります。

ここを参照してください。とここ

于 2013-07-26T05:04:01.940 に答える
0

ディランのコメントと同じように、最適な応答を得るために、さらに情報を提供する必要があります。彼のコメントに加えて、心に浮かぶのは、ハートビートを探すたびにフルスキャンを行う場合です. つまり、ドキュメント内のいくつかのノードを配列としてグループ化 (またはアクセス パターンに基づいて新しいコレクションを作成) し、アプリ レイヤーで操作できる可能性があります。

于 2013-07-26T01:38:20.923 に答える