优化从mongdb取数据python代码,用于出fusioncharts图

本文介绍了一种改进的方法来优化数据库查询效率,并通过减少游标操作和循环次数来提高图表数据展示的速度。该方法利用索引替代排序,将查询结果直接转化为列表形式,简化了数据处理流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原始代码

 

def ioBandwidth(request):
    beginDate = request.GET.get("beginDate")
    collection = getCollection()
    data = collection.find().sort("InsertDate",pymongo.ASCENDING)
    mscombi2d.categories = {"category": [{"label":time.strftime("%H:%M",time.strptime(d["InsertDate"],"%Y-%m-%d %H:%M:%S"))} for d in data]}
    data.rewind()#因为开始是用find返回的,所以是游标,取完后要回退到开始才能重新取
    temp = data.clone()#因为后面有两次,只能先把游标拷贝,以方便后面的取值

    mscombi2d.dataset = [
            {"seriesname": u"入带宽", "parentyaxis": "P", "color": "5a885e","renderas":"Area",
             "data": [{"value": (d["InBandwidth"])} for d in data]
        },
            {"seriesname": u"出带宽", "parentyaxis": "S", "renderas": "Line", "color": "dca657", "anchorbgcolor": "dca657",
             "data": [{"value": (d["OutBandwidth"])} for d in temp]
        }
    ]
    res = json.dumps(mscombi2d.to_dict(), ensure_ascii=False, sort_keys=True, indent=4)

    return HttpResponse(res)

 

修改后代码

 

 

def ioBandwidth(request):
    beginDate = request.GET.get("beginDate")
    collection = getCollection()
    data = [d for d in collection.find()]#把游标内数据存入list
    mscombi2d = MSCombi2D(u"大节点带宽",beginDate)
    mscombi2d.categories = {"category": []}
    mscombi2d.dataset = [
            {"seriesname": u"入带宽", "parentyaxis": "P", "color": "5a885e","renderas":"Area",
             "data": []
        },
            {"seriesname": u"出带宽", "parentyaxis": "S", "renderas": "Line", "color": "dca657", "anchorbgcolor": "dca657",
             "data":[]
        }
    ]
    labels = []#时间标签
    inband = []#入带宽
    outband = []#出带宽
    for d in data:
        labels.append({"label":time.strftime("%H:%M",time.strptime(d["InsertDate"],"%Y-%m-%d %H:%M:%S"))})
        inband.append({"value":"%s"%(d["InBandwidth"])})
        outband.append({"value":"%s"%(d["OutBandwidth"])})

    mscombi2d.dataset[0]["data"] = inband
    mscombi2d.dataset[1]["data"] = outband
    
    res = json.dumps(mscombi2d.to_dict(), ensure_ascii=False, sort_keys=True, indent=4)

    return HttpResponse(res)

 

 

1)从游标取出数据存入list,不需要再rewind和clone了

2)只用了一次循环,不像前面循环了三次。

3)查找用索引,而不要用sort

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值