mongoDB 4.0 사무 가 굴 러 가 는 쓰 라 린 역정 탐구

머리말
주관 자 는 며칠 전에 MongoDB 가 4.0 으로 업그레이드 되 었 다 는 것 을 알 게 되 었 습 니 다.저 로 하여 금 그 가 기 다 렸 던 일 을 실현 하 게 해 주 었 습 니 다.아직도 많은 구덩이 가 있 음 을 알 게 되 었 습 니 다!
다음은 제 가 기 존의 로 컬 mongoDB 를 지원 하 는 트 랜 잭 션 으로 업그레이드 하 는 과정 입 니 다.잘못된 부분 이 있 으 면 지적 해 주 십시오!
맥 을 예 로 들 면.
mongodb 트 랜 잭 션 스크롤 백 배치
1.준비 작업
mongodb 를 4.0.0 까지 승급

$ brew upgrade mongodb
mongodb.js v 3.1.0 이상 업그레이드 또는 설치

$ npm i mongodb --save-dev
구덩이.
상기 레벨 업 후 db.js 에서 mongo 를 연결 할 때,
connect 의 option 에 필드 를 추가 하 라 고 경고 합 니 다.useNewUrlParser:true
이 때 사용자 인증 이 있 으 면 connect option 에 필드 를 추가 해 야 합 니 다.
authSource:사용자 가 있 는 db 는 일반적으로 admin 입 니 다.
그렇지 않 으 면 인증 에 실 패 했 고 사용자 의 오 류 를 찾 을 수 없습니다.예 를 들 어

 const mongoClient = await MongoClient.connect(mongoClientUrl, {
  auth: {
  user: config.dbUserName,
  password: config.dbUserPassword,
  },
  authSource:'admin',
  useNewUrlParser:true,
 });
2.기 존 데이터 베 이 스 를 복사 집합 으로 개조
현재 트 랜 잭 션 스크롤 백 은 복사 집합 에서 만 작 동 할 수 있 으 며,단독 mongodb server 는 트 랜 잭 션 을 작 동 할 수 없습니다.
모든 mongod 꺼.
평소 mongod 명령 을 시작 한 후--replset rs0 을 추가 합 니 다.예 를 들 어

$ mongod -dbpath ./db --port 27017 --replSet rs0
셸 을 다시 열 고 서로 다른 포트 의 mongo 인 스 턴 스 를 만 듭 니 다.예 를 들 어

$ mongod -dbpath ./db_repl --port 27018 --replSet rs0
27017 의 mongo 인 스 턴 스 를 연결 하고 설정 합 니 다.

$ mongo
$ rs.initiate()
$ rs.add('localhost:27018');
완성 하 다.
3.스크롤 백 코드 쓰기
db.js 에 방법 이 추가 되 었 습 니 다.

 export const getSession = async function() {
  return await state.mongoClient.startSession();
 };
스크롤 백 이 필요 한 mongo 코드 전에 이 방법 을 사용 하여 session 을 가 져 와 스크롤 백 을 시작 합 니 다.

 const session = await db.getSession();
 session.startTransaction({
  readConcern: {level: 'snapshot'},
  writeConcern: {w: 'majority'},
 });
몬 godb.js 를 호출 하 는 방법 으로 데이터 베 이 스 를 조작 할 때마다 session 을 가 져 가 야 합 니 다.예 를 들 어

 db
 .collection(this.collecitonName)
 .insertOne(doc,{session});
당신 이 잘못 을 처리 하고 스크롤 백 이 필요 하 다 고 생각 합 니 다.실행 합 니 다.

await session.abortTransaction();
당신 이 문제 가 없다 고 생각 할 때,함께 정상적으로 끝 날 때,집행 하 세 요.

await session.commitTransaction();
내 코드 에 봉 인 된 코드 가 올 라 가지 않 아서 이해 할 수 없 을 지도 모른다.나 는 단지 밤 을 들 어 실현 할 뿐,구체 적 인 코드 실현 은 참고 링크 1 을 볼 수 있다.
4.총화
useNewUrl Parser 라 는 속성 은 url 에서 사용자 가 필요 로 하 는 db 를 식별 합 니 다.업그레이드 되 지 않 기 전에 지정 할 필요 가 없습니다.url 뒤에 있 든 authSource 로 업그레이드 해 야 합 니 다.
트 랜 잭 션 스크롤 백 은 복사 집합 에서 만 작 동 할 수 있 습 니 다.실현 의 원 리 는 이 럴 수 있 습 니 다.먼저 메 인 노드 의 session 을 기록 한 다음 에 스크롤 백 을 하면 이 session 을 통 해 부 노드 의 데이터 스냅 샷 을 찾 은 다음 에 이 스냅 샷 을 메 인 노드 에 응용 하여 스크롤 백 을 실현 합 니 다.물론 실제 상황 은 상당히 복잡 해 야 한다.그렇지 않 으 면 mongoDB 도 3 년 동안 이 조작 을 실현 하지 못 할 것 이다.
5.링크 참조
  • mongoDB 공식 사무 소개
  • MongoDB 중국어 커 뮤 니 티 replset 에 대한 소개
  • 두 번 째 단 계 를 진행 하지 않 으 려 면 run-rs 에서 직접 새로운 mongoDB 복사 집합 을 만 들 수 있 습 니 다.
  • 총결산
    이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가치 가 있 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.

    좋은 웹페이지 즐겨찾기