몽고 디비 | Mongodb 프로그래밍 4강 Mongodb의 기본 개념에 대해 알아보기 | T아카데미 인기 답변 업데이트

당신은 주제를 찾고 있습니까 “몽고 디비 – MongoDB 프로그래밍 4강 MongoDB의 기본 개념에 대해 알아보기 | T아카데미“? 다음 카테고리의 웹사이트 ppa.maxfit.vn 에서 귀하의 모든 질문에 답변해 드립니다: https://ppa.maxfit.vn/blog. 바로 아래에서 답을 찾을 수 있습니다. 작성자 SKplanet Tacademy 이(가) 작성한 기사에는 조회수 11,588회 및 좋아요 104개 개의 좋아요가 있습니다.

몽고 디비 주제에 대한 동영상 보기

여기에서 이 주제에 대한 비디오를 시청하십시오. 주의 깊게 살펴보고 읽고 있는 내용에 대한 피드백을 제공하세요!

d여기에서 MongoDB 프로그래밍 4강 MongoDB의 기본 개념에 대해 알아보기 | T아카데미 – 몽고 디비 주제에 대한 세부정보를 참조하세요

T아카데미 MongoDB 프로그래밍 강의입니다.
1강 클라우드/빅데이터란 무엇인가?
2강 NOSQL의 특징에 대해 알아보기
3강 NOSQL 데이터 모델링 기법 살펴보기
4강 MongoDB의 기본 개념에 대해 알아보기
– MongoDB의 특징 익히기
– MongoDB의 장점, 단점 살펴보기
– 기존 RDBMS와의 비교하기
– MongoDB의 주요 기능 알아보기
5강 MongoDB와 Node.js의 동작 방식 배우기
6강 MongoDB 쉘을 이용하여 데이터 저장하고 조회하기
7강 MongoDB 쉘을 이용하여 저장된 데이터를 수정하거나 삭제하기
8강 MongoDB의 Index 기능 배우기
9강 MongoDB의 샤딩에 대해 알아보기
10강 MongoDB를 이용한 복제 방법 살펴보기
11강 MongoDB의 리플리카셋으로 장애 대응방법 배우기
12강 MapReduce 개념 살펴보기
13강 MapReduce 실행하기
14강 MapReduce 구현하기
15강 MongoDB 집계 기능 알아보기
16강 MongoDB 운영 방법 배우기
17강 MongoDB 로그 수집 및 분석하기
18강 MongoDB 개발 팁 살펴보기
19강 MongoDB 관리 툴 둘러보기
20강 NOSQL과 RDBMS로 만들어진 복합 시스템 알아보기
이 밖에 다양한 IT 강좌를 T아카데미 홈페이지(tacademy.sktechx.com) 및
유투브 채널 (Sktechx Tacademy)에서 만나보실 수 있습니다.

몽고 디비 주제에 대한 자세한 내용은 여기를 참조하세요.

몽고db홈페이지 – MongoDB

We’re the creators of MongoDB, the most popular database for modern apps, and MongoDB Atlas, the global cloud database on AWS, Azure, and GCP.

+ 자세한 내용은 여기를 클릭하십시오

Source: www.mongodb.com

Date Published: 5/21/2022

View: 6370

몽고DB – 위키백과, 우리 모두의 백과사전

몽고DB(MongoDB←HUMONGOUS)는 크로스 플랫폼 도큐먼트 지향 데이터베이스 시스템이다. NoSQL 데이터베이스로 분류되는 몽고DB는 JSON과 같은 동적 스키마형 도큐먼트 …

+ 여기에 자세히 보기

Source: ko.wikipedia.org

Date Published: 12/26/2021

View: 4835

MongoDB – 나무위키

MongoDB는 NoSQL로 분류되는 크로스 플랫폼 도큐먼트 지향 데이터베이스 시스템이다. MySQL 처럼 전통적인 테이블-관계 기반의 RDBMS가 아니며 SQL을 사용 …

+ 더 읽기

Source: namu.wiki

Date Published: 2/3/2022

View: 2101

01. MongoDB(몽고디비) Study – NoSQL 이란? 그리고 …

요즘 IT 분야의 화두는 머신러닝, 딥러닝 등의 인공지능 분야이지만, 한 2년 전만 해도 빅데이터가 가장 화두였습니다. 이러한 빅데이터를 처리하는 …

+ 여기를 클릭

Source: cionman.tistory.com

Date Published: 5/30/2022

View: 9787

[MongoDB] 몽고디비란? 기본 개념, 장점 단점 / CRUD

MongoDB 출현 배경 알아보기. 클라우드, 빅데이터 출현함으로써 이를 효율적으로 처리할 빅데이터 솔루션이 필요해짐 -> NoSQL(Not Only SQL) 의 등장 …

+ 더 읽기

Source: blckchainetc.tistory.com

Date Published: 4/5/2022

View: 6790

MongoDB 이해하기 | kciter.so

대표적인 관계형 데이터베이스로는 MySQL, Oracle, PostgreSQL이 있고, NoSQL 진영에는 이 포스트에서 다루는 MongoDB와 Redis, HBase 등이 있다. 더 …

+ 여기에 보기

Source: kciter.so

Date Published: 10/22/2021

View: 5701

MongoDB란 – 역사, 설계 목표, 핵심 기능, 몽고DB를 사용하는 …

