私は単純なコレクションを持っています:
{
"_id" : ObjectId("5033cc15f31e20b76ca842c8"),
"_class" : "com.pandu.model.alarm.Alarm",
"serverName" : "CDCAWR009 Integration Service",
"serverAddress" : "cdcawr009.na.convergys.com",
"triggered" : ISODate("2012-01-28T05:09:03Z"),
"componentName" : "IntegrationService",
"summary" : "A device which is configured to be recorded is not being recorded.",
"details" : "Extension<153; 40049> on CDCAWR009 is currently not being recorded
properly; recording requested for the following reasons: ",
"priority" : "Major"
}
コレクションには、そのようなドキュメントが数百万件ほどあります。サーバー名でグループ化し、すべてのサーバー名の数を取得しようとしています。RDBMS クエリの観点からは単純に思えます。
The query that I have come up with is
db.alarm.group( {key: { serverName:true }, reduce: function(obj,prev) { prev.count++ }, initial: { count: 0 }});
また、serverName にインデックスを追加しました。
> db.alarm.getIndexes()
[
{
"v" : 1,
"key" : {
"_id" : 1
},
"ns" : "test.alarm",
"name" : "_id_"
},
{
"v" : 1,
"key" : {
"serverName" : 1
},
"ns" : "test.alarm",
"name" : "serverName_1"
}
]
ただし、13 秒後に mongodb で応答が返されます。一方、SQLサーバーでは、同様のクエリが4秒以内に返され、インデックスもありません。
不足しているものはありますか?
ありがとうございます。