상세 컨텐츠

본문 제목

NoSQL 맛보기

데이터베이스

by 김일국 2017. 8. 4. 13:28

본문

그동안 관심이 있었으나, 찾아보지 못했던 NoSQL에 대해서 한번 살펴 보았다.

요 몇년 사이 트렌드 였던 빅데이터의 파생 기술이라고 할 수 있다.

빅데이터는 = NoSQL(저장기술) + Hadoop(분석기술) + R(시각화기술) 이렇게 3가지 기술을 가져야지만, 서비스가 가능합니다.

이중에 저장기술인 NoSQL에 대해서 살펴 봅니다.

실습은 https://codeanywhere.com/editor/ 무료 클라우드 사이트의 계정으로 MEAN 컨테이너(우분투)를 추가해서 실습합니다.

 

MEAN컨테이너는 MongoDB(몽고db)라는 NoSQL 제품이 기본 설치되어있습니다. 그래서, 위처럼 콘솔화면에서 mongo 를 실행하면 됩니다.

사용하기 전에 기본 용어를 알고 시작합니다.

- 몽고DB는 RDBMS의 테이블을 객체생성 하듯이 db.createCollection("emp"); 명령으로 생성한다.

- RDBMS의 스키마처럼 데이터타입을 지정하지 않는다.

- 프리이머리 키를 empno로 상상한다면, 위에서 컬렉션(RDBMS의 테이블)을 생성 후

db.emp.createIndex({empno:1}, {unique:true}); 와 같이 JSON형태의 명령으로 프라이머리키를 생성한다.

- JSON(JavaScript Object Notation)형식으로 쿼리문법을 작성하고, 물리적인 저장은 BSON(Binary Serial Object Notation)으로 저장되지만, 사용자 입장에서는 JSON형태만 알면 된다.

- 아래처럼 3개의 다큐멘트(RDBMS의 레코드)를 입력한다.(역시 JSON형식이다.)

  db.emp.insert({empno:101,ename:"김일국"});
  db.emp.insert({empno:102,ename:"김이국"});
  db.emp.insert({empno:103,ename:"김삼국"});

- db.emp.find(); 명령어로 전체 다큐멘트(레코드)를 출력한다.

- 아래와 같이 empno를 중복 입력하게 되면, dup key 에러가 나타나면 입력되지 않는다.

  db.emp.insert({empno:103,ename:"김삼국"});

- RDBMS의 SELECT * FROM emp WHERE empno >= 101 and empno <= 102 을 NoSQL(몽고db)에서는 아래처럼 쿼리형식을 갖는다.

- db.emp.find({empno: {'$gte':101, '$lte':102}}); 어떻게 보면 간단하지만, 조건이 많아지면 json형태를 유지해야 하기 때문에 오히려 복잡하게 보입니다. 게다가, NoSQL은 컬렉션간관계(RDBMS의 조인)이 존재하지 않기 때문에, referencing이나 embedding 기술을 사용하게 되는데, 역시 JSON 형식으로 만들어야 하기때문에 쉽지 않습니다. 즉, 모든 쿼리는 단일 컬렉션(테이블)에서 해결해야 합니다.

 

 

살펴본 결과 일반 업무용 프로젝트에는 맞지 않는 방식이고, 비용대비 분산처리 및 빅데이터 처리시, RDB보다 단기간에 처리가능한 유용한 기술이라고 판단됩니다.

하지만, 빅데이터를 이용한 시장의 대표격인 좌표정보를 이용한 거리측정에서는 탁월한 기능을 가질수 있게 됩니다.

내장된 2d 지오인덱스 기능으로 지도의 좌표에서 시작점과 타겟(점)과의 거리를 쉽게 구할 수 있게 됩니다.

예를 들면, mongo 터미널에서

db.createCollection("square"); //square 라는 컬렉션을 만들고,
for(var i=0;i<100;i++) db.square.insert({pos:[i%10,Math.floor(i/10)]}); //0부터 10까지의 좌표지도를 생성합니다.
db.square.ensureIndex({pos:"2d"}); //지오인덱스=좌표인덱스를 생성합니다.
db.square.find({pos:{$near:[5,5]}}).limit(5); //좌표[5,5]에서 가장가까운 점 5개(본인점포함)를 구합니다.

 

위 결과 [5,5], [4,5], [5,6], [5,4], [6,5] (그림으로 표시하면 아래와 같습니다.)

 

위에서는 좌표를 수동으로 만들어서 지오스페셜2d인덱스와 지오매트리 기능을 사용하였으나, 만약 지도좌표(지역, 국가, 지구, 우주등)만 제대로 구축되어 있다면 대단한 기능으로 사용될 수 있으리라는 생각이 듭니다. (예, 현재 위치에서 가장 가까운 위치의 병원찾기등)

아마 인터넷이 알파넷에서 출발 했듯이 마찬가지로 NoSQL도 군용에서 시작되지 않았을까 생각 됩니다.

 

이렇게 오늘은 그동안 NoSQL이 무엇인지 몽고DB를 가지고 테스트 하면서 알아 보았습니다.

관련 자료 URL:

- http://bigmatch.i-um.net/2013/12/mongodb%EB%A5%BC-%EC%93%B0%EB%A9%B4%EC%84%9C-%EC%95%8C%EA%B2%8C-%EB%90%9C-%EA%B2%83%EB%93%A4/

- http://html5around.com/wordpress/tutorials/node-js%EC%97%90%EC%84%9C-mongodb%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0mongodb-native/

- http://bigbigdata.tistory.com/17

 

MongoDB - Collection ~ Operator

Collection 생성(Create), 관리 -RDBMS의 SQL언어와 문법이 유사해서 쉽다  RDBMS MongoDB TABLE COLLECTION ROW DOCUMENT COLUMN FIELD PRIMARY KEY OBJECT_ID Field RELATIONSHIP EMBEDDED & LINKING - 개념적..

bigbigdata.tistory.com

Ps. 몽고 DB를 윈도우에서 설치하려면 아래 정보를 참조 합니다.

- m.blog.naver.com/wideeyed/221815886721

관련글 더보기

댓글 영역