MongoDB 는 웹 애플리케이션과 인터넷 기반을 위해 설계된 데이터베이스 관리 시스템 입니다. 또한 데이터 모델과 지속성 전략을 높은 읽기/쓰기 효율과 자동 장애조치( …

+ 여기에 보기

Source: hoing.io

Date Published: 7/2/2021

View: 6095

‘NoSQL로의 초대’ 개발자를 위한 몽고DB 개론 – ITWorld

몽고DB, 문서 데이터 저장소. 관계형 데이터베이스는 엄격하게 통제되는 테이블과 열에 정보를 저장한다. 반면 문서 저장소인 몽고DB는 컬렉션과 문서에 …

+ 여기에 표시

Source: www.itworld.co.kr

Date Published: 11/3/2022

View: 8692

몽고디비(MongoDB) – 해시넷 위키

몽고디비(MongoDB)는 데이터 객체들이 컬렉션 내부에서 독립된 문서로 저장되는, 문서 모델을 기반으로 하는 노에스큐엘(NoSQL) 데이터베이스이다. 문서 …

+ 여기에 보기

Source: wiki.hash.kr

Date Published: 10/30/2021

View: 4316

몽고DB 완벽 가이드 – YES24

몽고DB 완벽 가이드. : 실전 예제로 배우는 NoSQL 데이터베이스 기초부터 활용까지. [ 3판 ]. 크리스티나 초도로,섀넌 브래드쇼 …

+ 여기에 표시

Source: www.yes24.com

Date Published: 7/10/2022

View: 6554

주제와 관련된 이미지 몽고 디비

주제와 관련된 더 많은 사진을 참조하십시오 MongoDB 프로그래밍 4강 MongoDB의 기본 개념에 대해 알아보기 | T아카데미. 댓글에서 더 많은 관련 이미지를 보거나 필요한 경우 더 많은 관련 기사를 볼 수 있습니다.

MongoDB 프로그래밍 4강 MongoDB의 기본 개념에 대해 알아보기 | T아카데미
MongoDB 프로그래밍 4강 MongoDB의 기본 개념에 대해 알아보기 | T아카데미

주제에 대한 기사 평가 몽고 디비

  • Author: SKplanet Tacademy
  • Views: 조회수 11,588회
  • Likes: 좋아요 104개
  • Date Published: 2017. 8. 22.
  • Video Url link: https://www.youtube.com/watch?v=81JnYGT2HVQ

위키백과, 우리 모두의 백과사전

Robomongo 0.8.5를 사용하여 몽고DB에 레코드를 삽입하고 있는 모습.

몽고DB(MongoDB ←HUMONGOUS )는 크로스 플랫폼 도큐먼트 지향 데이터베이스 시스템이다. NoSQL 데이터베이스로 분류되는 몽고DB는 JSON과 같은 동적 스키마형 도큐먼트들(몽고DB는 이러한 포맷을 BSON이라 부름)을 선호함에 따라 전통적인 테이블 기반 관계형 데이터베이스 구조의 사용을 삼간다. 이로써 특정한 종류의 애플리케이션을 더 쉽고 더 빠르게 데이터 통합을 가능케 한다. 아페로 GPL과 아파치 라이선스를 결합하여 공개된 몽고DB는 자유-오픈 소스 소프트웨어이다.

뉴욕시에 기반을 둔 회사인 10gen (현재의 몽고DB)에서 2007년 10월, 계획된 PaaS(서비스형 플랫폼) 제품의 구성 요소로 처음 개발하였으며 10gen이 상용 지원 및 기타 서비스를 제공한 2009년에 오픈 소스 개발 모델로 전향하였다.[3] 그 뒤로 몽고DB는 크레이그리스트, 이베이, 포스퀘어, 소스포지, 뉴욕 타임즈, 구글, 페이스북와 같은 수많은 주요 웹사이트 및 서비스에 백엔드 소프트웨어로 채택되고 있다. 몽고DB는 가장 유명한 NoSQL 데이터베이스 시스템이다.[4]

역사 [ 편집 ]

10gen 소프트웨어 기업은 2007년에 PaaS 제품으로서 몽고DB의 개발을 시작했다. 2009년, 이 기업은 오픈 소스 개발 모델로 전환했으며 기업은 상용 지원과 기타 서비스를 제공하는 방식을 채택하였다. 2013년, 10gen은 사명을 MongoDB Inc.로 변경하였다.[3]

2017년 10월 20일, 몽고DB는 주식 공개 기업이 되었으며 NASDAQ에 MDB라는 심볼로 등재되었으며 IPO 가격은 한 주에 24달러였다.[5]

주요 기능 [ 편집 ]

애드혹 쿼리 [ 편집 ]

몽고DB는 필드, 레인지 쿼리, 정규 표현식 검색을 지원한다.[6] 쿼리는 특정 필드의 도큐먼트를 반환할 수 있으며 사용자 지정 자바스크립트 함수를 포함할 수도 있다. 쿼리는 주어진 크기의 임의의 결과 샘플을 반환하도록 설정할 수도 있다.

색인 [ 편집 ]

몽고DB 도큐먼트의 필드는 프라이머리(primary) 인덱스와 세컨더리(secondary) 인덱스로 인덱싱할 수 있다.

리플리케이션 [ 편집 ]

몽고DB는 리플리카 세트(replica set)와 함께 고가용성을 제공한다.[7] 리플리카 세트는 둘 이상의 데이터 사본으로 구성된다. 각 리플리카 세트 멤버는 어느 시점에서나 프라이머리나 세컨더리 리플리카 역할을 수행할 수 있다. 모든 쓰기와 읽기는 기본값으로 프라이머리 리플리카에서 수행된다. 세컨더리 리플리카는 내장된 리플리케이션 기능을 사용하여 프라이머리의 데이터의 사본을 관리한다. 프라이머리 리플리카가 실패하면 리플리카 세트는 어느 세컨더리가 프라이머리가 되면 좋을지 결정하기 위해 선거 과정을 자동으로 수행한다. 세컨더리 리플리카들은 선택적으로 읽기 조작을 서비스할 수 있으나 해당 데이터는 기본적으로 일관성을 유지한다.

로드 밸런싱 [ 편집 ]

몽고DB는 샤딩을 사용하여 수평으로 스케일링한다.[8] 사용자는 컬렉션 안의 데이터의 배포 방식을 결정하는 샤드 키를 선택하게 된다. 데이터는 여러 레인지(샤드 키에 따라)로 분리되며 여러 샤드로 배포된다. (샤드는 하나 이상의 리플리카가 존재하는 마스터이다)

몽고DB는 여러 개의 서버 위에서 실행할 수 있고 부하분산이라든지, 기동 중 데이터 복제, 하드웨어 고장 시 수행이 가능하다.

파일 스토리지 [ 편집 ]

몽고DB는 파일 저장을 위해 여러 머신에 로드 밸런싱, 데이터 리플리케이션 기능과 더불어 GridFS라는 이름의 파일 시스템으로 사용할 수 있다.

이 기능은 그리드 파일 시스템이라고 부르며[9] 몽고DB 드라이버에 포함되어 있다. 몽고DB는 파일 조작의 기능과 콘텐츠를 개발자들에게 노출한다. GridFS는 mongofiles 유틸리티나 Ngnix 플러그인[10], Lighttpd를 사용하여 접근할 수 있다.[11] GridFS는 파일 하나를 여러 부분이나 덩어리(chunk)로 분리시키며 해당 덩어리들 각각을 별도의 도큐먼트로 저장한다.[12]

애그리게이션 [ 편집 ]

몽고DB는 애그리게이션 수행을 위해 3가지 수단을 제공한다: 애그리게이션 파이프라인(aggregation pipeline), 맵리듀스 기능(map-reduce function), 단일 목적 애그리게이션 방식(single-purpose aggregation method).[13]

데이터 처리와 애그리게이션 조작을 위해 맵리듀스를 사용할 수 있다. 그러나 몽고DB의 문서에 따르면 애그리게이션 파이프라인이 대부분의 애그리게이션 조작에 더 나은 성능을 제공한다.[14]

애그리게이션 프레임워크를 사용하면 사용자들이 SQL GROUP BY 절이 사용되는 결과의 종류를 취득할 수 있다. 애그리게이션 연산자들은 하나로 묶어서 하나의 파이프라인을 형성할 수 있는데, 이는 유닉스 파이프와 비슷하다. 애그리게이션 프레임워크는 여러 도큐먼트로부터 도큐먼트들을 조인(join)할 수 있는 $lookup 연산자를 포함하고 있으며 표준 편차 등의 통계 연산자를 포함한다.

서버 사이드 자바스크립트 실행 [ 편집 ]

자바스크립트를 쿼리, 애그리게이션 기능(맵리듀스 등)에 사용할 수 있으며 직접 데이터베이스로 보내어 실행할 수 있다.

캡트 컬렉션 [ 편집 ]

몽고DB는 캡트 컬렉션(capped collection)이라는 이름의 고정 크기의 컬렉션을 지원한다. 이러한 유형의 컬렉션은 삽입 순서를 관리하고 특정 크기에 도달하면 원형 버퍼처럼 동작하게 만들 수 있다.

트랜잭션 [ 편집 ]

멀티 도큐먼트 ACID 트랜잭션 지원이 2018년 6월 4.0 릴리스의 GA(General Availability)와 더불어 몽고DB에 추가되었다.[15]

참조 [ 편집 ]

외부 링크 [ 편집 ]

01. MongoDB(몽고디비) Study – NoSQL 이란? 그리고 MongoDB 소개

728×90

요즘 IT 분야의 화두는 머신러닝, 딥러닝 등의 인공지능 분야이지만, 한 2년 전만 해도 빅데이터가 가장 화두였습니다. 이러한 빅데이터를 처리하는 기술로 NoSQL을 사용하게 됩니다. 그럼 NoSQL 이란 어떤 것일까요?

NoSQL

“Non Relational Operation Database SQL” 의 줄임말로써 “관계형 데이터베이스가 아닌 SQL” 입니다.

일반적인 관계형 데이터베이스에서는 데이터의 중복을 제거하고 무결성을 보장하기 위해서 정규화를 하게 되는데 이러한 정규화가 과도한 JOIN으로 인해 성능 저하가 있을 수 있습니다.

하지만 NoSQL은 아래의 그림 처럼 중첩데이터 형태를 띔으로써 불필요한 JOIN 을 최소화시킵니다.

NoSQL의 장점

1) 불필요한 Join의 최소화

2) 유연성있는 서버 구조 제공

3) 비정형 데이터 구조로 설계비용 감소

4) Read/Write가 빠르며 빅데이터 처리가 가능

5) 저렴한 비용으로 분산처리 및 병렬처리 가능

4번 장점의 경우는 반드시는 아닙니다. 일반적인 관계형 데이터베이스가 빠른 경우도 많습니다.

그리고 비정형 데이터로 인해 관계형 데이터베이스보다 1.5배정도 용량을 많이 차지 합니다.

이러한 NoSQL은 크게 4종류의 모델이 있고 대표적인 데이터베이스입니다.

1) KEY-VALUE – Redis , Memcached 2) COLUMN – Hbase, Casandra 3) DOCUMENT – MongoDB, 4) GRAPH – GraphDB

