在Eve/mongodb中将记录收集到单个阵列中以减少带宽

2024-10-02 22:29:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个记录,它是一个性能抽样字典在我们的源代码的特定版本。我把这个存储在我们的eve数据库中。我们对每一次修订都进行了性能测试。我们有超过20000个版本。

我可以使用http://host/api/performance?projection={获取值文件IO.Reads“:1,“修订”:1},它为我提供20000条记录,其中包含以下内容:

{
    "_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将所有这些分组为^{{cd1>}或甚至^{cd2>}的形式,以最小化JSON转换、性能和带宽成本?

我应该在事件挂钩中自己处理吗?如果是,以什么方式?

我认为我应该能够用某种类型的聚合来完成这一点,但是不清楚如何将修订与FileIO读取合并。

我没有其他的想法,如何存储这些数据——我们只是每个版本都有一个性能值字典。


Tags: 版本id字典源代码记录revisionmin性能
1条回答
网友
1楼 · 发布于 2024-10-02 22:29:58

我做了一些调查和捣乱,并想出了下面的聚合管道。我不知道它是否有效,但它能满足我的需要。我想我有点理解它是如何工作的,但是双重分组似乎没有必要。在

db.getCollection('test_profiles').aggregate( [
    { $group: { 
        _id : { revision :"$revision", value : "$FileIO.Reads" }
    }},
    { $unwind : "$_id"},
    { $group: { 
        _id : null,
        values:
        { $push: "$_id" }
    }}
])

这将生成以下类型的记录:

^{pr2}$

相关问题 更多 >