programing

여러 개의 키로 "구별"을 효율적으로 수행하는 방법은 무엇입니까?

bestprogram 2023. 5. 2. 23:03

여러 개의 키로 "구별"을 효율적으로 수행하는 방법은 무엇입니까?

예를 들어 다음과 같은 컬렉션이 있습니다.

{시장: 'SH', 코드: '000001', 날짜: '2012-01-01', 가격: 1000}
{시장: 'SZ', 코드: '000001', 날짜: '2012-01-01', 가격: 1000}
{시장: 'SH', 코드: '000001', 날짜: '2012-01-02', 가격: 1000}
{시장: 'SZ', 코드: '000001', 날짜: '2012-01-02', 가격: 1000}
{시장: 'SH', 코드: '000002', 날짜: '2012-01-03', 가격: 1000}
...

이 컬렉션에는 수천만 개의 문서가 들어 있습니다.

두 개의 키로 구분하여 통화하고 싶습니다.

collection.distinct('market', 'code');

결과를 얻을 수 있습니다.

[{시장: 'SH', 코드: '000001', {시장: 'SZ', 코드: '000001', {시장: 'SH', 코드: '000002'}]

네이티브 고유 명령은 하나의 키만 허용하기 때문에 map-reduce를 사용하여 구현하려고 합니다.하지만 지도 축소는 네이티브 구별하기에는 너무 느립니다.저의 원키 구별 테스트에서 지도 축소는 네이티브 구별보다 약 10배 더 오래 걸립니다.
멀티키를 개별적으로 구현할 수 있는 효율적인 방법이 있습니까?

MongoDB의 다가오는 2.2 릴리스를 기다릴 의향이 있다면 집계 프레임워크를 사용하여 이 쿼리를 효율적으로 실행할 수 있습니다.

collection = db.tb;
result = collection.aggregate( 
            [
                {"$group": { "_id": { market: "$market", code: "$code" } } }
            ]
        );
printjson(result);

제 테스트 머신의 백만 개의 레코드 컬렉션에서 지도/축소 버전이 1분 이상 걸리는 동안 4초 만에 실행되었습니다.

언급URL : https://stackoverflow.com/questions/11973725/how-to-efficiently-perform-distinct-with-multiple-keys