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

时间:2018-03-01 00:45:46

标签: python mongodb performance rest 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转换,性能和带宽费用?

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

我认为我应该可以通过某种类型的聚合来实现这一点,但目前尚不清楚如何将我的修订与我的FileIO读取合并。

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

1 个答案:

答案 0 :(得分:1)

我做了一些调查和捣乱,并提出了以下聚合管道。我不知道它是否有效,但我做了我需要做的事情。我想我很了解它是如何工作的,但是双重分组似乎应该是不必要的。

<div class="modal modal-danger fade"  id="modal-danger">
          <div class="modal-dialog">
            <div class="modal-content">
              <div class="modal-header">
                <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                  <span aria-hidden="true">×</span></button>
                <h4 class="modal-title">Warning</h4>
              </div>
              <div class="modal-body">
                <p>Do you want to delete this row không? <?php echo $id?></p>
              </div>
              <div class="modal-footer">
                <button type="button" class="btn btn-outline pull-left" data-dismiss="modal">Đóng</button>
                <form  method="POST" action="{{ route('sinhvien.destroy',['sinhvien' => $id])}}">{{ method_field("DELETE")}}
                       {{csrf_field()}}<input type="submit" name="btnxoa" class="btn btn-danger" value="Delete"></input></form>
              </div>
            </div>
            <!-- /.modal-content -->
          </div>
          <!-- /.modal-dialog -->
        </div>  

这会产生以下类型的记录:

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