찾다

 >  Q&A  >  본문

mongodb - Python中mongo 高效排序

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

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

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

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

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

PHP中文网PHP中文网2810일 전472

모든 응답(3)나는 대답할 것이다

  • PHPz

    PHPz2017-04-18 09:38:48

    필터링해야 하는 해당 필드에 대해 mongodb의 인덱스를 활성화합니다(mongodb는 하나의 컬렉션에서 여러 인덱스를 지원합니다). 즉, 해시테이블을 사용하므로 훨씬 빠르며 정렬을 위해 mongodb 자체 API를 사용할 수 있습니다. , 저는 100W의 상황을 접해본 적이 없는데, 1~10W의 크기가 500ms 안에 들어가는 것 같다는 기억이 나네요.

    또한 계산해야 하는 데이터가 매우 중요하고 호출 빈도가 높은 경우 별도의 컬렉션을 만들고 정기적으로 큐 캐시를 호출하며 시간을 위해 공간을 거래하는 것이 좋습니다. 이 컬렉션은 다음을 가질 수 있습니다. 필드, 사용자 ID, 최근 3시간 동안의 총 구매 건수, 지난 12시간, 지난 24시간, 지난 1일, 지난 달, 과거 총 구매 량 등이 표시됩니다. 공간이 낭비되고 실시간으로 데이터를 반영할 수 없다는 장점이 있지만, 사용자의 쇼핑량을 쿼리하고 싶다면 밀리초 단위로 간단히 쿼리할 수 있다는 이점이 있습니다.

    위 내용은 한 가족의 의견이며 참고용입니다

    회신하다
    0
  • 巴扎黑

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

    모든 수집 데이터를 메모리에 로드한 후 처리할 수 있습니다.

    회신하다
    0
  • ringa_lee

    ringa_lee2017-04-18 09:38:48

    Mongodb는 여러 컬렉션의 데이터를 처리하는 데 능숙하지 않으므로 데이터 자체를 설계할 때 모두 함께 집계하는 것이 가장 좋습니다.

    단일 컬렉션의 쿼리에 대한 인덱스를 생성합니다. 쿼리 사용 순서는 기본 쿼리 -> 집계 -> 맵리듀스입니다. 쿼리 방법은 왼쪽에서 오른쪽으로 점점 더 유연해지며 쿼리 효율성은 다음과 같습니다. 점점 낮아지고 있습니다.

    여러 컬렉션 쿼리는 직접 구현해야 하며, 각 컬렉션에서 별도로 쿼리하고 여러 쿼리 결과를 처리해야 합니다.

    특히 적시성 요구 사항이 높은 경우 중간 캐시 레이어를 사용하고 업데이트 전략을 설계하세요.

    회신하다
    0
  • 취소회신하다