[번역] NoSQL vs Relational Databases

rin·2020년 5월 25일
0

Document 번역

목록 보기
10/22
post-thumbnail

ref. mongodb document - NoSQL vs Relational Databases(1)mongodb document - NoSQL vs Relational Databases(2)를 번역합니다.

mongodb document - NoSQL vs Relational Databases(1)

NoSQL vs. RDB

쿼리 언어로써 각각 SQL, NoSQL로 불리는 관계형 데이터베이스와 비관계형 데이터베이스는 선택가능한 최신의 데이터베이스의 두가지 주요 타입이다. 요구에 가장 적합한 데이터베이스를 결정할 때 숙지해야할 몇 가지 주요한 차이점이 있다.

✏️tldr 요약
SQL 데이터베이스는 관계형 데이터베이스라고 하며 사전에 엄격하게 정의된 스키마를 요구하는 테이블 기반 데이터 구조를 가진다. NoSQL 데이터베이스 혹은 비관계형 데이터베이스는 document based, graph databases, key-value pairs, wide-column stores일 수 있다. NoSQL 데이터베이스에는 사전에 정의된 스키마가 필요하지 않으므로 "비정형 데이터"를 다룰 때 보다 자유롭게 작업할 수 있다. 관계형 데이터베이스는 수직 확장이 가능하나 일반적으로 비용이 비싸다. 반면에 NoSQL 데이터베이스의 특징인 수평 확장은 비용면에서 더욱 효율적이다.

관계형 데이터베이스(RDBMS)와 NoSQL의 역사

관계형 데이터베이스는 40년 이상 사용되어왔다. 데이터 구조가 훨씬 단순하고 정적이었던 시절(과거)에서 이들은 잘 작동하였다. 하지만 기술과 빅데이터 응용 프로그램이 발전함에 따라 기존의 SQL 기반 관계형 데이터 베이스는 빠르게 확장되는 데이터의 양과 점점 복잡해지는 데이터 구조를 처리할 수 있는 능력이 부족했다. 지난 10년 동안 (비관계형) NoSQL 데이터베이스는 기존의 SQL 기반의 관계형 데이터베이스에 비해 유연하고, 확장 가능하며, 비용적으로 효율적인 대안을 제공하는데 널리 사용되었다.

데이터 모델과 스키마

NoSQL 데이터베이스는 동적 스키마라는 특징이 있으며 "비정형 데이터"라는 것을 사용할 수 있다. 기본적으로 이는 스키마를 먼저 정의하지 않고도 애플리케이션을 빌드 할 수 있음을 의미한다. 관계형 데이터 베이스에서는 시스템에 데이터를 추가하기 전에 스키마를 정의하는 것이 필수였다. 반면에 사전 정의된 스키마가 없는 NoSQL 데이터베이스는 데이터를 갱신하거나 요구사항을 변경하는 것이 더욱 쉽다. 관계형 데이터베이스에서 스키마 구조를 변경하는 것은 고비용이며, 시간이 많이 들고, 종종 중단 시간(downtime)이나 서비스 중단이 발생할 수 있다.

데이터 구조

관계형 데이터베이스는 테이블 기반이다. NoSQL 데이터베이스는 document based, graph databases, key-value pairs, wide-column stores일 수 있다. 관계형 데이터베이스는 데이터가 대부분 구조적이고 관계에 의해 명확하게 정의될 때 구축되었지만 오늘날의 데이터는 훨씬 더 복잡하단 것을 알고 있다. NoSQL 데이터베이스는 오늘날 존재하는 많은 데이터를 구성하고 있는 비정형 데이터(텍스트, 소셜 미디어 게시물, 사진, 비디오, 이메일 등)를 처리하도록 설계되었다.

스케일링

관계형 데이터베이스는 수직 확장이 가능하나 일반적으로 고비용이다. 확장을 위해서는 전체 데이터베이스를 호스팅하기 위한 단일 서버가 필요하므로 더 크고 비싼 서버를 구입해야한다. NoSQL 데이터베이스 확장은 저렴한 범용 서버를 이용해 수평 확장함으로써 용량을 추가할 수 있기 때문에 관계형 데이터베이스에 비해 훨씬 저렴하다.

