점진적으로 집계하려는 데이터에 문제가 있습니다.MongoDB Map/적응 형 쿼리로 단계적으로 줄입니다.
나는 장치기록 컬렉션의 DB에 저장되어있는 조치를 방출 (장치 모음에 저장된 많은,) (NOT 정기적으로)이있다. 각 레코드에는 데이터가 저장된 시간 소인이 아니지만 측정 된 곳의 시간 소인 인 timestamp_utc가 있습니다. (장치가 많은 측정 값을 전송하기 때문에 완전히 다릅니다.)
내가 원하는 것은 점진적으로 모든 다른 장치에 대해 다른 비율로 배치 데이터 집계 (Map Reduce)입니다. 예를 들어 매 5 분마다, 매 30 분마다, ... 매일 매일 등의 평균 측정 값을 가진 컬렉션을 원합니다. 매번 전체 데이터를 처리하고 싶지는 않지만 새로운 항목 만 처리하려고합니다.
예는 : 기록 컬렉션이 포함되어
{ _id : {device1, time : ISODate(2011-10-12T13:50:01Z)}, value : { meas1 : 2, meas2 : 4}},
{ _id : {device1, time : ISODate(2011-10-12T13:51:01Z)}, value : { meas1 : 1, meas2 : 6}},
{ _id : {device2, time : ISODate(2011-10-12T13:49:01Z)}, value : { meas1 : 3, meas2 : 7}},
{ _id : {device2, time : ISODate(2011-10-12T13:50:01Z)}, value : { meas1 : 4, meas2 : 8}},
{ _id : {device2, time : ISODate(2011-10-12T13:51:01Z)}, value : { meas1 : 5, meas2 : 9}},
scale1 데이터 통합 (매 5 분) 후 나는 모든 판매
{ _id : {device1, time : ISODate(2011-10-12T13:50:00Z)}, value : { meas1 : 1.5, meas2 : 5}},
{ _id : {device2, time : ISODate(2011-10-12T13:45:00Z)}, value : { meas1 : 3, meas2 : 7}},
{ _id : {device2, time : ISODate(2011-10-12T13:50:00Z)}, value : { meas1 : 4.5, meas2 : 8.5}},
기타 뭔가를해야합니다. 이 데이터를 처음 생성하는 것은 당연히 큰 문제가 아니며 매우 일반적인 맵/축소 작업입니다.
db.record.mapReduce(map, reduce, {finalize : finalize, out : { merge : db.recordscale1 }});
점진적 맵 축소를 수행하려는 경우 문제가 발생합니다. 사실 나는이
db.record.mapReduce(map, reduce, {query : { "_id.time_utc" : { $gte : timeMin } }, finalize : finalize, out : { merge : db.recordscale1 }});
문제처럼 sthg 않는 싶습니다 timeMin 각 장치에 대해 서로 다른 것을, 그것은 출력 콜렉션에 삽입 (time_utc으로 분류) 마지막 항목에 해당한다.
많은 기술을 성공적으로 사용하지 못했습니다 (insertion_time ... 사용).
어떻게 처리 할 수 있습니까?
너무 낮을 것이므로 장치마다 mapreduce를 수행하지 않으려합니다.