根据MongoDB中的分钟粒度检索一个月的数据

时间:2014-12-16 09:11:43

标签: python django mongodb mongodb-query

def getPacketLength(self,groupid,lasttime,tapid):

    pkt_collection = db['tap_pkts']
    reqtime= [1417177485,1417177500,........,1414585185] 
    total_sum=0

    resultset=[{"$match":{"groupid":int(groupid),
               "$and":[{"first_time":{"$lte":reqtime}},{"time": {"$gte":reqtime}}],
               "tapid":int(tapid)}},
            {'$group':{'_id':'','packetlength':{'$sum':'$pkt_length'}}}]

    sum_resultset=pkt_collection.aggregate(pipeline=resultset)

   return

目标:

我需要为每5分钟的时间间隔检索一个月的数据。

我有时间阿瑞说,有2000个时间间隔。

timeArray=[1417177485,1417177500,........,1414585185] 

从这个时间开始,每次我必须在数据库集合中进行迭代和比较,这次timeArray必须大于等于或小于等于#first_time'和'时间' DB中的字段。如果这个条件是满足的,那么' pkt_length'集合的字段和存储在数组中。在timeArray中一直重复这个。

output:
sumOfPktLengths=[4,9,..........6]

面临问题:(绩效问题)

现在我在函数内部编写mongo查询,并在timeArray中为每个值(时间)编写我从服务器调用此函数,该服务器将执行单个值(时间)的查询并将输出返回给服务器timeArray中的每个值(时间)。 因此,如果我的时间timeArray大小是2000服务器将命中DB f0r 2000次。 所以每次进行数据库和服务器交互都会降低性能。因此,每次代替服务器与Db交互,我需要为查询级别本身的每个值(时间)迭代timeArray,并将值数组发送回服务器。

output:
sumOfPktLengths=[4,9,..........6]
return sumOfPktsLength

文件:这是与通讯相关的项目

在Mondodb我的收藏中包含以下数据,我只包含一个文件

db.collections.find()

{
"_id" : {
    "hash" : "d5229340b53f0493bb391c06f479da6d0ddb7327b7413414844c5309"
},
"count" : 28719,
"latency" : [
    0
],
"first_time" : 1416810981.083066,
"cal_debug" : true,
"tuple" : {
    "sip" : "192.162.2.1",
    "dip" : "192.162.2.2",
    "groupid" : 3,
    "proto" : 1
},
"tapid" : 5,
"drop" : false,
"pkt_length" : 102,
"groupname" : "TapGroup-1",
"swap" : false,
"time" : 1417444470.313817,
"path" : [
    5
],
"filter_bits" : 56,
"groupid" : 3,
"hash" : "d5229340b53f0493bb391c06f479da6d0ddb7327b7413414844c5309",
"tapname" : "t-1"

}

以上是集合中的一个文档。本文档包含" first_time"和"时间"领域。 "时间"将永远是第一次"。

" FIRST_TIME"是数据包传输的开始时间和"时间"是数据包传输的结束时间。

要绘制1个月数据的图表,我们将采用currentdate-1month = reqtime

从每5分钟一次的请求时间开始,我们将获得一个时间列表,我们可以在下面的请求中看到它作为数组形式。

reqtime = [17464544,............,171755378]将包含5分钟间隔1个月的时间戳

来自“reqtime'”的数组。对于数组中的每个值,我们将比较时间是否介于" first_time"和"时间"如果是,请加上" pkt_length"对于所有匹配的文档。然后在reqtime中对下一个值重复相同的过程,依此类推......直到它达到reqtime中的最后一个值。

这是我尝试实施的过程。而不是将所有时间一直存储在reqtime中作为数组然后进行比较..如果你觉得任何其他建议哪个查询本身每隔5分钟间隔1个月..你可以建议我。

0 个答案:

没有答案