티스토리 뷰

728x90
반응형

몽고디비 클러스터 이동으로 json데이터를 다른 클러스터로 이관하는 작업을 하게 되었습니다.

몽고디비는 document 기반의 데이터베이스여서 RDBMS와 다르게

넣은 데이터 타입에 맞게 알아서 스키마를 갖춥니다.

 

작업을 시작하기 전에...

NoSQL이 무엇인지, 왜 써야되는지, 어떤종류가 있는지 를  소개하고

몽고디비에 데이터를 넣는 작업을 진행하겠습니다.


> NoSQL  데이터베이스가 무엇인가요?

NoSQL은 Not Only SQL 약자 입니다.

NoSQL 데이터베이스는 Table(표)형식을 갖추지 않은 비관계형 데이터베이스 입니다.

NoSQL은 관계형 데이터베이스 이외의 형식으로 데이터를 저장하는 데이터베이스 이기도 하지만

관계형 데이터베이스와 방식은 다르지만, 관계 데이터 도 저장할 수 있습니다.

즉, 유연한 스키마를 갖춘 데이터베이스 이며, 대량의 데이터와 높은 사용자 부하에서도 쉽게 확장이 가능합니다.

 

 

* 관계형 데이터베이스

행(rows) 과 열(columns)로 구성된 테이블 형식의 스키마를 갖춘 데이터베이스 입니다.

대표적인 관계형 데이터베이스는 MySQL, Oracle, PostgreSQL 등이 있으며

관계형데이터베이스의 스키마는 테이블, 행, 열, 인덱스, 테이블간의 관계 를 규정해야됩니다.

데이터베이스는 테이블 사이의 관계에서 참조 무결성을 실현 해야됩니다.

 

*참조 무결성: 두 테이블간의 참조관계를 선언하는 제약조건을 의미합니다.

자식 테이블의 외래키는 부모 테이블의 기본키와 도메인이 동일해야합니다.

자식 릴레이션 값이 변경될 때 부모 릴레이션의 제약을 받는다는 것을 의미합니다.

참조무결성 예시

 

 

> NoSQL 데이터베이스는 어떤게 있나요?

1) Key-Value Database

각 항목에 키(Key)와 값(Value)이 포함되어 있는 데이터베이스 입니다.

키-값 데이터베이스는 대량의 데이터를 저장해야하지만 검색을 위해 복잡한 쿼리를 수행할 필요 없는 사례에 적합합니다.

키-값 데이터베이스는 큰 분할성 이 특징입니다.  다른 유형의 데이터베이스로는 불가능한 범위까지 수평 확장을 가능하게 합니다.

Redis와 AWS DynanoDB가 키-값 형태의 데이터베이스 입니다.

 

 

2) Document Database

JSON(JavaScript Object Notation) 객체와 비슷한 문서(document)에 데이터를 저장합니다.

Document Database의 레코드가 document(문서) 입니다.

각 문서에는 필드(field)와 값(value) 의 쌍이 포함되어 있습니다.

 

애플리케이션 코드에서 데이터는 객체 또는 JSON 형식의 문서로 표시됩니다.

객체 및 JSON 형식이 개발자에게 효율적이고 직관적인 데이터 모델이기 때문에 빠르고 쉽게 작업할 수 있습니다.

유연한 스키마 를 갖춤으로서 애플리케이션 요구사항이 변경됨에 따라 데이터 모델을 발전 시킬 수 있습니다.

몽고디비가 Document Database 에 속합니다.

 

 

3) Graph Database

그래프 데이터베이스의 목적은 고도로 연결된 데이터셋(data set)을 사용하는 애플리케이션을 쉽게 구축하고 실행하는 것 입니다.

소셜 네트워킹, 추천 엔진 등 에서 그래프 데이터베이스를 활용합니다.

 

 

4) In-Memory Database

In-Memory 데이터베이스는 디스크가 아닌 메인메모리에 보유하고 있는 데이터베이스 입니다.

데이터양이 빠르게 증가할 때 데이터베이스의 응답속도가 떨어지는 문제를 해결할 수 있는 대안이기도 합니다.

인메모리 데이터베이스의 검색속도는 디스크를 검색해서 자료를 접근하는 방식보다 훨씬 빠릅니다.

ms 단위의 빠른 응답처리가 필요하거나, 트래픽이 잦은 서비스에서 많이 활용됩니다. 

In-Memory 데이터베이스는 Redis, Memcached 등이 있습니다.

 

 

> 왜 NoSQL 데이터베이스를 사용해야되나요?

1) 유연성

유연한 스키마를 제공하여 빠르고 반복적인 개발을 가능하게 해줍니다.

즉, 스키마 선언없이 필드의 추가, 삭제가 자유로운 구조 입니다.

 

2) 확장성

스케일 아웃에 의한 서버확장이 용이 합니다.

고가의 강력한 서버를 추가하는 대신에 분산형 하드웨어 클러스터를 이용해 확장하도록 설계되어 있습니다.

 

3) 고성능

대용량 데이터를 처리하는 성능이 뛰어납니다.

디스크 대신 in-memory 기반으로 결과를 빠르게 리턴하여 낮은복잡도를 갖는 알고리즘으로 만들어져서 높은 성능을 갖고 있습니다.

