SQL vs NoSQL

데이터 베이스는 전통적으로 SQL 기반으로 구축하고 있다

몇년전부터 갑자기 NoSQL 기반의 몽고디비에 대한 관심이 높아지고 있다.

SQL 과 NoSQL의 차이는 무었인가

Structured Query Language 란뜻으로 번역하면 구조화된 조회 언어 정도인데 뭐 중요한건 아닌듯

아주 오래전에는 데이터 저장이 단순 파일형태였다. 조회의 속도를 개선하기 위해서 인덱스 파일을 추가하여 ISAM이라는 구조로 하다 점점 복잡해 지는 데이터를 관리하기 위해서 DBMS가 출현하고 이후 RDBMS라는 관계형데이터베이스 가 현재까지 주를 이루고 있다

RDBMS에 데이터를 저장하거나 읽어오는 언어가 SQL이다

RDBMS의 가장 중요한 기능은 관계형이다. 중복적으로 저장되는 데이터를 줄이기 위한 방법이라고 할수 있다

상품정보 => 상품명, 가격, 상품설명, 원산지

구매정보 => 구매자이름, 전화번호, 주소

판매정보 => 상품정보, 구매자정보

아주 간단히 위 내용을 보면 판매정보는 상품정보와 구매정보 모두를 포함해야 한다

판매정보가 저장되는 시점에 상품정보와 구매정보를 읽어와서 판매정보를 기록한뒤에 상품정보와 구매정보가 변경 또는 삭제가 된다면 데이터의 무결성이 깨지게 된다

상품정보 => 상품코드, 상품명, 가격, 상품설명, 원산지

구매정보 => 구매코드, 구매자이름, 전화번호, 주소

판매정보 => 상품코드, 구매코드

위와 같이 데이터를 구성한다면 판매정보는 단지 코드 두가지만 기억하고 있고 판매정보를 읽어올때 상품과 구매를 함께 읽어오는 방식으로 구현하게 된다

상품정보가 수정되거나 구매정보가 수정되더라도 코드가 연결되어 판매정보는 자동으로 최신 정보를 읽어오게 된다. 또한 상품정보를 삭제할때 판매정보에서 해당 상품코드의 사용여부를 판단해서 삭제방지도 가능하다

3가지의 데이터가 서로 연결되어 처리하는것이 관계형 데이터베이스의 최대 강점이다

보통은 판매정보가 많고 구매정보와 판매정보가 적기 떄문에 속도의 문제가 없어보이지만

글로벌 쇼핑몰을 구축한다면 조금의 문제가 생긴다. 데이터베이스 설계시 빅대빅 조인을 최대한 줄여야 한다고 말한다. Normalize 라는 과정인데 큰 데이터와 큰 데이터가 관계를 맺을떄 속도는 기하급수적으로 느려진다

네이버 블러그에서 읽음 처리에 대한 어려움이 같은 문제이다

내가 작성한 글을 누가 읽었는가이다. 회사 게시판정도면 문제가 안되지만 대한민국 전체를 대상으로 하나의 글을 읽었는가 아닌가를 판단하는 과정은 엄청난 부하다. 그래서 날짜를 계산해서 새글표시정도만 가능한것이다.

SQL의 장점이자 단점으로는 동일데이터에 동일현태의 구조로 데이터가 저장된다

구매정보1 = 이름, 전화번호, 주소

구매정보2 = 이름, 이메일, 주소

이런 형태로 데이터가 만들어지더라도 아래 형태로 저장된다

구매정보1 = 이름, 전화번호, 이메일(공백), 주소

구매정보2 = 이름, 전화번호(공백), 이메일, 주소

이는 데이터의 구조가 추가/변경이 거의 불가능하고 불필요한 항목을 영원히 기억하는 문제가 발생한다

NoSQL은 앞서 말한 형태와는 완전히 다른 구조를 가지고 있다

데이터는 어떠한 형태로도 저장이 가능하다. 데이터간에 서로 연결고리가 없다.

RDBMS의 장점을 완젼히 무시하고 있다. 그럼 어떤 장점이 있을까?

아주 빠르게 늘어나는 가변구조의 데이터의 관리에 매우 적합하다.

데이터간에 관계가 없어서 빅대빅조인이라는 개념없이 모든 데이터를 한번에 기억한다.

계층형자료구조로 저장이 되어 테이블구조의 자료에 비해 엄청나게 유연한 데이터를 관리할 수 있다.

자료를 등록하는데는 RDBMS에 비해서 많이 느리지만 조회는 훨씬 빠를 수 있는 구조로 만들수 있다.

빠르다가 아니라 빠른구조로 설계가 가능하다는 점이 중요하다

참고로 모든 데이터베이스는 바이너리 검색을 기반으로 조회를 한다

4억개의 데이터를 찾는데 32번의 검색만으로 처리가 가능하다

컴퓨터도 4억개는 시간이 많이 걸리지만 32번 이내로 처리가 되기 때문에 속도가 엄청나게 빠르다. 어떠한 디비가 더 빠른가는 말이 안돼고 그 디비가 어떠한 시스템환경에서 실행하고 있는지가 중요하다

오라클이 좋은 디비고 MySQL은 나쁜디비라고 생각하는 사람이 있다면 백인과 흑인의 차별하는것과 다를바가 없다. 기술적인 편견을 가지고 디비를 보지 말고 어떤 자료구조와 서비스인가를 먼저 확인해서 데이터베이스를 선택하는것이 바람직하다.

과거 데이터 저장공간의 비용이 클때는 효과적인 자료분산과 sql의 연계검색을 통한 RDBMS가 데이타처리의 가장 효과적이였다면 요즘은 충분한 저장공간과 대용량서비스를 기반으로한 NoSQL이 효과적이라고 생각된다.