데이터 저장소로 mongo를 사용하는 레일 응용 프로그램이 있습니다. Mongo는 3 개의 쿼리 라우터와 16 개의 샤드로 구성됩니다. 내가 다음과 같이하면 :mongoid 쿼리가 실제로 열거자를 사용하는 것과 다른 수를 반환합니다.
count = Item.where(:confirmed => true).count
약 800,000 점이 있습니다. 나는 실제로 항목을 도보로 일괄 처리를 실행할 때, 카운트는 실질적으로 작 :
batch_size = 10000
offset_count = 0
completed_count = 0
# prime the pump
q = Item.where(:confirmed => true).limit(batch_size).skip(offset_count * batch_size).to_a
while q.count > 0
# do something
completed_count += q.count
offset_count += 1
q = Item.where(:confirmed => true).limit(batch_size).skip(offset_count * batch_size).to_a
end
# here, completed count is << count (where "count" is the initial .where count)
어떤 생각이 여기에 무슨 일이야? 몽고는 지수로 계산하지 않고 총계를 계산합니까?
FWIW에 대한 항목에 대한 색인이 있습니다. 확인되었습니다. 인덱스를 손상시키지 않으려면이 항목을 실행하기 전에 인덱스를 다시 만듭니다.
도움 주셔서 감사합니다. 케빈
답장을 보내 주셔서 감사합니다. 정렬을 추가해 보았습니다. 아무런 차이가 없었습니다. 여전히 첫 번째 쿼리에서 반환 된 항목 수의 절반 정도만 얻었습니다. – user1130176