2. 관계형 데이터베이스(Relational Database)와 NoSQL 비교

Relational Database NoSQL Scale-up – 서버 한대 중심으로 확장 Scale-out – 여러대의 서버를 중심으로 확장 무결성 유연성 데이터 중복 제거 데이터 중복 허용 트랜잭션 빠른 쓰기, 읽기

3 . MongoDB

Json 타입의 Document 방식의 NoSQL 입니다. 특징은 다음과 같습니다.

JSON 형식의 데이터구조

CRUD위주의 다중 트랜잭션 처리 가능

Sharding(분산) / Replica(복제) 기능 제공

Memory Mapping기술을 기반으로 빅데이터 처리에 성능이 탁월

관계형데이터베이스가 가지는 여러 특징을 구현 할수 있는 것이 장점이지만, 그런방식을 구현할 시에는 성능적인 면도 고려해야합니다.

4. 관계형 데이터베이스(Relational Database) 와 MongoDB 논리적 구조 비교

Relational Database MongoDB Table Collection Row Document Column Field Primary Key Object_ID Field Relationship Embbeded & Link

MongoDB를 공부해본 결과, 관계형 데이터베이스와의 차이점도 존재하지만, 데이터베이스의 본질적인 부분은 유사한 점도 많습니다.

유사점을 살짝 언급 해보면 관계형 데이터베이스에 있는 Join, 파티션, 복제, 힌트, 백업, 복구 등등의 기능을 유사하게 또는 같은 방식으로 그리고 다른 명칭으로 구현하고 있습니다.

다음 글에서 부터 본격적으로 MongoDB를 하나씩 정리를 해보겠습니다. 다음 글은 MongoDB 설치 및 시작

728×90

[MongoDB] 몽고디비란? 기본 개념, 장점 단점 / CRUD

반응형

MongoDB 출현 배경 알아보기

클라우드, 빅데이터 출현함으로써 이를 효율적으로 처리할 빅데이터 솔루션이 필요해짐 -> NoSQL(Not Only SQL) 의 등장 -> 대량의 데이터를 빠른 속도로 처리가능 (SQL의 부족한 점을 돕는 기능, 완벽하게 대체는 X) -> NoSQL의 종류 중 하나인 document key/value Store 의 대표 케이스가 MongoDB이다.

클라우드

– 클라우드 컴퓨팅 : 인터넷 기반 컴퓨팅 기술, 개인 단말기는 주로 입/출력만 이루어지고 정보 분석 및 처리, 저장, 관리, 유통 등은 클라우드 공간에서 이루어지는 컴퓨팅 시스템

– 인터넷 상의 유틸리티 데이터 서버에 프로그램을 두고 그때 그때 컴퓨터, 휴대폰 등에 불러와서 사용하는 웹 기반 소프트웨어 서비스

클라우드 장점

– 초기 구입 비용과 비용이 적으며 휴대성이 높다.

– 컴퓨터 가용율이 높다.

(그린 IT 개념, * 그린it : 지구 환경을 보호하는 차원에서 친환경적인 성격을 갖는 IT 기기나 IT 기술)

– 다양한 기기를 단말기로 사용하는 것이 가능

– 서비스를 통한 일관성 있는 사용자 환경 구현 가능

– 사용자 데이터를 신뢰성 높은 서버에 안전하게 보관 가능

– 전문적인 하드웨어 지식 없이 쉽게 사용 가능

클라우드 단점

– 서버가 공격 당하면 개인정보 유출 가능

– 재해에 의해 데이터가 손상되면 백업하지 않은 정보 복구 불가

– 애플리케이션 설치 제약, 새로운 애플리케이션 미지원

– 열악한 통신환경에서의 서비스 이용 어려움

– 개별 정보 물리적인 위치 파악 불가

빅데이터

그 전에는 분석이 불가능했지만 IT가 발전하면서 다룰 수 있게 된 방대한 양의 데이터

ex) 휴대폰 통화내역, 기상 정보, 실시간 교통량, 인터넷 검색 내역, 소셜네트워크서비스 메세지 등등

빅데이터 특징

– 데이터의 양 (Volume)

– 데이터 생성 속도 (Velocity)

– 형태의 다양성 (Variety)

– 빅데이터에서 이름, 나이, 주민번호, 성별, 직업 등의 정형적인 특성보다 ‘당신이 어디에서 무엇을 하며, 어떤 행동 방식을 선호하는가’ 가 의미있는 자료가 된다.

빅데이터 solutions 로 NoSQL 등장

https://blckchainetc.tistory.com/349

NoSQL 중 Doucment data model 의 대표적인 MongoDB

MongoDB 개요

– 10gen 사에서 개발한 솔루션 ( C++로 만듬)

– key-value 와 다르게 여러 용도로 사용이 가능 (범용적)

– 스키마를 고정하지 않는 형태

* 스키마 변경으로 오는 문제 없음

* 데이터를 구조화해서 json 형태로 저장 (데이터를 key-value화 저장)

– json 형태를 사용함 (아래 json에 대한 설명 有)

– join 이 불가능 -> 애초에 join 필요없도록 데이터 설계 필요

MongoDB 특징

– 메모리맵 형태의 파일엔진 DB이기 때문에 메모리에 의존적

* 메모리 크기가 성능을 좌우

* 메모리를 넘어서는 경우 성능이 급격히 저하됨

– 쌓아놓고 삭제가 없는 경우 적합

* 로그 데이터

* 이벤트 참여내역

* 세션

– 트랜젝션이 필요한 금융, 결제, 빌링, 회원정보 등에는 부적합 ( 요론 경우들은 RDBMS )

모든 것을 mongoDB로 하는 것이 아니라 적절하고 필요한 경우에 사용,

일관성을 유지해야하고 보완성이 필요한 중요정보 등의 경우에는 RDBMS를 사용

Document Data Model

가장 큰 { } 괄호가 하나의 document 이다. 하나의 document안에 key : value 형태로 다양한 형태의 데이터들이 담겨 있다.

Document Data Model : 데이터 설계를 “종이 문서” 설계하듯이 해야 한다.

– 속성의 이름과 값으로 이루어진 쌍의 집합 (key & value)

– 속성(value)은 문자열이나 숫자, 날짜 가능

– 배열 또는 다른 도큐먼트를 지정하는 것도 가능

– 하나의 document에 필요한 정보를 모두 담아야 함

– one query로 모두 해결이 되게끔 collection model 설계를 해야 함

– join이 불가능하므로 필요한 데이터를 미리 embedding 시켜야 함

* json *

– json : JavaScript Object Notation * notation : 표기법

– lightweight data 교환 형식

– 사람이 읽고 쓰기 쉽고, 기계가 parsing하고 생성하기 쉬움

– JavaScript의 Array 문법으로 데이터 구조를 기술하는 방법으로 XML이 가지는 유연성과 구조적 데이터 표현기능을 확보하면서, XML이 가진 오버헤드를 줄이는 방법으로 사용됨

– 클라이언트에서 처리 포포몬쓰 높음

– XML이 표현하는 구조적인 정보 모두 표현 가능

– 송수신 데이터로 XML를 사용하는 것보다 훨씬 빠르고, 간편

Mongo DB 장점 단점

MongoDB 장점

– Schema-less 구조 :

* 다양한 형태의 데이터 저장 가능

* 데이터 모델의 유연한 변화 가능 (데이터 모델 변경, 필드 확장 용이)

– Read/Write 성능 뛰어남

– Sacale Out 구조

* 많은 데이터 저장 가능

* 장비 확장이 간단함

– JSON 구조 : 데이터 직관적 이해 가능

– 사용 방법 쉽고, 개발이 편리함

– MongoDB와 MySQL 에서 동일한 데이터로 CRUD를 수행할 때 대부분 MongoDB가 빠르다.

– Single Node, Multi Node 간에 성능 차이는 거의 없다.

MongoDB 단점

– 데이터 업데이트 중 장애 발생 시, 데이터 손실 가능 (분산 처리 시스템 – 데이터의 부분 결함 가능성이 있다._)

=> 감안하고 사용해야함

– 많은 인덱스 사용 시, 충분한 메모리 확보 필요

– 데이터 공간 소모가 RDBMS에 비해 많음 (비효율적인 key 중복 입력)

– 복잡한 join 사용시 성능 제약이 따름

