2014-12-31 5 views
0

나는 서버에 mongod 인스턴스를 가지고 있으며 이전 데이터가 매일 삭제되었습니다 (데이터는 30 일 동안 만 유지됩니다). 다른 측면에서 나는 전체 데이터와 내 클라이언트에 데이터베이스의 미러 복사본을 가지고 내 클라이언트 (내가 서버에서 삭제 된 클라이언트에있는 모든 오래된 데이터를 유지해야합니다) 제거 지침을 적용하고 싶지 않아.보조 데이터를 삭제하지 않고 mongodb 복제

어떤 유형의 복제가 도움이 될까요?

+0

클라이언트의 데이터베이스 미러링 복제 란 무엇입니까? 클라이언트에 데이터를 저장 하시겠습니까? 유스 케이스가 무엇인지 자세히 설명해 주시겠습니까? – wdberkeley

답변

0

데이터가 필요한 경우 (bonafide db 미러 대), 매일, 매주, 매월 백업을 순환하는 automysql 백업 auto mongobackup을 기반으로하는이 백업 스크립트를 살펴보십시오. 데이터를 삭제하기 직전에이 작업을 실행하십시오 (배치 프로세스라고 가정). 그것의 간단하고 기꺼이하는 적응 시키십시오. 미러가 필요한 경우 내보내기를 기반으로 mongo 가져 오기 스크립트를 작성할 수 있습니다.

------ 편집 ----

주어진 코멘트 (crontab을 사용) 주기적으로 실행되는 mongo shell script을 고려하십시오.

// mirror every 10 seconds 
db.collection.find({"is_mirrored" : { $exists: false } }).forEach(function(doc) { 
    db.mirror.insert(doc); 
    db.collection.update({doc._id}, {"is_mirrored": true}, {upsert: false}); 
} 

미러링 된 데이터베이스가 아닌 '미러링 된 테이블'을 생성합니다. 미러 DB에는 연결이 필요하므로 행을 따라 추가하십시오.

var mirrordb = connect ("localhost : 27020/mirrored_db"); // 또는 기타 유효한 CONN 문자열 mirrordb.collection.insert (문서)는 삼십일 오래된 물건을 제거하기 위해 위의 삽입

다른 대체 //.

var now = ISODate(); 
var ago = now - (30 * 86400 seconds); //some javascript to subtract 30 days 

// find all date that is less (or older) than 30 days old 
db.collection.find({"created_date" : {$lt : ago }}).forEach(function(doc) { 
    db.collection.remove(doc._id);  // remove the 30 day old data 
} 
+0

백업/복원 시스템이 나에게 적합하지 않습니다. 긴 지연없이 클라이언트에 신선한 데이터가 필요합니다 (약 10 초 지연이 좋음) – Beygi

+0

대답이 나에게 아이디어를주었습니다. 감사합니다. – Beygi

관련 문제