Skip to main content

NoSQL

NoSQL과 NewSQL

NoSQL: 분산 아키텍처의 확장성, 스키마 없는 데이터 관리가 특징이며, 기존 SQL과 다르다.

NewSQL: 분산 아키텍처의 확장성하거나, ....


종래의 관계형DB에서 관계 속성이 지니는 구속적인 개념에서 벗어남.
예를 들어, 스키마 제약으로 인한 필드 값의 제한적이 사용이 예로 들 수 있다.

일관성보다는 가용성과 확장성에 중점을 둔 정장 방식을 취함.
오픈 소스 중에서 얼랭(Erlang)으로 제작된 CouchDB와 MongoDB가 있다.


얼랭은, 상업적 함수 기반 언어로, 속도가 빠르고, 언어 자체적으로 분산을 지원한다.
따라서 별도의 쓰래드 모델을 사용하지 않는다.




MongoDB의 특징은 다음과 같습니다.
0. 문서기반이다.
1. 빠르고 사용하기 쉽다.
2. RDBMS의 범위쿼리, 보조색인, 정렬 같은 관계형 연산 기능과 MapReduce같은 집계연산 기능을 동시에 지원한다.
3. 다양한 언어를 지원한다.(C, java, 파이썬... 등 약 10여개의 언어에 맞는 드라이버 제공)
4. C++로 작성되었다.
5. 수평적 무한확장 가능하다.
6. 데이터는 bson형태로 저장된다.(binary json)
7. 구조적이지 않다.(RDBMS처럼 데어터를 분석해서 모델링을 상세하게 할 필요가 없음, 스키마가 없음)

구조적/개발자적 관점으로 보면 다음과 같습니다.
1. 객체 형태의 컬렉션 기반 저장소
2. 동적 쿼리 지원
3. 내부 객체를 지원하는 Full index 지원
4. 쿼리 프로파일링
5. 복제, fail-over 지원
6. 비디오파일 과 같은 바이너리 데이터의 효과적인 저장소
7. 클라우드 기반의 자동화된 공유

MongoDB도 여타의 NoSQL처럼 테이블, 로우, 컬럼등이 존재하지 않습니다.
저장의 최소단위는 Document 이며 이는 RDBMS의 로우와 비슷하다고 보면됩니다.
각 Document는 RDBMS의 테이블과 비슷한 컬렉션이라는 곳에 모여 있습니다.
그리고 각 컬렉션은 데이터베이스에서 관리하게 됩니다.
Document의 구조를 미리 정의하지 않아도 되기때문에 어떤 Document에는 id가 존재하지만 어떤 Documemt에는 name만 존재할 수 도 있습니다.
하지만 추후 분석 및 데이터 처리를 위해서 비슷한 성격의 Document를 같은 컬렉션에서 관리하는게 좋습니다.
예를 들어 회원  정보 조회에 필요한 name, id, pwd...등의 document와 게시판 형태의 subject, content, attachmemt 들을 같은 컬렉션에 저장하면 조회나 수정시 불편하고 비효율적이니까요.

json 형태의 데이터 예)
{ name : “Joe”, x : 3.3, y : [1,2,3] }
{ name : “Kate”, x : “abc” }
{ name : “Joe”, age : 30, interests : ‘football’ }
{ name : “Kate”, age : 25 }
MongoDB는 json에 바이너리 기능을 추가해서 bson이라는 형태로 데이터를  저장합니다.

동적으로 데이터의 스키마를 바꿀 수 있고 빠르고 확장이 편하기 때문에 고객의 요구가 시시때때로 변하는 web 기반의 서비스나 모바일 서비스와 아주 궁합이 잘 맞습니다.


Comments

Popular posts from this blog

사자성어(가)

