将 Eve/mongodb 中的记录收集到单个数组中以减少带宽
Collect records into single array in Eve/mongodb to reduce bandwidth
我有一个记录,它是我们源代码特定修订版的性能采样字典。我将其存储在我们的 eve 数据库中。我们对每个修订版都进行此性能测试。我们有超过 20,000 次修订。
我可以使用 http://host/api/performance?projection={"FileIO.Reads":1,"Revision":1} 获取值,这为我提供了 20,000 条记录,内容如下:
{
"_items" : [
{ "_id" : ... ,
"_updated": ...,
"_created":...,
"_etag":...,
"Revision":1000,
"FileIO" : {
{ "Reads": [20.34,10,30] } # avg/min/max
}
},
# next item
{ "_id" : ... ,
"_updated": ...,
"_created":...,
"_etag":...,
"Revision":1001,
"FileIO" : {
{ "Reads": [23,10,50] } # avg/min/max
}
}
# and so on
]
}
有没有办法问 Eve,或者更好的 MongoDB,将所有这些组合成 [ [Revision, Reads], [Revision, Reads]... ]
甚至 [Revision, Avg, Min, Max]
形式的单个值,以最小化JSON 转换、性能和带宽成本?
我应该在事件挂钩中进行自己的处理吗?如果是,是什么方式?
我想我应该能够通过某种类型的聚合来做到这一点,但不清楚如何将我的修订与我的文件 IO 读取合并。
我真的不知道如何存储这些数据 - 我们只有一个每次修订的性能值字典。
我进行了一些调查和研究,并提出了以下聚合管道。我不知道它是否有效,但它做了我需要它做的事情。我想我 kind-of 了解它是如何工作的,但双重分组似乎是不必要的。
db.getCollection('test_profiles').aggregate( [
{ $group: {
_id : { revision :"$revision", value : "$FileIO.Reads" }
}},
{ $unwind : "$_id"},
{ $group: {
_id : null,
values:
{ $push: "$_id" }
}}
])
这会产生以下类型的记录:
{
"_id" : null,
"values" : [
{
"revision" : 109999,
"value" : [
0.903873742,
0.00723229861,
1.23190153
]
},
{
"revision" : 109998,
"value" : [
0.903873742,
0.00723229861,
1.23190153
]
},
// .. and on and on
]
}
我有一个记录,它是我们源代码特定修订版的性能采样字典。我将其存储在我们的 eve 数据库中。我们对每个修订版都进行此性能测试。我们有超过 20,000 次修订。
我可以使用 http://host/api/performance?projection={"FileIO.Reads":1,"Revision":1} 获取值,这为我提供了 20,000 条记录,内容如下:
{
"_items" : [
{ "_id" : ... ,
"_updated": ...,
"_created":...,
"_etag":...,
"Revision":1000,
"FileIO" : {
{ "Reads": [20.34,10,30] } # avg/min/max
}
},
# next item
{ "_id" : ... ,
"_updated": ...,
"_created":...,
"_etag":...,
"Revision":1001,
"FileIO" : {
{ "Reads": [23,10,50] } # avg/min/max
}
}
# and so on
]
}
有没有办法问 Eve,或者更好的 MongoDB,将所有这些组合成 [ [Revision, Reads], [Revision, Reads]... ]
甚至 [Revision, Avg, Min, Max]
形式的单个值,以最小化JSON 转换、性能和带宽成本?
我应该在事件挂钩中进行自己的处理吗?如果是,是什么方式?
我想我应该能够通过某种类型的聚合来做到这一点,但不清楚如何将我的修订与我的文件 IO 读取合并。
我真的不知道如何存储这些数据 - 我们只有一个每次修订的性能值字典。
我进行了一些调查和研究,并提出了以下聚合管道。我不知道它是否有效,但它做了我需要它做的事情。我想我 kind-of 了解它是如何工作的,但双重分组似乎是不必要的。
db.getCollection('test_profiles').aggregate( [
{ $group: {
_id : { revision :"$revision", value : "$FileIO.Reads" }
}},
{ $unwind : "$_id"},
{ $group: {
_id : null,
values:
{ $push: "$_id" }
}}
])
这会产生以下类型的记录:
{
"_id" : null,
"values" : [
{
"revision" : 109999,
"value" : [
0.903873742,
0.00723229861,
1.23190153
]
},
{
"revision" : 109998,
"value" : [
0.903873742,
0.00723229861,
1.23190153
]
},
// .. and on and on
]
}