2013-06-12 2 views
0

두 개의 모음 (A 및 B)에 각각 ~ 70,000 개의 문서가 있습니다. A와 B를 비교한다면 95 %의 문서가 같을 것이고 5 % 만 다를 것입니다. 각 문서의 구조는 A와 B 모두에서 완전히 동일합니다. A는 상수 모음이며 B는 임시 모음입니다. B를 A로 병합하려고합니다. B의 문서가 A -> 업데이트 "dateLastSeen"필드에만있는 경우. B에있는 문서가 A에없는 경우 ->이 문서를 A에 삽입하십시오.MongoDB는 2 개의 매우 유사한 콜렉션을 병합합니다. 기존 문서 - 업데이트, 새 문서 - 삽입

... 파이썬 드라이버를 사용하고 있습니다.

가장 효율적인 방법은 무엇입니까? 감사합니다.

+0

같은 ID가 있다면 비교해보십시오. – gustavohenke

+0

시도한 내용은 무엇입니까? 둘 다의 목록을 가져 와서 메모리에서 비교하고 필요에 따라 해당 필드를 업데이트 할 수있는 것처럼 보입니다. – WiredPrairie

답변

0

쿼리 측면에서 가장 효율적인 것은 날짜별로 한 번에 업데이트해야하는 모든 날짜를 일괄 업데이트하고 삽입이 필요한 모든 문서를 대량 삽입하는 것입니다.

A.dateLastSeen을 B.dateLastSeen으로 업데이트하려는 곳에 95 % 동일한 문서가 있다고 가정합니다. 단일 업데이트로 ~ 66,500 업데이트. ~ 3,500 개의 인서트 남기기.

B와 A를 모두 메모리에로드하면 처리가 가능합니다.

대량 삽입 목록을 만들고 B의 문서가 A에 누락 된 경우 언제든지 추가 할 수 있습니다. dateLastSeen의 키 업데이트 일괄 업데이트 사전에는 업데이트 할 문서 목록이 들어 있습니다. 일치하는 dateLastSeen 값의 확률에 따라 이것이 실제로 가치가 있는지 확인하십시오.

또는 높은 쿼리 비용을 수용하고 B를 1000의 일괄 처리로 시작하고 A에 1000을로드하고 비교/대량 삽입을 비교하면됩니다. 메모리 인쇄를 유지하고 데이터 배치를 가져 오는 데 총210 개의 추가 쿼리 만 추가합니다 (B에서 70 개 배치 페치, A에서 70 개 및 70 개 대량 삽입).

+0

어떤 옵션을 선택 했습니까? – Ross

관련 문제