일반적인 NoSQL과 관계형 데이터베이스 (SQL)에 대한 질문

NoSQL이 SQL보다 나은가?

NoSQL은 보다 복잡하고 지속적으로 변하는 데이터 셋을 가지고 있는 현대의 애플리케이션에 더 나은 옵션을 제공하는 경향이 있으며 즉시 정의될 필요가 없는 유연한 데이터 모델이 요구된다. NoSQL 데이터베이스를 선호하는 대부분의 개발자와 조직은 시장에 빠르게 출시하고 빠르게 갱신가능한 민첩한 기능에 매료된다. 기존의 SQL 기반의 관계형 데이터베이스와 달리 NoSQL 데이터베이스는 데이터를 실시간으로 저장하고 처리할 수 있다.

SQL 데이터베이스는 여전히 특별한 사용 사례(specific use cases)를 가지지만 NoSQL 데이터베이스에는 SQL 데이터베이스가 고비용을 투자하거나 속도(민첩성) 등을 희생하지 않고는 처리할 수 없는 많은 기능이 존재한다.

NoSQL과 SQL의 주요 차이점은 무엇인가?

바로 아래의 문서를 확인하도록 하자.

mongodb document - NoSQL vs Relational Databases(2)

✏️읽기전에
NoSQL("non SQL" 혹은 "not only SQL") 데이터베이스는 2000년대 후반에 확장성, 빠른 질의(queries)에 중점을 두고 개발되었으며 응용프로그램의 빈번한 변경를 허용하고 (개발자를 위해) 프로그래밍을 간소화한다. SQL(Structured Query Language)로 엑세스된 관계형 데이터베이스는 1970년대에 데이터 저장소(storage)가 개발자의 시간보다 훨씬 비싸기 때문에 데이터 중복을 줄이는데 중점을 두고 개발되었다. SQL 데이터베이스는 고정적이고 복잡한 테이블 형식의 스키마를 갖는 경향이 있으며 일반적으로 확장시 고비용이 요구되는 수직 확장이 필요하다.

만약 NoSQL 데이터베이스에 익숙하지 않고 다른 유형의 NoSQL 데이터베이스를 알고 싶다면 여기에서 시작하면된다.


NoSQL과 RDB의 주요 차이점(요약)

아래 표는 SQL 데이터베이스와 NoSQL 데이터베이스의 주요 차이점을 요약한 것이다.

SQL DatabaseNoSQL Database
데이터 저장소 모델고정 행과 열이 있는 테이블document-JSON document, key value store-key value 쌍, wide column-row와 동적 column이 있는 테이블, graph db-노드 및 엣지
역사데이터 복제 감소에 중점을 둔 1970년대에 개발2000년대 후반에 애자일과 DevOps 관행에 따라 신속한 애플리케이션 변경의 가능과 확장성에 중점을 두고 개발되었다.
Oracle, MySQL, Microsoft SQL Serverm, PostgreSQLdocument-MongoDB/CouchDB, key value store-Redis/DynamoDB, wide column-Cassandra/HBase, graph db-Neo4j/Amazon Neptune
주요 목적범용document-범용, key value store-간단한 조회 질의를 이용한 대량의 데이터 추출, wide column-예측 가능한 쿼리 패턴을 이용한 대량의 데이터 추출, graph db-연결된 데이터 간의 관계 분석 및 탐색
스키마엄격유연(융통성있음)
확장(스케일링)수직 (더 큰 서버로 확장 포함)수평 (서버 간 스케일 아웃)
Mutil-Record ACID Transctions지원대부분 지원하지 않음. MongoDB 등 일부 기능을 지원하는 경우도 있다.
Join일반적으로 필요일반적으로 필요하지 않음
data-object 매핑ORM 필요대부분 ORM을 요구하지 않는다. MongoDB document는 가장 많이 사용되는 프로그래밍 언어로 데이터 구조에 직접 매핑된다.

NoSQL 데이터베이스의 장점