* join 예시 : embedded document로 collection 안에 하나의 field에 조인될 만한 로우를 입력하는 방식을 사용

ex) $lookup 이라는 함수로 join과 동일한 효과로 collection을 합칠 수 있다.

– transactions 지원이 RDBMS 대비 미약

– 제공되는 map reduce 작업이 hadoop에 비해 성능이 떨어짐

– MongoDB의 불안전성 : 데이터의 유실 가능성 (큰 데이터 모두가 아닌 중간중간 일부 데이터)

* 데이터 양이 많을 경우

– 일부 데이터 손실 가능성 존재

– 샤딩(데이터 분산 저장)의 비정상적인 동작 가능성

– 레플리카 프로세스(복제하는 기능) 의 비정상 동작 가능성

– MongoDB Multi Node의 Insert 연산 중에 연산 실패가 일어나는 경우 발생

=> 장점이 극명하여 단점을 감안하고도 많이 사용됨 (NoSQL 사용 비율 1위)

분산을 목적으로 한 DBMS선택할 경우, RDBMS에 비해 낮은 비용과 빠른 성능을 제공하는 MongoDB가 유리하다.

MongoDB 주요 기능

MongoDB 인덱스

– 다수 인덱스 설정 가능

– 복합 인덱스 지원

– 빠른 검색 지원

– 도큐먼트에 저장된 데이터와 중복 저장되는 문제 있음

– 메모리가 부족한 시스템에서는 검색 속도 저하 문제 있음

MongoDB 복제

– Master-Slave 구조 구성

– 데이터 복사본을 Slave에 배치

– Master 장애에 따른 데이터 손실 없이 Slave 데이터 사용 가능

– Master 장애가 발생했을 때, Slave에서 Master 선출 가능 (중단없는 서비스 가능)

* 여러대의 서버로 데이터를 분산 저장하고 손실 방지하기 위해 복제 수행 -> 단순히 수동적인 복제가 아님

Master 문제가 발생했다는 것을 능동적으로 감지 하고 그것에 대한 대응을 스스로 함

(운영자 or 개발자 개입 없이)

– 데이터 손실을 최소화하기 위해 저널링 지원 (MongoDB의 데이터 변화에 따른 모든 연산에 대한 로그 적재)

* 이 로그를 가지고 손실된 데이터를 복구

BigData with MongoDB

– Memory Mapped 사용 (데이터 쓰기 시에 OS의 가상 메모리에 데이터를 넣은 후 비동기로 디스크에 기록하는 방식)

– 방대한 데이터를 빠르게 처리 가능

– OS의 메모리를 활용하기 때문에 메모리가 차면 하드디스크로 데이터 처리하여 속도가 급격히 느려짐

– 하드웨어적인 측면에서 투자가 필요

MongoDB 샤딩 (Sharding)

– 대용량의 데이터를 저장하기 위한 방법

* 소프트웨어적으로 데이터베이스를 분산시켜 처리하는 구조

– 샤딩 방식

* 데이터베이스가 저장하고 있는 테이블을 테이블 단위로 분리 하는 방법

* 데이터베이스가 저장하고 있는 테이블 자체를 분할 하는 방법

– 분산 데이터베이스의 전통적인 분할 3계층 구조 지원

* 응용 계층, 중개자 계층, 데이터 계층

* 응용 계층은 데이터에 접근하기 위해 중개자를 통해 모든 데이터의 입출력을 처리

* 추상화된 한개의 데이터베이스가 존재하는 것처럼 운용

* 샤딩 : 샤딩은 “조각내다”라는 뜻으로 데이터베이스 저장기법 중 하나이며, 전체 네트워크를 분할한 뒤 트랜잭션을 영역별로 저장하고 이를 병렬적으로 처리하는 방법

(블록체인에 확장성을 부여하는 온체인 솔루션으로 데이터를 샤드라는 단위로 나눠서 저장 및 처리한다.)

MongoDB 맵리듀스 (map reduce)

map 함수는 각각 본인의 일을 처리 -> 다시 합쳐서 reduce 에게 -> output -> 사용자에게 전달

– 대용량의 데이터를 안전하고 빠르게 처리하기 위한 방법

* 데이터를 분산하여 연산하고 다시 합치는 기술

* 맵과 리듀스 단계로 나누어 처리하며, 사용자가 임의 코딩 가능

* 입/출력 데이터는 key-value형태로 구성

– 한대 이상의 하드웨어를 활용하는 분산 프로그래밍 모델

* 분산을 통해 분할된 조각으로 처리한 다음, 다시 모아서 훨씬 짧은 시간에 계산을 완료

– 대용량 파일에 대한 로그 분석, 색인 구축 검색 등에 활용

– 일괄처리 방식으로 전체 데이터 셋을 분석할 필요가 있는 문제에 적합

MongoDB CRUD Query

1. Create (C)

db.person.save( {‘name’:’emily’} );

2. Read (R)

db.person.find();

3. Update (U)

db.users.update( {name:’emily’}, {name: ‘Cash’, languages: [‘english’]} );

4. Delete (D)

db.users.remove( {name: ’emily’} );

mongoDB 설치 & 설정

MongoDB

1) 수평적 확장이라는 특성을 가짐

2) 한 대 이상의 서버 로 구성하는 것이 일반적

3) 메모리 사용 가능량에 대비하여 성능이 좌우되기 때문에 독립된 서버에서 실행 권장

4) 기본적으로 MongoDB는 mongod 라는 실행파일 을 단위로 실행

5) 데이터를 한 곳에만 저장하면 데이터 손상 시 복구가 불가능하기 때문에 보통 3개의 Replica 단위로 구성하여 데이터를 복제

6) mongos 서버를 통해 마치 한대의 데이터베이스 서버처럼 사용 가능

실습에서는 서버 1개로 ㄱㄱ!

샤드로 구성된 mongod 서버들을 mogos 라우터를 통해 연결, mongos 조차도 여러대로 분산하여 저장할 수 있고 최상위에는 Load Balancer 를 둠

필요하다면 다른 장소에 있는 Data center B 에도 복제set를 구성해줄 수 있다.

mongoDB 설치

https://www.mongodb.com/try/download/community

On-premises – Download 클릭

mongoDB 환경변수 설정 & mongoDB path 설정 및 shell 실행

https://sanghn.tistory.com/2

mongoDB 안전 종료 (clean exit)

use admin;

db.shutdownServer();

mongoDB와 node.js=잘 맞음

node.js 기본 개념

1) Event-driven

– 사용자 또는 외부 환경이 만들어낸 사건(event)를 기반으로 어떤 처리를 할지 지정해주는 개발 방식

ex) 사용자가 마우스를 움직였다거나 키보드를 입력했다거나 새로운 데이터가 들어왔다거나 이 모든 것을 사 건(event)로 처리

– 일부 웹서버는 데이터가 들어올때까지 무한정 기다리는 문제 있음

2) Non-blocking I/O (비동기식 I/O)

– 쓰기/읽기 이벤트가 시작되어도 모듈을 반환

– 다른 작업이 가능한 준비상태로 전환

– 동기식보다 빠르고 메모리도 적게 차지

Non-blocking 의 반대 -> blocking (동기식 I/O)

– 쓰기/읽기 이벤트가 발생할 경우 해당 이벤트가 끝날때까지 해당 모듈을 계속 점유

– 다른 일을 할 수 없는 상태가 됨

– 메모리를 계속 차지하고 있기 때문에 자원의 낭비가 심함

References : https://www.youtube.com/watch?v=Dvi_TsBMFJo

반응형

MongoDB 이해하기

사내에서 MongoDB를 잘 쓰기위한 스터디를 하게되어 이번 기회에 관련 자료를 정리하기로 했다. MongoDB가 왜 필요한지, 더 잘사용하기 위해서 무엇이 필요한지를 중심으로 처음 MongoDB를 사용할 때 도움이 될 만한 내용으로 정리했다.

NoSQL은 Not Only SQL, SQL 뿐만 아니다라는 의미를 지니고있다. 즉, SQL을 사용하는 관계형 데이터베이스가 아닌 데이터베이스를 의미한다. 대표적인 관계형 데이터베이스로는 MySQL, Oracle, PostgreSQL이 있고, NoSQL 진영에는 이 포스트에서 다루는 MongoDB와 Redis, HBase 등이 있다. 더 다양한 NoSQL 제품을 보고 싶다면 링크를 들어가면 지금까지 출시된 NoSQL 데이터베이스 목록을 볼 수 있다.

