搜索

首页  >  问答  >  正文

mongodb - Python中mongo 高效排序

1.如何使用python对mongodb中的多个collection中的数据分析后做排序?

2.具体的使用场景是这样的,假设有如下model: 用户表,用户购买记录表。

假设记录表中存有用户每次买东西所花的钱,那么问题来了,如何将用户已购买东西花费金额的
累计和(假设此类统计字段有5个),做降序排列?

3.场景为我为了说明问题虚构的,事实上有很多统计字段,假设用户表中有100w条记录,记录表100w条数据,服务器4核8线程,能否做到每20条数据的等待时间不超过3s?

4.假设在统计完每个用户的所有数据后用sorted进行排序,是否效率真的会很低?

PHP中文网PHP中文网2809 天前466

全部回复(3)我来回复

  • PHPz

    PHPz2017-04-18 09:38:48

    对你需要筛选的相应字段开启mongodb的index(mongodb一个collection下面支持多个index), 也就是索引, 由于采用的是hashtable, 所以应该会快很多, 而且可以用mongodb自己的api做sort, 100W的情形没遇到过, 但是1~10W的规模记得好像是500ms以内, 作为对比, 不开索引简直卡的生活不能自理

    另外如果你需要统计的这个数据很重要, 且调用频率很高的话, 建议单独整一个collection, 定期调用队列缓存, 用空间换时间, 这个collection可以有以下几个字段, 用户id, 近3小时买买买的总和, 近12小时, 近24小时, 近1天, 近1月, 过去总剁手量等, 这样做的缺点就是浪费了点空间, 还有并不能实时反映数据, 但好处显而易见, 要查询一个用户剁手量简单查询即可, 毫秒级响应

    以上, 一家之言, 仅供参考

    回复
    0
  • 巴扎黑

    巴扎黑2017-04-18 09:38:48

    可以把collection数据都载入内存再做处理。

    回复
    0
  • ringa_lee

    ringa_lee2017-04-18 09:38:48

    mongodb不擅长处理多个collections的数据,所以数据本身设计的时候最好全部聚合到一起。

    针对单个collections的查询建立索引,查询的使用顺序:基本查询->aggregation->mapreduce,查询方法从左到右越来越灵活,查询效率越来越低。

    多个collections的查询就需要自己实现,分别从各个collections进行查询,对多个查询结果进行处理。

    对时效性要求特别高的,使用中间缓存层并设计更新策略。

    回复
    0
  • 取消回复