搜尋

首頁  >  問答  >  主體

mongodb - Python中mongo 高效排序

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

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

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

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

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

PHP中文网PHP中文网2810 天前468

全部回覆(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
  • 取消回覆