그래서 NoSQL은 왜 탄생하게 된걸까? 사실 RDBMS만으로 충분하지 않을까? 하지만 RDBMS은 은총알이 아니었고 분명한 한계점이 있다. NoSQL은 다음과 같이 RDBMS에선 하기 힘든 일을 쉽게 지원한다.

인터넷에 RDBMS와 NoSQL의 비교라고 검색하면 다음과 같은 표를 많이 볼 수 있다.

마치 RDBMS에 수평 확장이 불가능한 것 처럼 써놨지만 MySQL Replication이나 MySQL Cluster가 존재하여 수평 확장이 불가능한 것은 아니다. 그리고 NoSQL에서도 ACID가 불가능하지 않다. MongoDB의 경우 분산 트랜젝션까지도 지원하고 있다. 단, NoSQL 데이터베이스는 대게 분산 아키텍처를 염두하고 출시된 제품이 많아 더 편리하다는 장점이 있고 BASE 기반이기 때문에 완전한 ACID가 아니다. 점점 서로의 장점을 흡수하고 있기 때문에 위 표는 참고 정도로만 보면 될 것 같다.

MongoDB는 앞서 설명한 것 처럼 NoSQL 데이터베이스고 다음 세 가지 특징을 가지고있다.

데이터는 Document 기반으로 구성되어있고, ACID 대신 BASE를 택하여 성능과 가용성을 우선시한다. 그리고 오픈 소스라는 점 덕분에 무료로 이용이 가능하다.

여담으로 MongoDB는 분명 몇 년전까진 AGPL 라이센스였는데 어느 순간 SSPL(Server Side Public License)로 변경되었다. 아마 AWS(DocumentDB)나 Azure(CosmosDB)에서 별도 계약 없이 MongoDB를 이용해 돈을 벌었기 때문이 아닐까 싶다. 아무튼 아직 오픈 소스기는 하다 . MongoDB의 발전을 위한다면 클라우드 서비스 내 제품 대신 MongoDB Atlas를 이용하는 것이 좋을 것 같다. 비용도 AWS DocumentDB보단 저렴하게 시작할 수 있다.

MongoDB는 Document 기반 데이터베이스다. Database > Collection > Document > Field 계층으로 이루어져 있으며 Document는 RDBMS의 Row에 해당한다. 계층은 RDBMS와 유사하다.

흥미로운 점은 Document 기반 데이터베이스은 RDBMS와 다르게 자유로이 데이터 구조를 잡을 수 있다는 점이다. MongoDB는 BSON으로 데이터가 쌓이기 때문에 Array 데이터나 Nested한 데이터를 쉽게 넣을 수 있다.

위 데이터 구조에서 ObjectId 라는 생소한 타입을 볼 수 있다. ObjectId 는 RDBMS의 Primary Key 와 같이 고유한 키를 의미하는데 차이점은 Primary Key 는 DBMS가 직접 부여한다면 ObjectId 는 클라이언트에서 생성한다는 점이다. 이는 MongoDB 클러스터에서 Sharding된 데이터를 빠르게 가져오기 위함인데 Router(mongos)는 ObjectId 를 보고 데이터가 존재하는 Shard에서 데이터를 요청할 수 있다. 의아하게도 MongoDB 서버에서 알아서 ObjectId 를 부여해서 저장해도 될 것 같은데 딱히 지원해주지 않는다. 참고로 ObjectId 를 넣지않고 저장한다면 데이터가 그대로 저장된다.

ObjectId 는 세 영역으로 나눠져있다. 각각 첫 4 byte는 UNIX Timestamp 정보를 담고있고 다음 5 byte는 랜덤한 값으로 이루어져 있는데 3 byte와 2 byte로 나뉜다. 첫 3 byte는 클라이언트의 머신별로 고유한 키(mac 주소나 ip 주소)를 이용하여 랜덤 값을 만들어 사용한다. 다음 2 byte는 process id를 이용한다. 5 byte를 채운 후 마지막 2 byte는 Auto Increment 되는 값으로 구성된다.

이쯤되면 ObjectId 가 충돌날 가능성이 어느 정도일지 궁금할 수 있다. 충돌이 발생하려면 같은 시간, 기기에서 만들어낸 해시 값이 일치하고 우연히 같은 process id를 가지고 있으며 정말 우연히 increase된 count가 일치해야 한다. 확률은 계산해보지 않았지만 거의 충돌날 일은 없을 것 같다.

다음으로 MongoDB 데이터 조작에 대해서 알아보자. MongoDB와 같은 NoSQL은 이름처럼 SQL을 사용하지 않고 별도로 제공하는 API를 통해 데이터를 건들 수 있다. MongoDB의 경우 자바스크립트 엔진 SpiderMonkey 를 사용하여 API를 제공한다. 따라서 자바스크립트를 조금은 알아야한다.

데이터를 삽입하는 쿼리를 보면 SQL과는 모습이 많이 다른 것을 알 수 있다. 마치 클래스에서 메서드를 통해 실행하는 모습인데, 이처럼 MongoDB는 객체 조작을 통해 데이터를 관리할 수 있다.

BASE는 ACID와 대립되는 개념으로 다음 세 가지로 이루어져있다.

이처럼 BASE는 ACID와는 다르게 일관성을 어느정도 포기하고 가용성을 우선시한다. 즉, 데이터가 조금 맞지 않더라도 일단 내려준다는 뜻이다.

참고로 굳이 왜 Basically Avaliable 이나 Eventually consistent 처럼 어렵게 표현했는지 의아했는데 Acid(산)과 대립되는 느낌을 주기 위해 억지로 Base(염기)로 맞췄다는 소리를 들었다. 물론 진짜인진 모르겠지만 꽤 재밌는 이야기라고 생각한다.

마치 MongoDB는 전혀 ACID하지 않다는 식으로 글을 썼지만 사실 MongoDB는 트랜젝션을 제공한다. 아직 ACID하지 않을 때도 Single-Document Transaction 을 제공하고 MongoDB 4.0부터는 Multi-Document Transaction 을 제공함으로서 ACID를 충족했다. 이후 MongoDB 4.2에서 Shard Cluster Transacion 을 제공하면서 분산 트랜젝션까지 가능해졌다.

이번엔 MongoDB의 분산 시스템에 대해서 다뤄보자. MongoDB에서 분산 시스템은 기본으로 깔리고 들어가는만큼 반드시 알고 넘어가야하는 부분이다.

Thinking face가 생각한 것 처럼 웹 서비스가 발전하면서 데이터 무결성을 버리면서까지 더 많은 데이터, 빠른 성능, 수평 확장이 필요한 데이터베이스가 필요해졌다. 그런 요구 사항으로 인해 MongoDB가 탄생했다.

CAP 이론은 2000년에 에릭 브류어가 최초로 소개한 이론이며 어떤 분산 시스템이더라도 Consistency (일관성), Availability (가용성), Partition tolerance (분할 내성)를 모두 만족할 수 없다는 이론이다. 이 세 가지의 머리 글자를 따서 CAP 이론이라고 부른다.

Consistency는 모든 노드가 같은 시간에 같은 데이터를 볼 수 있다는 의미를 지닌다. 즉 데이터가 업데이트된 후 다른 노드에 동기화되어 모든 사용자가 최신 데이터를 본다면 일관성이 있는 시스템이다. 이를 위해선 동기화가 되는 동안 유저는 대기해야한다. 대기 시간이 길어질 경우 가용성이 떨어지는 시스템이다.

Availability는 모든 요청에 성공 혹은 실패 결과를 반환 할 수 있다는 의미를 지닌다. 하나의 노드가 망가져도 다른 노드를 통해 데이터를 제공할 수 있다면 가용성이 있는 시스템이다. 만약 다시 노드가 살아났을 때 다른 노드와 데이터가 다르다면 일관성이 떨어지는 시스템이다.

