누리의 누리

Mongo db - 1. Overview 본문

MongoDB

Mongo db - 1. Overview

BangTheWorld 2018. 3. 19. 17:15

Mongo db 스터디


Kasandra - specific task / mongo - 범용적인 rdb 대체 —> scale out 가능한 rdb 나오는 순간 (nosql ㅃㅃ2)


Curriculum(스터디 일정)

  1. Overview
  2. Core concept - DB, Collections, Document
  3. CRUD Operations
  4. Data Models
  5. Index
  6. Replication
  7. Sharding
    + 5,6,7 중점 맞출 예정

다음 시간엔 data modeling 스터디 예정임!


mongoDB 공부법 

  • Mongoldb mannual —> 이걸로 예정
  • 1000페이지짜리 읽으면 마스터됨,,, 완전 자세함, 깊숙한 내용이 많음

전략에 대한 고민들은 솔루션 마다 크게 다르지 않다. 

오늘 : 조회하기, 읽고 쓰기에 대한 간략한 리뷰


mongoDB란 

  • Document DB (elastic, couch base(couch DB 키밸류) …)
    • elastic 기능적으로는 hadoop 하는 일을 구현할 있으나 으로서는 불가능할 수도몽고디비도 맵리듀스 가능
    • 하둡이 사용성이 정말 떨어지나 배치성(용량) 장점이 있다. 엘라스틱과 몽고에서 그걸 해결한다면 하둡의 미래가 불투명해짐
    • aws 아테나도 비슷,,, 로그 데이터를 자동으로 쿼리하고 조인해줌 (emr Hadoop cluster —> 아테나 (비용 절감 가능))
  • db-engines.com/en/ranking
  • 나스닥에도 상장될 정도로 유망함
  • 특징
    • High performance
    • Rich query language
    • High availability
    • Horizontal Scalability
    • Support for multiple storage engines (mysql 이노디비같은,,, 심지어 메모리 디비로도 전환이 가능함)
  • 배워야 하는 이유
    • 대용량 데이터 분산 아키텍쳐의 다양한 전략이 적용되어있어 학습하기 좋다. —> 실습을 통해 내부 동작 파악 가능
      • nosql들의 아키텍쳐의 전략은 비슷함으로 하나만 깊게 제대로 알아 놓으면 다른 애들도 쉽게 이해 가능하다.
      • 실습자료들도 많아 딥하게 내부동작 파악 가능
    • 메뉴얼이 매우 훌륭하게 작성되어있다,, 책보다 훨씬 좋음
  • 주요 컨셉 - Document(Row), Collection(table), DB(table의 모음)
  • Collection - view
    • 회원 테이블이 있으면 그 안에 들어가는 정보 중 선택적으로 정보를 뽑아 새로운 논리 테이블을 만드는 것
    • 사용이유 : 사용자편의성(목적에 맞춰서 쓰기 위함), 보안(origin에 접근을 막고 특정 정보에만 접근하도록)
  • Collection - Capped Collection
    • Document 개수가 제한된 컬렉션
    • 생성할 때 document의 최대 개수를 설정 
      • document개수가 최대에 다다르면 옛날 데이터가 지워짐
    • Read/Write 속도가 일반 컬렉션에 비해 훨씬 빠름
    • 영속화가 필요 없는 로그 데이터 등을 저장하는데 사용한다,
    • table을 생성할때 row의 갯수를 제한하는 것 (queue 처럼)
    • 장점 : 속도가 일반 컬렉션에 비해 훨씬 빠르다. 
    • ttl이 있어서 redis 사용하나 비용문제있어서 몽고디비 쓰는것도 추천하고 나쁘지 않다.
  • Document
    • mongoDB의 최소 단위
    • BSON형식으로 표현됨(JSON과 거의 비슷) —> docs.mongodb.com/manual/reference/bson-types
    • RDBMS의 Row에 해당
    • id는 자동으로 생성
      • Sharding시 클러스터 내 unique함을 보장
    • 단일 Document최대 사이즈는 16mb
      • Document가 계속해서 증가하지 않도록 설계 해야 함
      • 예) 게시물 내의 댓글을 임배딩 하는 경우
    • RDB는 unique키를 잡는게(보장할 수 있는가)가 문제가 되기때문에 분산할 때 문제가 될 수 있다. 기본적으로 sharding이 되지 않음, mongoDB는 알아서 보장해줌
  • CRUD - Create
    • 생성 메소드
      • db.collection.insertOne()
      • db.collection.insertMany()
  • CRUD - read
    • 조회 메소드
      • db.collection.insertMany()
  • CRUD - Update
    • 수정 메소드
      • db.collecion.updateOne()
      • db.collecion.updateMany()
      • db.collecion.replaceOne()
      • update할때는 한 항목에 대해서만 하면 안됨 $set안하면 다른 필드 다 날라감
  • CRUD - Write Concern(분산DB에만 있는독특한 전략)
    • Data Consistency 를 컨트롤 하기 위한 전략 // Query, collection level로 설정 가능
  • CRUD - Read Preference
    • default 설정은 primary임
    • Options
      • Primary
      • primaryPreffered
      • Secondary
      • secondaryPreferred
      • nearest
  • 많이 참고 하면 좋은 매뉴얼 : docs.mongodb.com/manual/reference/sql-comparison (sql안돼서 안타깝다,,, 곤조때문인가,,,)
  • Nosql <—> RDB
  • Embedding
  • ORM (오브젝트를 rdb테이블과 11 맵핑하는것)

Comments