특정 데이터 모델 및 액세스 패턴에 대해 최적화되어 관계형 데이터베이스를 통해 유사한 기능을 충족할 때보다 더 뛰어난 성능을 얻게 합니다.

 

4) 고기능성

여러대의 백업 서버 구성이 가능하여 장애 발생시에도 무중단 서비스가 가능합니다.

 

 


> 몽고디비 데이터베이스 Insert 하기

 

1. Mongodb Atlas에 로그인 후 클러스터를 선택하여 연결합니다.

(작성자는 무료클러스터를 사용하고 있습니다.)

핑크색 박스 영역을 클릭하면, 현재 접속한 클러스터에 대한 mongosh 로 수행할 수 있도록 클러스터 주소가 나옵니다.

 

2. 터미널에서 MongoDB Shell을 Open 합니다.

$ mongosh "mongodb+srv://(데이터베이스주소)" --apiVersion 1 --username (유저명)

 

 

3. 데이터베이스 조회 후 선택한 데이터베이스를 사용합니다.

- 데이터베이스 조회

해당 클러스터에 있는 데이터베이스 리스트를 조회할 수 있습니다.

$ show databases

 

- 데이터베이스 선택 및 생성

데이터베이스 리스트에 존재하면, 해당 데이터베이스명을 선택하여 사용할 수 있습니다.

입력한 (데이터베이스명)이 데이터베이스 리스트에 존재하지 않더라도

아래명령어를 입력하면 자동으로 데이터베이스가 생성됩니다.

$ use (데이터베이스명)

 

 

 

4.  데이터를 insert합니다.

콜렉션이 없더라도, 데이터를 삽입하면 자동으로 콜렉션이 생깁니다.

텅빈 데이터베이스에 데이터를 삽입하면, 삽입한 데이터의 형태로 콜렉션의 스키마가 변경됩니다.

- db.( collection명 ).insertOne(  json데이터 )

한개의 데이터를 삽입할 수 있습니다.

$ var u = {
  snsList: ["Instagram", "NaverBlog"],
  nickname: "TestUser4",
  birthOfYears: 2003,
}


$ db.users.insertOne( u )

실제터미널 실행결과

 

 

- db.(collection명).insertMany( array데이터 )

여러개의 데이터를 삽입할 수 있습니다.

$ var users = [
  {
    snsList: ["Instagram", "NaverBlog"],
    nickname: "TestUser1",
    birthOfYears: 2001,
  },
  {
    snsList: ["Instagram", "NaverBlog"],
    nickname: "TestUser2",
    birthOfYears: 2002,
  }
]


$ db.users.insertMany(users)

 

실제 터미널 실행결과

 

 

Q. json형태로 된 데이터를 다른 클러스터의 데이터베이스에 import 하는 방법은요?

A. 데이터를 다른 클러스터로 이관하는 건데, 저의 경우에는 Studio3T에서 JSON파일 import로 해결했습니다.

1) 콜렉션을 클릭합니다.

2) 아래 사진의 import 버튼을 클릭하고, 임포트 파일형식을 json을 클릭하여, json파일을 업로드합니다.

 

 

3) 파일이 업로드되면 Run 버튼을 클릭 후, 해당 콜렉션에서 데이터가 잘 임포트됐는지 확인합니다.

 

Studio3T는 다큐먼트 기반의 데이터베이스의 스키마나 데이터를 확인하는데 정말 유용한 툴입니다!!

 


[참고자료]

 

NoSQL이란? | 비관계형 데이터베이스, 유연한 스키마 데이터 모델 | AWS

수십 년간, 애플리케이션 개발을 위해 가장 많이 사용된 데이터 모델은 Oracle, DB2, SQL Server, MySQL, PostgreSQL과 같은 관계형 데이터베이스에서 사용하는 관계형 데이터 모델이었습니다. 2000년대 중반

aws.amazon.com

 

Document Database - NoSQL

Learn what document databases are, their strengths and weaknesses, and when to use them.

www.mongodb.com

 

인 메모리 데이터베이스 - 나무위키

이 저작물은 CC BY-NC-SA 2.0 KR에 따라 이용할 수 있습니다. (단, 라이선스가 명시된 일부 문서 및 삽화 제외) 기여하신 문서의 저작권은 각 기여자에게 있으며, 각 기여자는 기여하신 부분의 저작권

namu.wiki

 

RDBMS와 NoSQL의 차이점 및 장단점

들어가기 전에 DBMS DataBase Management System 사용자와 데이터베이스 사이에서 사용자의 요구에 따라 정보를 생성해 주고 데이터베이스를 관리해 주는 소프트웨어. SQL Strucured Query Language 관계형 데이

pythontoomuchinformation.tistory.com

 

RDBMS의 한계와 NoSQL을 사용하는 이유 (3) NoSQL 장단점, 특징

DB RDBMS의 한계와 NoSQL을 사용하는 이유 (3) NoSQL 장단점, 특징 NoSQL(Not Only SQL, 비-관계형 데이터베이스) RDBMS의 복잡도와 용량 한계를 극복하기 위한 목적으로 등장했다. 정해진 스키마가 없어 자유

sujl95.tistory.com

 

728x90
반응형
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함