Partition tolerance는 통신에 실패해도 시스템이 계속 동작해야한다는 의미를 지닌다. 노드가 망가진 것이 아닌 노드를 연결시켜주는 네트워크가 고장나는 경우를 의미한다. 둘 사이 통신이 망가져서 동기화가 불가능해진다면 일관성이 떨어진다. 만약 통신이 복구되고 동기화되는 것을 기다린다면 가용성이 떨어진다. 결국 둘 다 만족할 수 없다.

그렇다면 CAP 이론에 따라 MongoDB는 CP 니까 일관성과 분할 내성을 지닌 데이터베이스일까? 어느정도 맞다고는 볼 수 있다. 그런데 여기서 하나 의심을 해보자. 과연 CA 라는 시스템이 존재할 수 있을까?

CA 는 네트워크 장애가 절대 발생하지 않아야 하기 때문에 사실상 불가능하다. 따라서 P 는 무조건 발생한다고 본 후에 결정해야 한다.

그리고 CP , AP 둘 중 하나에 치우친 시스템은 좋지않다. 상황에 따라 유연하게 변하거나 개발자가 원하는 형태로 설정할 수 있는 방식이 가장 이상적이다. 그렇기에 대부분의 분산 시스템은 상황에 따라 일관성과 가용성의 우선 순위를 다르게 설정한다.

그래서 기본적으로 네트워크 파티션 상황은 반드시 발생한다 가정하고 그에 따른 선택을 정리한 이론이 PACELC 이론이다.

PACELC는 다음으로 이루어져 있다.

여기서 Partition은 네트워크 파티션이 발생한 상태를 의미하고 Else는 정상 상태를 의미한다. 만약 PA / EL 이라면 네트워크 파티션 상황일 때 가용성을 더 우선시하고 평상시에도 지연 시간을 더 신경쓰므로(일관성을 신경쓰느라 지연 시간이 늦어질수록 가용성이 떨어진다) 가용성을 우선시한다는 뜻이 된다. 정리하면 MongoDB는 PA / EC 시스템이므로 네트워크 파티션 상황일 때 가용성을 더 우선시하고 평상시엔 일관성을 우선시한다.

MongoDB는 클러스터를 구성하기 위한 가장 간단한 방법으로 Replica Set을 이용할 수 있다. Replica Set은 다음 두 방법을 이용하여 구성할 수 있다.

Sharded 클러스터를 구성할 수도 있지만 이번 포스트에선 다루지 않는다.

P-S-S 시스템은 하나의 Primary와 여러 개의 Secondary로 이루어진 Replica Set이다.

만약 Primary가 죽을 경우 투표를 통해 남은 Secondary 중 새로운 Primary를 선출한다. 여기서 만약 Secondary가 하나만 남았다면 새로운 Primary를 선출할 수 없어 서버 장애가 발생한다.

P-S-A 시스템은 하나의 Primary와 Arbiter 그리고 여러 개의 Secondary로 이루어진 Replica Set이다.

P-S-A 시스템에선 Primary가 죽은 경우 Arbiter가 Secondary와 함께 투표해서 Secondary 중 새로운 Primary를 선출한다. P-S-A 시스템에선 Secondary가 하나만 남았더라도 Arbiter가 남아있어서 남은 Secondary를 Primary로 선출 할 수 있어서 정상적으로 서비스가 동작한다.

MongoDB는 Document라는 방식을 사용하기 때문에 RDBMS와는 다른 방식으로 모델링을 해야한다. 이를 위한 패턴을 정리해보자.

같은 Collection에서 데이터가 서로를 참조하는 Tree 구조를 가지고 있을 때 사용할 수 있는 패턴은 다섯가지가 있다. 소개하는 모든 패턴은 아래 트리 구조를 참고하여 구성했다.

Parent References는 다음과 같은 구조를 가진다.

부모 Document를 바로 찾아야 하는 경우 적합하다. 만약 하위 트리를 모두 찾아야하는 경우엔 적합하지 않다.

Child References는 다음과 같은 구조를 가진다.

자식 Document를 바로 찾아야하는 경우 적합하다. 부모 Document도 찾을 수 있지만 Parent References보다 탐색 성능이 느리다.

Array of Ancestors는 다음과 같은 구조를 가진다.

조상 Document를 바로 알 수 있어야하는 경우와 자식 Document를 모두 찾아야 하는 경우 적합하다. Breadcrumb 등에 쓸 수 있다. 만약 여러 부모 Document를 가진 경우 적합하지 않다.

Materialized Paths는 다음과 같은 구조를 가진다.

Array of Ancestors와 유사하다. Array 타입이 아닌 String 타입을 이용하는데 정규식을 이용하여 하위 항목을 찾을 수 있다. 이때 하위 트리를 찾는데에 Array of Ancestors보다 빠르다. 단, 공통 부모를 찾아야 하는 경우엔 더 느려질 수 있다.

Nested Sets은 조금 특이한 구조를 가진다. 아래 그림의 번호를 참고하여 구조를 살펴보자.

‘NoSQL로의 초대’ 개발자를 위한 몽고DB 개론

몽고DB, 문서 데이터 저장소

<그림 1> 몽고DB 문서 저장소

# create a database:

CREATE DATABASE menagerie;

# create a table in the database:

USE menagerie; CREATE TABLE pet (name VARCHAR(20));

# connect to the database in app and issue insert:

INSERT INTO pet (name) VALUES (‘Friar Tuck’);

# add a column:

ALTER TABLE pet ADD type VARCHAR(20));

# update existing record:

UPDATE pet SET type = ‘cat’ WHERE name = ‘Friar Tuck’

# connect to the database in app and issue insert:

use menagerie; db.pet.insertOne({name:”friar tuck”});

# issue update:

db.pet.updateOne({ name:’friar tuck’ }, { $set:{ type: ‘cat’ } } );

몽고DB의 ID 필드

_id

_id

몽고DB의 인덱싱

db.pet.createIndex( { name: 1 } )

몽고DB의 중첩 문서

<예제 1> 중첩 문서의 예

{

“_id”: “5cf0029caff5056591b0ce7d”,

“name”: “Friar Tuck”,

“address”: {

“street”: “Feline Lane”,

“city”: “Big Sur”,

“state”: “CA”,

“zip”: “93920”

},

“type”: “cat”

}

몽고DB의 역정규화

몽고DB 쿼리 언어

db.pet.find({ “type” : “cat” })

db.pet.find({ “type” : “cat”, “address.state”: “CA” })

몽고DB 업데이트 구문

$set

<예제 2> 중첩 문서 업데이트

db.people.update(

{

“type”: “cat”,

“name”: “Friar Tuck”

},

{

$set: {

“address.zip”: “86004”

}

}

)

몽고DB 클라우드 및 배포 옵션

몽고DB의 고가용성

