MongoDB 1.8 릴리스 노트
업그레이드 중
MongoDB 1.8 은 표준 증분 프로덕션 릴리스이며 다음을 제외하고 MongoDB 1.6 을(를) 바로 대체할 수 있습니다.
mapReduce
명령이 1.8 에서 변경되어 이전 릴리스와 호환되지 않습니다.mapReduce
는 더 이상 임시 컬렉션을 생성하지 않습니다(따라서keepTemp
가 제거되었습니다). 이제 항상out
값을 제공해야 합니다.mapReduce
문서에서out
필드 옵션을 참조하세요. MapReduce를 사용하는 경우 최신 버전의 클라이언트 드라이버가 필요할 수도 있습니다.
준비
업그레이드하기 전에 모든 릴리스 노트를 자세히 읽고 변경 사항이 배포에 영향을 주지 않는지 확인하세요.
독립형 업그레이드 mongod
v1.8.x를 다운로드합니다. MongoDB 다운로드 페이지에서바이너리를 다운로드합니다.
mongod
인스턴스를 종료합니다.기존 바이너리를 1.8.x
mongod
바이너리.MongoDB를 다시 시작합니다.
복제본 세트 업그레이드
1.8.x 세컨더리 는 1 에서 복제 할 수 있습니다 .6.x 프라이머리.
1.6.x 세컨더리는 1.8.x에서 복제 할 수 없습니다 . 프라이머리.
따라서 복제본 세트 를 업그레이드하려면 먼저 모든 세컨더리를 교체한 다음 프라이머리를 교체해야 합니다.
예를 들어 기본, 중재자 , 여러 개의 보조가 있는 복제본 세트가 있다고 가정해 보겠습니다. 세트를 업그레이드하려면 다음을 수행합니다.
중재자의 경우:
중재자를 종료합니다.
1.8.x로 다시 시작합니다. MongoDB 다운로드 페이지에서 바이너리를 다운로드합니다.
새 프라이머리가 선택되지 않도록 구성(선택 사항)을 변경합니다.
세트 멤버를 종료하기 시작하면 새로운 프라이머리가 선출될 수 있습니다. 이를 방지하려면 업그레이드하기 전에 모든 세컨더리에 우선 순위를
0
부여한 다음 나중에 다시 변경할 수 있습니다. 이렇게 하려면 다음을 수행합니다.현재 구성을 기록합니다.
rs.config()
를 실행하고 결과를 텍스트 파일에 붙여넣습니다.모든 세컨더리의 우선순위가
0
가 되도록 구성을 업데이트합니다. 예를 들면 다음과 같습니다.config = rs.conf() { "_id" : "foo", "version" : 3, "members" : [ { "_id" : 0, "host" : "ubuntu:27017" }, { "_id" : 1, "host" : "ubuntu:27018" }, { "_id" : 2, "host" : "ubuntu:27019", "arbiterOnly" : true } { "_id" : 3, "host" : "ubuntu:27020" }, { "_id" : 4, "host" : "ubuntu:27021" }, ] } config.version++ 3 rs.isMaster() { "setName" : "foo", "ismaster" : false, "secondary" : true, "hosts" : [ "ubuntu:27017", "ubuntu:27018" ], "arbiters" : [ "ubuntu:27019" ], "primary" : "ubuntu:27018", "ok" : 1 } // for each secondary config.members[0].priority = 0 config.members[3].priority = 0 config.members[4].priority = 0 rs.reconfig(config)
각 세컨더리의 경우:
세컨더리를 종료합니다.
1.8.x로 다시 시작합니다. MongoDB 다운로드 페이지에서 바이너리를 다운로드합니다.
구성을 변경한 경우 원래 상태로 다시 변경합니다.
config = rs.conf() config.version++ config.members[0].priority = 1 config.members[3].priority = 1 config.members[4].priority = 1 rs.reconfig(config) 프라이머리(최종 1.6 서버)를 종료한 다음 1.8.x 파일로 다시 시작합니다. MongoDB 다운로드 페이지에서 바이너리를 다운로드합니다.
샤드 cluster 업그레이드
밸런서를 끕니다:
mongo <a_mongos_hostname> use config db.settings.update({_id:"balancer"},{$set : {stopped:true}}, true) 샤드가 복제본 세트 인 경우 위 의 복제본 세트 업그레이드 지침을 따르세요.
샤드가 단일
mongod
프로세스인 경우 종료했다가 1.8.x 명령으로 다시 시작합니다. MongoDB 다운로드 페이지에서 바이너리를 다운로드합니다.
mongos
프로세스를 종료합니다.1.8.x로 다시 시작합니다. MongoDB 다운로드 페이지에서 바이너리를 다운로드합니다.
각 config 서버에 대해 다음을 수행합니다.
config 서버 프로세스를 종료합니다.
1.8.x로 다시 시작합니다. MongoDB 다운로드 페이지에서 바이너리를 다운로드합니다.
밸런서를 켭니다:
use config db.settings.update({_id:"balancer"},{$set : {stopped:false}})
1.6으로 돌아가기
어떤 이유로든 다시 1.6 로 이동해야 하는 경우 위의 단계를 역순으로 따르세요. 1.8 에서 실행하는 동안 4MB보다 큰 문서를 삽입하지 않도록 주의하세요(최대 크기가 16MB로 증가된 경우). 있는 경우 서버가 해당 문서를 읽으려고 할 때 오류가 발생합니다.
저널링
1.8 사용 후 1.6 로 돌아가기 저널링 은 데이터 파일 형식을 변경하지 않으므로 정상적으로 작동합니다. 저널링을 활성화한 상태에서 1.8.x를 실행 중이며 1.6 으로 다시 전환하기로 결정했다고 가정해 보겠습니다. 두 가지 시나리오가 있습니다.
1.8.x로 완전히 종료하면, 1.6 mongod 바이너리로 다시 시작하면 됩니다.
1.8.x인 경우 비정상적으로 종료된 경우, 1.8.x를 다시 시작하고 저널 파일을 실행하여 충돌 시 존재했을 수 있는 손상(불완전한 쓰기)을 수정합니다. 그런 다음 1.8.x를 종료합니다. 삭제하고 1.6 mongod 바이너리로 다시 시작합니다.
변경 사항
저널링
이제 MongoDB는 자체 관리 배포서버를 위한 미리 쓰기 저널링을 지원하여 스토리지 엔진의 빠른 충돌 복구와 내구성을 용이하게 합니다. 저널링을 활성화하면 mongod
충돌 후 컬렉션 을 복구할 필요 없이 를 빠르게 다시 시작할 수 있습니다. 집계 파이프라인을 사용하면 애그리게이션을 수행할 수 있습니다.
Sparse 및 Covered 인덱스
희소 인덱스 는 인덱스에 지정된 필드를 포함하는 문서만 포함하는 인덱스입니다. 인덱스된 문서가 누락된 문서는 인덱스에 전혀 나타나지 않습니다. 이렇게 하면 collection 내에 문서의 하위 집합만 포함하는 필드의 인덱스의 인덱스 크기를 크게 줄일 수 있습니다.
포함된 인덱스 를 사용하면 쿼리가 인덱스에 포함된 필드만 선택할 때 MongoDB가 인덱스에서 쿼리에 완전히 응답할 수 있습니다.
증분 맵리듀스 지원
mapReduce
명령은 기존 collection 을 점진적으로 업데이트할 수 있는 새로운 옵션을 지원합니다. 이전에는 맵리듀스 job을 임시 collection이나 새 데이터로 덮어쓰는 명명된 영구 collection으로 출력할 수 있었습니다.
이제 MapReduce 작업의 출력에 대한 몇 가지 옵션이 있습니다.
맵리듀스 출력을 기존 collection에 병합할 수 있습니다. collection에 기존 키가 이미 있는 경우 축소 단계의 출력이 기존 키를 대체합니다. 다른 키는 collection에 남아 있습니다.
이제 기존 collection의 내용으로 출력을 다시 줄일 수 있습니다. 축소 단계의 각 키 출력은 출력 collection의 기존 문서와 함께 축소됩니다.
기존 출력 collection을 맵리듀스 job의 새 결과로 바꿀 수 있습니다(이전 릴리스에서 영구 출력 collection을 설정한 것과 동일).
작업 결과를 유지하지 않고도 MapReduce를 인라인으로 계산하고 결과를 호출자에게 반환할 수 있습니다. 결과가 8MB로 제한된다는 점을 제외하면 이전 릴리스에서 생성된 임시 collection과 유사합니다.
자세한 내용은 mapReduce
문서의 out
필드 옵션을 참조하세요.
추가 변경 사항 및 개선 사항
1.8.1
더 큰 청크를 이동할 때 샤딩 마이그레이션 수정.
백그라운드 인덱싱을 통한 내구성 수정.
많은 수신 연결에서 발생하는 mongos 동시성 문제를 수정했습니다.
1.8.0
1 의 모든 변경 사항.7.x 시리즈.
1.7.6
버그 수정.
1.7.5
1.7.4
1.7.3
초기 커버드 인덱스 지원.
Distinct는 가능한 경우 인덱스의 데이터를 사용할 수 있습니다.
mapReduce
결과를 기존 collection에 병합하거나 줄일 수 있습니다.mongod
는 네트워크 사용량을 추적하고mongostat
을 표시합니다. mongostat를 참조하세요.샤딩 안정성이 개선되었습니다.
1.7.2
$rename
연산자를 사용하면 문서의 필드 이름을 바꿀 수 있습니다.db.eval()
차단하지 않습니다.샤딩이 있는 지리적 쿼리.
mongostat --discover
옵션청크 분할 기능이 향상되었습니다.
복제본 세트는 nat 뒤에 있는 서버에 대한 네트워크 개선 사항을 설정합니다.
1.7.1
많은 샤딩 성능이 향상되었습니다.
포함된 배열의 기본 요소에 대한
$elemMatch
에 대한 지원이 향상되었습니다.범위 쿼리에 대한 쿼리 옵티마이저 개선.
창 서비스 개선.
복제본 세트 설정이 개선되었습니다.
$pull
배열의 기본 요소에서 작동합니다.
1.7.0
높은 삽입 로드에 대한 샤딩 성능이 개선되었습니다.
복제본 세트에 대한 슬레이브 지연 지원.
local.system.replset.settings.getLastErrorDefaults
복제본 세트의 경우.shell에서 자동 완성.
지리적 검색을 위한 구형 거리입니다.
1.6.1 및 1.6.2 의 모든 수정 사항.