NoSQL 데이터베이스는 관계형 데이터베이스에 비해 많은 이점을 제공한다. NoSQL 데이터베이스는 유연한 데이터 모델, 수평적 확장, 매우 빠른 쿼리, 개발자의 쉬운 작업을 가능하게 한다.

유연한 데이터 모델

NoSQL 데이터베이스는 일반적으로 매우 유연한 스키마를 가진다. 유연한 스키마는 요구 사항이 변경되었을 때 데이터베이스를 쉽게 변경할 수 있다. 새로운 어플리케이션 기능을 신속하고 지속적으로 통합하여 사용자에게 더욱 빠르게 서비스를 제공할 수 있다.

수평적 확장

대부분의 SQL 데이터베이스는 현재 서버에서 요구되는 용량을 초과하면 수직적 확장 (더 크고 비싼 서버로 마이그레이션)이 필요하다. 반면에 대부분의 NoSQL 데이터베이스를 사용하면 수평적 확장이 가능하므로 필요할 때마다 더 저렴한 비용으로 상용 서버를 추가할 수 있다.

빠른 쿼리

NoSQL 데이터베이스의 쿼리는 SQL 데이터베이스보다 빠를 수 있다. SQL 데이터베이스의 데이터는 일반적으로 정규화되므로 단일 객체 또는 엔터티에 대한 쿼리를 수행하기 위해 여러 테이블을 Join해야한다. 만약 테이블 크기가 커진다면 Join 비용은 더 비싸질 수 있다. 그러나 NoSQL 데이터베이스의 데이터는 일반적으로 쿼리에 최적화된 방식으로 저장된다. MongoDB를 사용할 때 경험에 의한 법칙은 함께 엑세스되는 데이터는 함께 저장되어야한다는 것이다. 따라서 NoSQL의 질의에는 일반적으로 Join이 필요하지 않으므로 쿼리 속도가 매우 빠르다.

개발자에게 쉽다.

MongoDB와 같은 일부 NoSQL 데이터베이스는 데이터 구조를 일반적인 "프로그래밍 언어의 데이터 구조"에 매핑한다. 이를 통해 개발자는 애플리케이션 코드에서 사용되는 것과 동일한 방식으로 데이터를 저장할 수 있다. 사소한 이점처럼 보이지만 매핑을 통해 개발자는 적은 코드를 작성하여 개발 시간을 단축하고 버그를 줄일 수 있다.

NoSQL 데이터베이스의 단점

NoSQL 데이터베이스의 가장 빈번한 단점 중 하나는 여러 문서에서 ACID(atomicity 원자성, consistency 일관성, isolation 고립성, durability 지속성) 트랜잭션을 지원하지 않는다는 것이다. 적절한 스키마 디자인이 있다면 많은 애플리케이션에 단일 레코드의 원자화는 가능하다. 하지만 다수의 레코드에 ACID를 요구하는 애플리케이션이 많다.

❗️NOTE
이러한 유즈케이스를 해결하기 위해 MongoDB는 4.0 릴리스에서 다중 문서의 ACID 트랜잭션에 대한 지원을 추가하고 4.2를 확장함으로써 샤드 클러스터(sharded clusters)를 확장하였다

NoSQL 데이터베이스의 데이터 모델은 일반적으로 쿼리에 최적화되고 데이터 중복을 감소시키지 않기때문에 SQL 데이터베이스보다 클 수 있다. 현재 스토리지는 매우 저렴하기 때문에 이 문제는 사소한 단점으로 생각하며 일부 NoSQL 데이터베이스는 스토리지 공간을 줄이기위한 compression을 지원한다.

선택한 NoSQL 타입에 따라서 단일 데이터베이스에서 모든 유즈케이스를 실현하지 못 할 수도 있다. 예를 들어 graph database는 데이터간의 관계를 분석하는 데에 탁월하지만 범위 쿼리와 같이 데이터를 매일 검색하는데 필요한 것을 제공하지 않을 수 있다. NoSQL 데이터베이스를 선택할 때 유즈케이스를 고려하도록 한다.

profile
🌱 😈💻 🌱

0개의 댓글