복붙노트

[MONGODB] MongoDB를 '카운트 ()'매우 느립니다. 우리는 어떻게 그것으로 주위에 / 작업을 수정합니까?

MONGODB

MongoDB를 '카운트 ()'매우 느립니다. 우리는 어떻게 그것으로 주위에 / 작업을 수정합니까?

나는 현재 데이터 레코드의 수백만 MongoDB를 사용하고 있습니다. 나는 꽤 짜증 한 가지를 발견했다.

내가 쿼리 데이터 수집 적은 수의 '수 ()'기능을 사용하면 매우 빠른입니다. 조회 된 데이터 수집 데이터 레코드의 수천 또는 수백만 포함되어있는 경우에는, 전체 시스템이 매우 느리게된다.

내가 필요한 필드를 색인을 확인했다.

사람이 동일한 일이 발생 했습니까? 그걸 어떻게 개선해야합니까?

해결법

  1. ==============================

    1.적절한 인덱스를 만드는 것보다 다른 최적화가 지금있다.

    적절한 인덱스를 만드는 것보다 다른 최적화가 지금있다.

    db.users.ensureIndex({name:1});
    db.users.find({name:"Andrei"}).count();
    

    일부 카운터가 필요하면 내가 때마다 수를 미리 계산하는 것이 좋습니다. 전혀 원자 $ INC의 동작 및 사용하지 않을 수 ({})를 사용함으로써.

    그러나 MongoDB를 열심히 MongoDB를들, 그래서, 수 ({}) 개선 그들은 JIRA 버그에 따라 MongoDB를 2.1 계획이다.

  2. ==============================

    2.당신은 인덱스가 정말 어떤 디스크 액세스없이 사용할 것을 보장 할 수 있습니다.

    당신은 인덱스가 정말 어떤 디스크 액세스없이 사용할 것을 보장 할 수 있습니다.

    하자 당신이 이름을 가진 레코드를 계산하고 싶은 말은 "안드레이을"

    당신은 이름에 인덱스를 확인합니다 (당신이했던 것처럼) 과

    db.users.find({name:"andrei"}, {_id:0, name:1}).count()
    

    당신은 경우 확인하여 (미리 계산 제외) 계산하는 가장 빠른 방법이라는 것을 확인할 수 있습니다

    db.users.find({name:"andrei"}, {_id:0, name:1}).explain() 
    

    사실에 index_only 필드 세트를 표시합니다.

    이 트릭은 당신의 쿼리는 램 (인덱스)가 아닌 디스크에서 레코드를 검색 할 수 있도록 할 것이다.

  3. ==============================

    3.나를 위해이 솔루션은 스파 스로 변경 지수이었다. 그것은 당신이 할 수있는 경우에 단지 한번 시도해, 특정 상황에 따라 달라집니다.

    나를 위해이 솔루션은 스파 스로 변경 지수이었다. 그것은 당신이 할 수있는 경우에 단지 한번 시도해, 특정 상황에 따라 달라집니다.

    db.Account.createIndex( { "date_checked_1": 1 }, { sparse: true } )
    
    db.Account.find({    
         "dateChecked" : { $exists : true }    
    }).count()
    

    컬렉션의 318 개 수천 기록

  4. ==============================

    4.당신은 MongoDB의에서 계산 지금은 행운의 거의 밖으로 끔찍 더 나은 가까운 미래에 점점되지 않습니다. 참조 : https://jira.mongodb.org/browse/SERVER-1752

    당신은 MongoDB의에서 계산 지금은 행운의 거의 밖으로 끔찍 더 나은 가까운 미래에 점점되지 않습니다. 참조 : https://jira.mongodb.org/browse/SERVER-1752

    매우 드물게 발생 한 시간 일이 뭔가, 또는 데이터베이스가 아주 작은 경우를 제외하고 경험에서, 당신은 그것을 사용하지 꽤 많이 안됩니다.

    앤드류 Orsich가 언급 한 바와 같이, 사용 카운터 때마다 (에 관계없이 카운터에 몰락은 글로벌 쓰기 잠금이지만, 더 나은 수보다 ()) 가능합니다.

  5. from https://stackoverflow.com/questions/7658228/mongodb-count-is-very-slow-how-do-we-refine-work-around-with-it by cc-by-sa and MIT license