여러 개의 키로 "구별"을 효율적으로 수행하는 방법은 무엇입니까?
예를 들어 다음과 같은 컬렉션이 있습니다.
{시장: '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
'programing' 카테고리의 다른 글
RouterModule.for 루트(ROUTES) vs RouterModule.어린이용(ROUTS) (0) | 2023.05.02 |
---|---|
'사용' 지시어는 C#에서 네임스페이스 내부에 있어야 합니까 아니면 외부에 있어야 합니까? (0) | 2023.05.02 |
중첩된 딕트의 Python 데이터 클래스 (0) | 2023.05.02 |
Excel에서 GUID를 만드는 방법은 무엇입니까? (0) | 2023.05.02 |
SQL 서버 백업을 Azure SQL 데이터베이스로 복원 (0) | 2023.05.02 |