NoSQL 데이터 저장소는 더 유연한 데이터 관리 방법을 통해 소프트웨어 개발에 혁신을 불러왔다. 이런 NoSQL 중 대표적인 솔루션 중 하나가 바로 문서 지향 데이터 저장소인 몽고DB다. 몽고DB의 정의와 이 DB가 애플리케이션 요구사항을 어떻게 처리하는지 알아보자.관계형 데이터베이스는 엄격하게 통제되는 테이블과 열에 정보를 저장한다. 반면 문서 저장소인 몽고DB는 컬렉션과 문서에 정보를 저장한다. 이것은 몽고DB의 가장 특징이기도 한데, 컬렉션과 문서가 비구조적이라는 점이다. 스키마리스(schema-less)라고 불리는 것도 이 때문이다. 몽고DB 인스턴스(컬렉션 및 문서) 구조는 사전에 정의되지 않고, 저장되는 데이터에 적합하도록 유연하게 변형된다.몽고DB의 문서는 키-값 집합으로 그 동작 방식은 자바스크립트와 같은 코드의 객체와 매우 비슷하다. 안에 들어가는 데이터에 따라 구조가 변경된다. 덕분에 몽고DB와 같은 데이터 저장소를 대상으로 한 코딩은 관계형 데이터 저장소에 대한 코딩에 비해 더 쉽고 민첩하다. 간단히 말해 애플리케이션 코드와 문서 데이터 저장소 간의 상호작용이 더 자연스럽게 느껴진다. 은 몽고DB의 컬렉션과 문서 구조를 시각적으로 보여준다.이 데이터 모델링 형태는 매우 유연해 데이터를 그때그때 필요에 맞게 처리할 수 있고, 결과적으로 성능 혜택 으로 이어진다. 몽고DB와 기존 DB의 차이점을 확실히 이해하기 위해 같은 작업(레코드를 만든 다음 애플리케이션에서 필드를 추가하기)을 처리하는 방법을 비교해 보자.먼저 관계형 데이터베이스에서는 보통 다음과 같이 시작한다.같은 작업을 몽고DB에서 실행하면 다음과 같다.결국 두 구문을 보면 몽고DB를 사용할 경우 개발이 더 매끄럽다는 것을 알 수 있다. 물론 이런 유연함은 개발자에게는 스키마 팽창을 피해야 한다는 부담을 의미하기도 한다. 따라서 대규모 앱에서는 문서 구조에 대한 통제력을 유지하는 것이 중요하다.관계형 데이터베이스에는 기본 키(primary key)라는 개념이 있는데, 이는 많은 경우 합성 ID 열, 즉 비즈니스 데이터와 관계되지 않고 생성된 값이다. 몽고DB에는 비슷한 목적으로 모든 문서에필드가 있다. 개발자가 문서를 만들 때 ID를 제공하지 않으면 몽고DB 엔진이 UUID로 자동 생성한다.필드는 기본 키와 마찬가지로 자동으로 인덱싱되며 고유해야 한다.몽고DB의 인덱싱은 관계형 데이터베이스의 인덱싱과 비슷하다. 문서의 필드에 대한 부가적인 데이터를 생성해 이 필드에 의존하는 조회의 속도를 높인다. 몽고DB는 B-트리 인덱스를 사용한다. 인덱스는 다음과 같은 구문으로 만들 수 있다. 매개변수의 정수는 인덱스가 오름차순(1)인지 내림차순(-1)인지를 나타낸다.몽고DB의 문서 지향 구조가 갖는 강력한 장점은 문서를 중첩할 수 있다는 것이다. 예를 들어 의 구조와 같이, 반려동물 문서에서 주소 정보를 저장할 또 다른 테이블을 만드는 대신 중첩 문서를 만들 수 있다.몽고DB와 같은 문서 저장소는 조인을 다소 제한적으로 지원하며 외래 키의 개념이 없다. 데이터 구조의 동적인 특성 때문이다. 따라서 몽고DB의 데이터 모델링은 역정규화로 흐르는 경향이 있다. 즉, 엄격하게 테이블 사일로에 데이터를 유지하는 대신 문서에 데이터의 사본을 만든다. 조회 속도는 빨라지지만 대신 데이터 일관성을 위한 유지보수 작업이 늘어난다.역정규화는 필수 요건은 아니지만 문서 지향 데이터베이스를 사용할 때 뚜렷하게 나타난다. 데이터를 특정 단일 값 열로 정규화하는 (즉, 중복하지 않는) 경향이 있는 SQL과 달리 복잡한 중첩 레코드를 처리하는 기능이 우수하기 때문이다.몽고DB의 쿼리 언어는 문서 구조와 마찬가지로 JSON 지향적이다. 덕분에 복잡한 중첩 문서도 처리할 수 있는 매우 강력하고 표현력이 뛰어난 구문을 제공한다.예를 들어 가상의 데이터베이스에서 모든 고양이를 쿼리하려면를 실행하면 되고, 캘리포니아에 있는 모든 고양이를 쿼리하려면를 실행하면 된다. 쿼리 언어는 중첩된 주소 문서를 순회한다.몽고DB의 구문은 JSON과 비슷한 부분도 있다. 예를 들어키워드는 어느 필드가 어느 값으로 변경될지를 나타낸다. 와 같이 set 객체는 점 표기법을 통해 중첩 문서를 지원한다. 에서는 이름이 “Friar Truck”인 고양이의 우편번호를 변경한다.를 보면 업데이트 구문이 매우 강력하다는 것을 알 수 있다. 실제로 SQL의 업데이트 구문보다 더 강력하다.몽고DB 설계의 핵심은 확장성과 분산 배포다. 웹 스케일 워크로드를 충분히 처리할 수 있을 정도다. 이를 위해 몽고DB 기업은 몽고DB 아틀라스(Atlas)에서 멀티클라우드 데이터베이스 클러스터링 솔루션을 제공한다. 몽고DB 아틀라스는 여러 클라우드 플랫폼을 포괄하는 관리형 데이터베이스와 같이 동작하며, 모니터링 및 내결함성과 같은 엔터프라이즈 기능을 포함한다.AWS의 아마존 도큐먼트DB에 몽고DB 호환성이 주요 특징으로 기술되어 있는 것을 보면 몽고DB의 중요성이 어느 정도인지 짐작할 수 있다. 마이크로소프트 애저 코스모스 DB 역시 몽고DB API를 지원한다.몽고DB는 고가용성을 위한 복제본 집합을 지원한다. 데이터가 주 인스턴스에 한 번 작성된 후 읽기를 위한 2차 저장소에 복제하는 식이다. 몽고DB 웹사이트 에서 더 자세한 내용을 확인할 수 있다. 몽고DB는 유연한 스키마 데이터 저장소라는 새로운 트렌드를 이끄는 주도적인 NoSQL 솔루션이다. 거의 모든 프로그래밍 언어를 위한 고급 드라이버가 있으며 다양한 배포 옵션도 지원한다. [email protected]

몽고디비(MongoDB) (MongoDB)

몽고디비(MongoDB) (MongoDB)

몽고디비(MongoDB)는 무료 오픈소스 기반의 데이터베이스 관리 시스템(DBMS)이다. 오라클(Oracle), 마이에스큐엘(MySQL), 큐브리드(Cubrid) 등의 관계형 데이터베이스 관리 시스템(RDBMS)과 달리, 몽고디비는 빅데이터와 같은 비정형 데이터 분석에 주로 사용되는 노에스큐엘(NoSQL)의 일종이다. 몽고디비는 유연한 스키마를 가진 제이슨(JSON) 방식의 문서에 데이터를 저장한다. GNU AGPL과 아파치 라이선스(Apache License)를 따른다.

개요 [ 편집 ]

몽고디비(MongoDB)는 크로스 플랫폼 도큐먼트 지향 데이터베이스 시스템이다. 노에스큐엘(NoSQL) 데이터베이스로 분류되는 몽고디비는 JSON과 같은 동적 스키마형 도큐먼트들(몽고DB는 이러한 포맷을 BSON이라 부름)을 선호함에 따라 전통적인 테이블 기반 관계형 데이터베이스 구조의 사용을 삼간다. 이로써 특정한 종류의 애플리케이션을 더 쉽고 더 빠르게 데이터 통합을 가능케 한다. 아페로 GPL과 아파치 라이선스를 결합하여 공개된 몽고디비는 자유-오픈 소스 소프트웨어이다. 10gen에서 2007년 10월, PaaS제품의 구성요소로 처음 개발하였으며 10gen이 상용 지원 및 기타 서비스를 제공한 2009년에 오픈 소스 개발 모델로 전향하였다. 그 뒤로 몽고디비는 크레이그리스트, 이베이, 포스퀘어, 소스포지, 뉴욕 타임즈, 구글, 페이스북과 같은 수많은 주요 웹 사이트 및 서비스에 백엔드 소프트웨어로 채택되고 있다.[1]

역사 [ 편집 ]

2007년 : 10gen 소프트웨어 기업은 PaaS 제품으로서 몽고DB의 개발을 시작했다.

2009년 : 10gen 소프트웨어 기업은 오픈 소스 개발 모델로 전환했으며 기업은 상용 지원과 기타 서비스를 제공하는 방식을 채택했다

2013년 : 10gen은 사명을 MongoDB Inc.로 변경했다.

2017년 10월 20일 : 몽고DB는 주식 공개 기업이 되었으며, NASDAQ에 MDB라는 심볼로 등재되었고, IPO 가격은 한 주에 24달러였다.[1]

특징 [ 편집 ]

몽고디비(MongoDB)는 데이터 객체들이 컬렉션 내부에서 독립된 문서로 저장되는, 문서 모델을 기반으로 하는 노에스큐엘(NoSQL) 데이터베이스이다.

문서 지향 데이터베이스(Document-oriented database) [ 편집 ]

