본문 바로가기

Software Engineering/MongoDB

[MongoDB] MongoDB 스터디 1

  • 몽고 디비는 json과 유사한 형태의 도큐먼트를 저장한다.
  • 도큐멘트는 직관적이고 모든 형태를 표현할 수 있다.
  • 컬렉션 = 도큐멘트 그룹
  • 데이터베이스 = 컬렉션 그룹
  • 출력은 json으로 저장은 bson으로 됨
  • bson은 json 보다 더 많은 데이터 타입을 지원한다.
  • ObjectID (_id) 는 PK이다. 지정하지 않으면 몽고디비가 자동 생성한다.
  • _id는 데이터 타입은 아니다.
  • 스키마가 자유롭지만, 벨리데이션/컨스트레인츠을 추가할 수 있다.
  • 임베딩과 레퍼런스로 데이터 관계를 표현 할 수 있다.
  • 임베딩
    • 임베딩을 통해 쿼리를 단순화 할 수 있다.
    • 네스티드 다큐먼트다.
    • 액세스 투게더, 스토어 투게더 원칙을 지킬 수 있다.
    • 조인을 예방한다.
    • 조회 성능을 높인다.
    • 한번의 쓰기로 업데이트 할 수 있다.
    • 단점
      • 도큐멘트를 계속 크게 만든다.
      • 메모리 비효율을 초래한다.
      • 퍼포먼스 하락이 올 수 있다.
      • 언바운디드 도큐멘트, 계속되는 확장으로 16메가를 초과하는 도큐멘트가 생성될 수 있다.
  • 레퍼런스
    • 엑세스 투게더, 스토어 투게더
    • 링크, 데이터 노말라이제이션이라고도 한다.
    • 여러 도큐멘트의 데이터 조인이 필요하다.
    • 도뮤멘트 사이즈를 작게 유지할 수 있다.
    • 데이터 중복을 피할 수 있다.
  • 스케일러블
    • 엑세스 투게더, 스토어 투게더
    • 데이터를 디자인할때 언바운딩을 경계한다.
    • 끝없이 확장되는 형태의 데이터를 경계한다.
    • 예를들어 블로그의 모든 포스팅을 하나의 도큐멘트에 저장한다면?
    • 도큐멘트 하나의 최대 값은 16메가 이다.
    • 이런 경우 임베딩은 좋지 못하다.
  • 스키마 안티 패턴
    • 스키마 디자인 패턴, 베스트 프랙티스
    • 안티패턴 
      • 지나친 배열
      • 지나친 콜렉션
      • 불필요한 인덱스
      • 인덱스 없는 쿼리
      • 비대한 도큐먼트
      • 엑세스 투게더, 스토어 디프런트
    • 아틀라스
      • 인덱스 항목을 보면 불필요한 인덱스를 삭제할 수 있다.
      • 스키마 안티패턴 항목에 성능 향상을 위한 제안이 있다.
      • 퍼포먼스 어드바이저
      • 인덱스, 퍼포먼스 항목을 제안해준다.