-
NoSQL컴퓨터 과학/데이터베이스 2021. 8. 10. 19:56
개념
NoSQL은 원래 non sql 혹은 non-relational이라는 의미였지만 sql 계열의 query 언어를 사용할 수 있는 측면을 강조하는 의미에서 Not only SQL로 불리기도 한다. 전통적인 데이터베이스 모델인 관계형 데이터베이스(RDMBS)보다 덜 제한적이면서 비정형의 데이터를 저장 및 검색하는 데 용이하다. 빅데이터를 이용해 서비스를 운용하고 있는 회사는 NoSQL을 활용하는 경우가 많다. 페이스북, 트위터, 넷플릭스, 애플의 아이클라우드 등이다.
RDBMS는 데이터 트랜잭션을 안전하게 수행되는 것을 보장하기 위해 ACID(원자성, 일관성, 독립성, 지속성) 성질을 갖고 있지만 NoSQL은 그러한 특성을 제공하지 않는다. 대신 확장성과 성능이 좋고 수평 확장에 유리하다. 서비스 혹은 데이터의 특징에 따라서 선택하면 된다. ERP 등의 데이터의 정확한 처리가 필수적인 시스템에서는 SQL이 갖고 있는 편의성이 중요하다.
소셜 미디어의 수요가 급증하면서 전통적인 RDBMS로는 비정형 데이터를 저장하고 처리하는 것이 효율적이지 못했다. 이를 쉽게 저장하고 접근하고 처리할 수 있는 구조를 가진 데이터베이스 중에서 NoSQL이 떠오르게 됐다. 일부 엔지니어는 NoSQL을 modern web-scale database라고 정의하기도 한다.
NoSQL 데이터베이스는 RDBMS보다 조금 더 유연한 면이 있고 저장과 검색에 특화되어 있다. key-value를 통해 데이터를 저장하기 때문에 응답 속도가 빠르다. RDBMS와의 특징을 요약해보자.
- 관계형 모델을 사용하지 않고 테이블 간의 조인 기능이 없음
- 대부분 여러 대의 데이터베이스 서버를 묶어(클러스터링) 하나의 데이터베이스를 구성
- RDBMS에서 지원하는 데이터 트랜잭션의 완결성(ACID) 미보장
- 데이터의 스키마와 속성을 다양하게 수용, 동적 정의 가능(schemaless)
- 오픈 소스가 다양
- 확장성, 높은 성능, 유연성
NoSQL은 빅 데이터 처리에 있어서 성능이 뛰어나고 고정된 스키마가 필요 없기 때문에 비정형 데이터를 저장할 수 있는 분산 저장 시스템이다. 2017년 기준 애플의 아이클라우드는 1,200여대의 카산드라로 운영됐고 넷플릭스는 1,000여대의 카산드라를 클러스터링했다.
기본 컨셉은 key-value이지만 서비스마다 데이터 모델이 조금씩 다르다. 점유율이 높은 몽고디비는 Document store 방식을 사용한다. Document store 방식은 문서가 기본 엔티티이며 ID를 가집니다. 스키마는 없습니다. 데이터베이스는 단순하게 데이터를 저장하기 위한 용도이며 관리 방법 등은 프로그램에서 결정해야 합니다.
{"CustomerID":99,
"Title":"Mr",
"FirstName":"Mark",
"LastName":"Hanson",
"Address":{
"StreetAddress":"999 500th Ave",
"City":"Bellevue",
"State":"WA","ZipCode":"12345"
},
"Telephone":["111-2223334","222-1112223","333-2221114"]}
{"CustomerID":100,
"Title":"Ms",
"FirstName":"Lisa",
"LastName":"Andrews",
"Address":{
"StreetAddress":"888 W. Front St",
"City":"Boise",
"State":"ID",
"ZipCode":"54321"
},
"Telephone":["555-4443332","444-5552223","333-5554442"]}카산드라와 완벽하게 호환되는 ScyllaDB(실라디비)는 카산드라와 동일하게 Wide columnar store 방식을 이용한다. 테이블, 열과 행이 존재하지만 RDBMS와 같지 않다. 같은 테이블 안에서 컬럼의 이름과 포맷은 로우마다 다를 수 있다. ID가 있고 컬럼 패밀리라는 게 있고 컬럼 패밀리는 컬럼의 집합체다. 예를 들어 컬럼 패밀리 데이터베이스에 고객의 이름을 포함할 경우 아래 그림처럼 컬럼 패밀리를 만들 수 있다. 이 컬럼 패밀리는 title과 고객 읾으로 구성되며 고개은 유일키인 Customer ID를 사용해 데이터를 식별한다.
컬럼 영역에서 정해진 이름을 사용하지 않아도 된다. 다음 그림은 고객이 보유한 주식을 모니터링하는 금융 기관의 주식 포트폴리오 관리 시스템에서 특정 부분을 컬럼 패밀리로 만들어서 보여준다. 고객이 새로운 주식을 구입한 경우 이름이 다른 주식이 목록에 추가된다. 대부분의 컬럼 패밀리 데이터베이스는 컬럼 값으로 스칼라 타입(논리형, 정수형, 실수형 등)을 지원한다.
향후 방향
빅데이터를 처리해야 하는 새로운 비즈니스의 요구사항에 따라 RDBMS에서도 JSON을 지원하는 업체가 많아지고 있다. 글로벌 리서치 기관에 따르면 조사에 응답한 조직의 52%가 개발자들이 NoSQL 데이터베이스를 기반으로 새로운 어플리케이션을 개발하고자 하지만, 42%는 구축된 NoSQL 데이터베이스 관리에 많은 어려움이 있다고 밝혔다. 고정된 스키마가 없는 것은 비정형 데이터를 유연하게 저장하게 해주지만 관리에 있어서는 어려운 점이 있다.
그럼에도 불구하고 다양한 비즈니스 요구에 반응하기 위해 NoSQL 기술은 충분히 매력적이다. 서비스들의 성능은 꾸준하게 개선되고 있다(실라디비는 카산드라 대비 최대 37배 고성능). 비정형 데이터의 비중은 지속적으로 증가하고 있는 만큼 관련 산업이 성장률도 비례해서 커진다. https://db-engines.com/en/ranking 의 랭킹을 참고해보면 NoSQL 서비스의 성장세를 확인할 수 있다.
>>출처
https://www.samsungsds.com/kr/insights/1232564_4627.html