노에스큐엘(NoSQL) 중 에서도 유명한 몽고디비(MongoDB)는 비즈니스 요구에 맞도록 시스템을 확장하는 기능이 유연한 문서 지향의 데이터베이스이다. 문서 지향 데이터베이스에서는 RDBMS에서 사용하는 행 개념 대신에 더욱 유연한 모델인 문서를 이용하는데, 내장 문서와 배열 같은 표현이 가능하기 때문에 복잡한 객체의 계층 관계를 하나의 레코드(열)로 표현할 수 있다.

몽고디비(MongoDB)는 스키마가 없다. 이것은 필요할 때마다 필드를 추가하거나 제거하기가 매우 쉬워졌음을 의미한다. 따라서 개발 과정이 매우 단순해지고 빠르게 개발할 수 있다.

스케일 아웃(Scale Out) [ 편집 ]

소프트웨어 마에스트로라는 국가인재양성 프로그램에서 뉴스를 추천해주는 서비스를 프로젝트로 하고 있다. 언론사들을 크롤러가 돌며 뉴스를 수집하여 개인의 선호에 맞게 추천하는 서비스다. 이때 엄청난 양의 사용자 선호 로그 데이터를 필요할 때마다 필드를 바꾸며 빠른 속도로 쌓여야 하는데, 이것에 적합하다고 판정된 DB가 몽고디비(MongoDB)이다. 데이터베이스에 엄청난 로그가 쌓여야 하는데 Scale out도 가능할뿐더러 스키마가 없어 필요할 때마다 필드를 변형시킬 수 있기 때문이다.

유니버셜 데이터베이스(Universal Database) [ 편집 ]

몽고디비(MongoDB)는 유니버셜 데이터베이스(Universal Database)를 목적으로 만들어졌기 때문에 CRUD의 작업 이외에도 다양한 기능을 제공하며, 쿼리를 사용할 수 있다. 아래는 몽고디비(MongoDB)가 제공하는 기능이다.

인덱싱 제공 집계 파이프라인의 지원 특수한 컬렉션 유형 제공. 파일 저장소의 지원

High performance : 몽고디비(MongoDB)는 쓰기와 읽기에서 기존의 관계형 데이터베이스(Relational Database)보다 수십 배의 성능을 발휘한다.[2]

데이터 형식 [ 편집 ]

몽고디비(MongoDB)는 형식(type)으로 질의할 때, 1~255사이의 정수형 ID 숫자를 각 데이터 형식에 할당한다.

형식 숫자 형식 숫자 실수형(Double) 1 정규표현식 11 문자열(String) 2 자바 스크립트 13 객체 3 심볼(Symbol) 14 배열 4 자바 스크립트(with scope) 15 바이너리 데이터 5 32비트 정수형 16 객체ID 7 타임스탬프 17 불린(Boolean) 8 64비트 정수형 18 날짜(Date) 9 Min 키 255 널(Null) 10 Max 키 127

다른 BSON형식의 값을 비교할 때, 몽고디비는 숫자가 제일 낮은 순서부터 높은 순서대로 비교한다.[3]

논리적 구조 [ 편집 ]

관계형 데이터베이스 몽고디비 Table Collection Row Document Column Field Primary Key Object_ID Field Relationship Embbeded & Link

노에스큐엘 [ 편집 ]

노에스큐엘(NoSQL)은 ‘Non Relational Operation Database SQL’의 줄임말로써 관계형 데이터베이스가 아닌 SQL이다.

노에스큐엘(NoSQL)의 장점

불필요한 Join의 최소화 유연성있는 서버구조 제공 비정형 데이터 구조로 설계비용 감소 읽기/쓰기가 빠르며 빅데이터 처리 가능 저렴한 비용으로 분산처리 및 병렬처리 가능

노에스큐엘(NoSQL)의 모델

KEY-VALUE – Redis , Memcached COLUMN – Hbase, Casandra DOCUMENT – MongoDB, GRAPH – GraphDB

관계형 데이터베이스(Relational Database)와 노에스큐엘(NoSQL) 비교

관계형 데이터베이스 노에스큐엘 Scale-up – 서버 한대 중심으로 확장 Scale-out – 여러대의 서버를 중심으로 확장 무결성 유연성 데이터 중복 제거 데이터 중복 허용 트랜잭션 빠른 쓰기, 읽기

명령어 [ 편집 ]

데이터베이스 목록 확인

show dbs;

DB 상태 확인

db.stats();

Collection 만들기

db.createCollection(‘board’)

Document 삽입

db.board.save({_id:1, title:’title1′,content:’content1′,writer:’banana’}) db.board.insert({_id:2, title:’title2′,content:’content2′,writer:’ssangssang’})

Document 확인

db.board.find();

Collection 생성/관리

db.createCollection(‘name’,[option]) : collection 생성 db.name.insert({key:value}) : collection 생성 show collections : collection 목록 보기 db.name.renameCollection(‘new_name’) : collection 이름 변경 db.name.drop() : 삭제

데이터 추가/갱신/삭제/조회

db.name.save({key-1:value-1,key-2:value-2 … }); db.name.insert({key-1:value-1,key-2:value-2 … }); db.name.update({ckey:cvalue},{$set:{key-1:value-1}); db.name.remove({ckey:cvalue}); db.name.find()

비교 연산자

$cmp : A>B:0+, AB : true $lt : A

몽고DB 완벽 가이드

출판사 리뷰

개발자와 데이터베이스 관리자를 위한 몽고DB의 모든 것

몽고DB를 사용하여 애플리케이션을 개발하고 관리하는 데 필요한 폭넓은 내용을 한 권에 담았습니다. 개발을 시작하기에 앞서 도큐먼트와 같이 NoSQL 데이터베이스의 핵심 용어와 동작 방식부터 차근차근 익힙니다. 기초를 익힌 후에는 효율적인 애플리케이션을 설계하기 위한 기능과 고려 사항을 다양한 예제를 통해 학습합니다. 몽고DB 입문자도 책의 내용을 따라가다 보면 전반적인 개발 과정을 익힐 수 있습니다. 데이터베이스 관리자와 운영자에게 유용한 관리 방법도 다룹니다.

[개정 3판]에서 달라진 점

몽고DB 최신 버전(v4.x)은 트랜잭션, 집계 표현식, 복제, 샤딩 성능이 강화되고 기능이 추가되었으며 와이어드타이거 스토리지 엔진을 도입하여 성능이 향상되었습니다. 이를 반영한 개정 3판에서는 복제와 샤딩을 더 깊이 있게 다루고 풍부한 예제를 통해 이해하기 쉽게 설명합니다. 애플리케이션 개발 방법뿐 아니라 관리 방법도 자세히 다룹니다. 몽고DB 아틀라스와 같은 클라우드 서비스를 비롯하여 새로 도입된 엔터프라이즈 제품도 소개하며 활용 팁을 제공합니다.

주요 내용

-몽고DB 핵심 개념과 연산, 쿼리 방법

-데이터 집계 기술과 인덱스, 컬렉션, 트랜잭션 사용법

-복제 셋을 구축하고 운영하는 방법

-클러스터를 구성하고 샤드 키를 선택하는 방법

-애플리케이션 관리를 위한 보안과 인증, 권한 구성 방법

-서버를 모니터링하고 백업, 복구하는 방법

키워드에 대한 정보 몽고 디비

다음은 Bing에서 몽고 디비 주제에 대한 검색 결과입니다. 필요한 경우 더 읽을 수 있습니다.

이 기사는 인터넷의 다양한 출처에서 편집되었습니다. 이 기사가 유용했기를 바랍니다. 이 기사가 유용하다고 생각되면 공유하십시오. 매우 감사합니다!

사람들이 주제에 대해 자주 검색하는 키워드 MongoDB 프로그래밍 4강 MongoDB의 기본 개념에 대해 알아보기 | T아카데미

  • 동영상
  • 공유
  • 카메라폰
  • 동영상폰
  • 무료
  • 올리기

MongoDB #프로그래밍 #4강 #MongoDB의 #기본 #개념에 #대해 #알아보기 #| #T아카데미


YouTube에서 몽고 디비 주제의 다른 동영상 보기

주제에 대한 기사를 시청해 주셔서 감사합니다 MongoDB 프로그래밍 4강 MongoDB의 기본 개념에 대해 알아보기 | T아카데미 | 몽고 디비, 이 기사가 유용하다고 생각되면 공유하십시오, 매우 감사합니다.

Leave a Comment