JX405기_비트/mongoDB
Day16-1 MongoDB 정의, 기본 개념
_하루살이_
2023. 2. 7. 16:17
NoSQL
- "Not Only SQL" or "Not SQL" 관계형이 아닌 DBMS
- 빅데이터와 실시간 웹 애플리케이션에 사용됨
- Twitter, Facebook, Google 등은 매일 거대한 양의 사용자 데이터를 수집
- 데이터 구조에 따른 분류
- Key-Value Store
- 시스템이 단순하여 속도가 매우 빠르고 확장도 상대적으로 용이함
- 기본 자료 구조는 dictionary 또는 map
- Oracle NoSQL, Redis, Amazon Dynamo
- 기본적인 CRUD(Create, Read, Update, Delete) 연산에서는 우수하지만, 고급 쿼리를 수행하는 것은 어려움.
- Document-Based Store
- Key value의 쌍으로 데이터를 저장하고 검색
- Document는 JSON 형태로 저장
- 블로깅 플랫폼, 실시간 분석 및 e-commerce와 같은 응용 분야에 주로 사용
- 다중 연산이나 쿼리를 요구하는 복잡한 트랜잭션에는 적합하지 않을 수 있음
- CouchDB, MongoDB, Riak등이 있으며, MongoDB가 가장 대표적임
- Column-Based Store
- 컬럼 지향적 데이터베이스는 컬럼별로 처리
- SUM, COUNT, AVG 등과 같은 집한 연산 처리에 높은 성능을 제공
- Data Warehouse와 Business Intelligence 등에 적합
- HBase, Cassandra, Hypertable 등
- Graph-Based Store
- 엔티티(entity)와 엔티티간의 관계(relationship)까지 저장
- 엔티티는 노드(node), 관계는 엣지(edge)로 저장
- 소셜네트워크, 로지스틱스, 공간데이터와 같은 분ㄴ야에 사용
- Neo4J, Infinite Graph, OrientDB등이 있음
- Key-Value Store
몽고디비란?
- 응용프로그램을 쉽게 개발하고 확장할 수 있도록 고안된 도큐먼트 데이터베이스
- 관계형 데이터베이스와 키-값 저장 시스템의 장점만을 모아서 설계 → 확장이 용이하고, 다양한 구조의 데이터를 저장할 수 있고, 정교한 쿼리 언어를 가짐
- 웹 애플리케이션과 인터넷 기반을 위해 설계된 데이터베이스 관리 시스템
- 도큐먼트 베이스(document-base) 데이터베이스
- 필드(field) 또는 키(key) 와 연결된 값(value)의 집합으로 구성된 자료구조
- mongoDB 도큐먼트 형식은 JSON 객체와 유사함 → 직관적인 데이터 모델
몽고디비의 기능
- 도큐먼트 데이터모델
- 스키마가 없는 모델의 장점 → 애플리케이션이 데이터 구조를 결정
- 인덱스
- 데이터를 빠르게 검색할 수 있도록 하는 서비스를 제공
- 복제
- 복제세트(replica set)라고 부르는 구성을 통해 복제 기능 제공
- 서버와 네트워크 장애가 발생할 경우를 대비하여 중복성과 장애조치 자동화를 위해 데이터를 여러대의 서버에 분산
- 수평적 확장이 용이
- 수평적 확장이란 데이터베이스를 여러대의 서버에 분산
- 시스템에 장애가 발생해도 분산된 서버로 인해 장애에 따른 피해가 경감됨
- 샤딩 메커니즘(sharding mechanism)으로 데이터를 여러노드에 분산하는 것을 자동으로 관리함
※ 수직적향상은 간단하고, 비용이 절감되지만, 한계에 도달하면 향상이 불가능
MongoDB코어 서버와 툴
- MongoDB v1.0
- 2009년 11월 발표
- 소수점 첫번쨰 자리가 짝수이면 안정적인 버전
- 코어서버
- mongod라는 실행 프로그램을 통해 구동(현재는 기본 설정된 서버 구동)
- 바이너리 프로토콜을 통해 네트워크 소켓으로 명령을 받아들임
- MongoDB Shell (mongosh)
- 데이터베이스를 테스트하고, MongoDB인스턴스 관리를 수행하기 위한 도구
- MongoDB 명령어 쉘 → mongosh 명령어로 구동
- 명령어를 자바스크립트로 표현
- MongoDB와 상호작용하기 위한 JavaScript 및 Node.js 14.x가 완벽하게 기능하는 REPL환경
※ REPL : Read/Evaluate/Pring/Loop, 코드를 입력하면 결과가 바로 출력
MongoDB 실행하기
현재 기본적으로 생성되는 DB를 제외하고 아무것도 생성되지 않은 상태
현재 사용 중인 데이터 베이스는 test임
도큐먼트
- 도큐먼트 사용의 장점
- 도큐먼트는 프로그래밍 언어의 자료형에 해당함
- 테이블 조인의 필요성 감소
- 동적 스키마는 다형성을 지원함
- 컬렉션
- 도큐먼트가 저장된
- 관계형 데이터베이스의 테이블에 해당
명령어들
- db : 현재 선택된 데이터 베이스를 출력
- show dbs : 데이터베이스 목록을 출력
- use <데이터베이스명> : 기존의 데이터베이스를 선택 또는 새로운 데이터베이스를 생성
- insertOne/insertMany : 컬렉션에 도큐먼트를 삽입, 컬렉션이 존재하지 않으면 생성후 삽입
- 사용 예시 : db.collection이름.insertOne() / db.collection이름.insertMany()
- find : 컬렉션에 저장된 모든 도큐먼트를 조회하거나 특정조건에 맞는 도큐먼트를 조회하거나 컬렉션의 특정 컬럼들을 반환
- 사용예시 : db.collection이름.find()
데이터베이스
- 몽고디비는 데이터레코드를 컬렉션에 BSON 도큐먼트 형태로 저장
- 데이터베이스
- 컬렉션을 구분하는 네임스페이스로 하나 이상의 컬렉션을 저장함
- MongoDB에 질의하기 위해서는 대상 도큐먼트가 존재하는 데이터베이스와 컬렉션을 알아야함
- 데이터베이스 생성 예시 use [데이터베이스 이름]
- 몽고디비에서 데이터베이스와 컬렉션은 도큐먼트가 처음 입력될 때 생성
컬렉션
- 도큐먼트들을 그루핑(grouping)할 수 있는 방법으로, 관계형 데이터베이스의 테이블에 해당
- 컬렉션 생성예시 : db.[컬렉션이름].insertOne({x:1}), db.[컬렉션이름].createIndex({y:1})
- 도큐먼트의 구조
- 필드(field)와 값(value)의 쌍으로 구성
- 필드 이름 (문자열)
- _id는 기본키로 사용하도록 예약됨
- null문자를 포함할 수 없음
- 필드 이름의 중복을 허용하지 않음
- (.) 표기법
- 배열의 요소에 접근할 경우 <array>.<index>
- 내장 도큐먼트의 필드에 접근할 경우 <embedded document>.<field>
- _id필드
- 컬렉션에 저장되는 도큐먼트는 기본키로 기능하는 _id필드가 필요함
- 도큐먼트를 삽입할 때 _id 필드를 생략하는 경우, ObjectId를 자동으로 생성
- 기본적으로 몽고디비는 컬렉션을 생성할 때 _id필드에 인덱스를 생성함
- 도큐먼트 크기제한
- BSON 도큐먼트 크기의 최대값은 16M바이트
데이터 조회 예시
db.[collection이름].find({<query document>, <projection document>})
- projection document는 다음을 지정함
- <field> : 1 반환될 도큐먼트에 포함
- <field> : 0 반환될 도큐먼트에 포함되지 않음