奇想天外(기상천외) 보통 사람이 쉽게 짐작할 수 없을 정도로 엉뚱하고 기발한 생각 技成眼昏(기성안혼) 재주를 다 배우니 눈이 어두워짐. 늙어서 재주가 쓸모 없게 됨 起承轉結(기승전결) 한시의 詩 作에서, 절구체의 전형적인 구성법을 지칭 제1구를 기구, 제2구를 승구, 제3구를 절구, 제4구를 결구 문장 구성에 있어서의 4단계, 서론, 설명, 증명, 결론 寄與補裨(기여보비) 이바지하여 돕고 부족함을 보태어 줌. 杞人之優(기인지우) 杞나라 사람의 군걱정이란 뜻. 곧 쓸데없는 걱정이나 무익한 근심을 말함.(=杞憂) 旣張之舞(기장지무) 이미 벌린 춤. 이미 시작한 일을 중간에서 그만 둘 수 없다 騎虎難下(기호난하) 이미 시작된 일을 중도에서 그만 둘 수 없음을 비유한 말 騎虎之勢(기호지세) = 기호난하 奇貨可居(기화가거) 진기한 물건을 사 두었다가 때를 기다리면 큰 이익을 볼 수 있다 吉祥善事(길상선사) 매우 기쁘고 좋은 일 吉凶禍福(길흉화복) 길한 일, 흉한 일, 언짢은 일, 복된 일 寄與補裨(기여보비) 이바지하여 돕고 부족함을 보태어 줌. 杞人之優(기인지우) 杞나라 사람의 군걱정이란 뜻. 곧 쓸데없는 걱정이나 무익한 근심을 말함.(=杞憂)  B A B A B A B A B A B A B A

nginx로 다중 포트 설정 및 다중 react app 설정

nginx에 다중 포트 설정하기 react로 여러 webapp를 개발하고, 동일한 서버에 실행시킬 필요가 있다. 이때 간단히 nginx에서 다중포트로 여러 webapp를 동일한 서버에서 실행시킬 수 있다. /etc/nginx/sites-available/에 default 파일이 있다. 보통 port 80로 설정되어 있다. 이 파일을 복사해서 sub로 명명한다.   아래와 같이 포트 8080으로 정하고, react app를 build한 디렉터리를 root <dir>로 지정하고, $> sudo service nginx restart 하면 된다. $>sudo systemctl status nginx.service 로 nginx 상태 확인이 가능하면, $> netstat -ano | grep 8080 으로 8080 포트가 살아있는 또는 외부PC에서  $>telnet ip 8080으로 telnet 접속이 되는지 확인하면 된다. 종종 Nginx 500 Interval Server Error가 발생하는데, 이는 1) root <dir>에서 <dir> 주소가 정확하지 않거나, 2) 파일 권한이 없거나이다. chmod 755 <dir>하면 대부분 해결될 것이다. 그럼 오늘도 유익한 하루 되시길..   

gnome screen

screen nano editor에서 빠져나오기 C+x가 screen prefix 일 경우, nano 에디터에서 빠쪄나오기 어렵다. 이때는 C+t, C+z하면 background 처리한 후, kill 명령어로 nano 실행 프로세스를 죽여야 한다.     그리고 crontab -e를 실행할 때, export VISUAL=vim; crontab -e로 실행해라.     screen session title를 변경 원할 경우 C+x, shift+a 하면 각 창 제목을 변경할 수 있다.     user's manual http://www.delorie.com/gnu/docs/screen/screen_toc.html - Run a new screen session # screen - Reattach to a previously detatched session # screen -R - Create a new window. # '''prefix''' c - Kill the current window - after confirmation # '''prefix''' k - 현재 창의 창 번호를 변경하는 방법 예 창번호 3에서 1로 변경할 경우, 먼저 창 3으로 이동한 상태에서 # '''prefix''' :number 1 [enter]하면 창번호3이 1로 변경됨.  - Switch to the other window # '''prefix''' space - Detach & Attach screen を起動した状態で、 # Ctrl-z d or Ctrl-z ^D とすると、screenを起動する前のシェルに戻ります。screenはバックグランドで動いています。これを「Detachedデタッチ」と言います。 Attachedとは「再開」 デタッチしたセッションを確認...