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

SDN(OpenFlow) 개요

OpenFlow는 SDN(Software Defined Network)의 하나의 콤포넌트이다. 아래는 2013/3/13 오픈프로우 코리아 주최로 열린 한국 SDN Interest Group 4번째 정기세미나의 내용이다. 다음에는 꼭 모임에 참석하고 싶다. SDN Architecture including OpenFlow 위 그림에서와 같이, Control Layer부분과 Application Layer부분이 최근 활발히 연구개발되고 있다. 그 중 Control Layer부분은 Controller가 많은 비중을 차지 하는데, 다음 절에서와 같이 이미 많은 벤더들이 많은 OpenFlow 기반의 Controller를 제공하고 있다. 그외 소규모 벤더들은 Controller가 아닌 Application Layer에서 보안, 로드벨런싱, 홈네트워크 등의 서비스가 지원되는 제품 개발에 힘쓰고 있다. SDN에서는 Router라는 명칭 대신, Switch라는 명칭을 사용하는데, 이는 Router보다 더 단순한 기능을 수행하고, 기존 레거시와 차별화를 위해 명명된 것으로 보인다. 또한, Switch를 반드시 벤더로부터 구매할 필요가 없다. 상황에 따라 리눅스 등의 운영체제를 기반으로 자체 개발이 가능하다. Controllers의 종류 SDN의 Controller 가운데 Open Source로 운영되는 것은 다음과 같다. 대부분 Java언어로 구현되어 있다. 따라서 플랫폼 또는 인프라 개발자라면 Java에 능숙해야 한다. NOX C++/Python Beacon Java Floodlight Java Maestro Java RouteFlow NOX, Quagga 보안을 위한 Open Source FortNOX Java 기반의 SE-FloodLight  공격 감지  인증  스위치의 Flow 처리 성능 고려 FRESCO OpenFlow Contro...

Sqlite database is locked

sqlite는 embedded system에서 널리 사용되는 무료 dbms?(dbms라고 말하긴 좀 그렇지만, dbms라 불러주자 ㅎ) 이다. 특히 memory db 기능이 아주 유용하다. 그 밖의 dbms에서도 이 기능이 있으나, 이 기능이 지원되는 버전은 대부분 고가이다. 따라서, 무료인 sqlite를 많이들 애용하는 것 같다. 멀티쓰레드를 sqlite DB를 구현하고 롱런테스트를 하다보면, pthread_mutex_lock으로 쓰레드 간의 교착상태를 막아줘도, sqlite lock 에러가 간헐적으로 발생할 것이다. 이에 대해 본인은 다음과 같은 에러 처리 구문을 준비하여 사용하고 있다. sqlite Error가 발생하면, sqlite3_exception함수를 호출한다. 이 함수에서 sqlite error code를 구분하여, 만약, busy 또는 locked이면 최대 2초간 sleep 상태로 만드는 sqlite3_busy_timeout, busy handler를 호출한다. 그 다음, goto 구문으로 재차 sqlite3_exec를 실행한다. 단, sqlite3_exec는 transaction의 begin과 commit 또는 rollback 구문 사이에서 실행한다. 대부분 lock 에러가 발생하더라도 1~2번 실패 후에, 처리된다는 것이 본인의 테스트 결과이다. 단, journal를 WAL로 변경하였음. 기존 journal은 멀티쓰레드 지향적이지 않다는 점을 잊지마시길.... Error Code SQLITE_LOCKED (6): Database Is Locked This error code occurs when you try to do two incompatible things with a database at the same time from the same database connection. For example, if you are in the middle of a SELECT statement and y...