다양한 종류의 NoSQL에 대해 알아봅니다.
이 글은 다음 글을 발췌 및 번역한 글입니다: do.co/3lFbfMU
1. 소개
대부분의 사람들은 데이터베이스를 생각할 때 행(row)과 열(column)로 구성된 테이블을 포함하는 전통적인 관계형 데이터베이스 모델을 생각합니다. RDBMS는 여전히 인터넷에서 가장 많은 데이터를 처리하지만 개발자들은 관계형 모델의 한계에 대한 해결방법을 찾으려 노력함에 따라 최근 몇 년간 관계형 모델을 대체할 수 있는 데이터 모델이 좀 더 보편화되었습니다. 이러한 비 관계형 데이터 베이스 모델은 NoSQL이라 불리며 각각의 고유한 장점, 단점, 사용 사례를 확인해 보도록 하겠습니다.
이 글에서는 좀 더 일반적으로 사용되는 몇 가지 NoSQL 데이터베이스 모델을 소개합니다. 장점과 단점 중 일부를 평가하고 데이터베이스 관리 시스템의 몇 가지 예시와 각각에 대한 잠재적 사용 사례를 제공합니다.
2. Document 기반 데이터베이스.
문서 기반(Document-oriented) 데이터베이스 또는 문서 저장소는 데이터를 문서 형태로 저장하는 NoSQL 데이터베이스입니다. 문서 저장소는 Key-Value 저장소의 한 유형입니다. 각 문서에는 고유한 식별자(Key)가 있으며 문서 자체가 값(Value)의 역할을 합니다.
이 두 모델의 차이점은 Key-Value 데이터베이스에서 데이터가 불투명하게 처리되고 데이터베이스가 그 안에 보관된 데이터를 알거나 신경 쓰지 않습니다. 어떤 데이터가 저장되는지 이해해야 하는 것은 애플리케이션에 달려있습니다. 하지만 문서 기반 데이터베이스에서는 각 문서에 일정 수준의 구조를 제공하는 일종의 메타 데이터가 포함되어 있습니다. 문서 기반 데이터베이스는 사용자가 문서에 포함된 메타 데이터 기반으로 검색할 수 있는 API 또는 쿼리 언어를 제공합니다. 또한 문서 내에 다른 문서를 중첩할 수 있으므로 복잡한 데이터 구조도 표현할 수 있습니다.
주어진 객체의 데이터가 여러 테이블이나 다른 데이터베이스에 분산될 수도 있는 관계형 데이터베이스와는 달리 문서 기반 데이터베이스는 주어진 객체의 모든 데이터를 단일 문서에 저장할 수 있습니다. 문서 기반 데이터베이스는 일반적으로 데이터를 JSON, BSON, XML, YAML로 저장하고 일부는 PDF 같은 이진 형식으로 저장할 수도 있습니다. 일부는 데이터 검색에 SQL 변형, 전체 텍스트, 고유한 쿼리 언어를 사용하고 일부는 다른 둘 이상의 쿼리 메서드를 사용하기도 합니다.
먼저 기반 데이터베이스는 최근 몇 년 사이에 인기가 매우 증가하였습니다. 유연한 스키마 덕분에 전자상거래, 블로그, 분석 플랫폼, 콘텐츠 관리 시스템에서 사용되었습니다. 문서 기반 데이터베이스는 확장성이 높은 것으로 여겨지며 일반적인 수평 확장 전력은 샤딩(Sharding)입니다. 구조가 다르고 복잡한 정보를 보관하는데 탁월합니다.
인기 있는 오픈소스 문서 기반 데이터베이스는 다음과 같습니다:
- MongoDB: 이 글이 쓰였을 땐 이 범용 분산 문서 기반 데이터 베이스인 MongoDB가 세계에서 가장 널리 사용되던 문서 기반 데이터베이스였습니다.
- Couchbase: 원래 Merbase로 알려졌으며 JSON 기반의 Memcached와 호환되는 문서 기반 데이터베이스로 알려졌습니다. 다중 모델 데이터베이스인 Couchbase는 Key-Value 데이터베이스로도 동작할 수 있습니다.
- Apache CouchDB: Apache SW Foundation의 프로젝트인 CouchDB는 데이터를 JSON문서로 저장하고 JS를 쿼리 언어로 사용하는 문서 기반 데이터베이스입니다.
3. Graph 데이터베이스.
그래프 데이터베이스는 문서에 데이터를 저장하고 데이터가 미리 정의된 스키마를 따르지 않는다는 점에서 문서 기반 데이터 모델의 하위 범주로 생각할 수 있습니다. 하지만 그래프 데이터베이스는 개별 문서 간의 관계를 강조해 문서 모델에 별도의 레이어가 추가된다는 점이 다릅니다.
그래프 데이터베이스의 개념을 더 잘 이해하기 위해선 다음 용어를 이해해야 합니다:
- Node: 노드. 노드는 그래프 데이터베이스에서 추적하는 개별 엔티티의 표현입니다. 관계형 데이터베이스의 레코드, 행(row) 문서 기반 데이터베이스의 문서 개념과 거의 같습니다. 예를 들어 음악을 녹음하는 아티스트의 그래프 데이터베이스에서 노드는 연주자나 밴드가 될 수 있습니다.
- Property: 속성. 속성은 개별 노드와 관련된 정보입니다. 위의 예를 다시 사용하면 보컬리스트, 재즈, 플래티넘 인증 음악가 등이 될 수 있습니다.
- Edge: 그래프 또는 관계(Relationship)로 알려진 에지는 두 노드가 어떻게 관련되어 있는지를 나타내며 RDBMS와 문서 기반 데이터베이스와 구별되는 그래프 데이터베이스의 핵심 개념입니다. 에지는 방향이 지정되거나 지정되지 않을 수도 있습니다.
- Undirected: 무방향성. 방향성이 없는 그래프에서 에지는 노드 간의 연결을 표시하기 위해 존재합니다. 이 경우 에지는 양방향의 관계로 생각할 수 있습니다. 한 노드가 다른 노드와 어떻게 관련이 있는지에는 암시적인 차이점이 없습니다.
- Directed: 방향성. 방향성 그래프에서 에지는 관계가 시작된 방향에 따라 다른 의미를 가질 수 있습니다. 이 경우 에지는 단방향의 관계로 생각할 수 있습니다. 예를 들어 방향성 그래프에서 Sammy가 그룹을 위해 앨범을 제작한 경우 Sammy와 Seaweeds의 관계를 방향성을 통해 지정할 수 있지만 Seaweeds에서 Sammy로의 방향성의 의미는 앞의 경우와 동등하지 않습니다.
특정 작업은 관련 정보를 연결하고 그룹화하는 방식 때문에 그래프 데이터베이스를 사용하는 것이 훨씬 간단합니다. 이러한 데이터베이스는 일반적으로 데이터 포인트 간의 관계에서 무언가를 얻어야 하거나 엔드 유저가 사용할 수 있는 정보가 소셜 네트워크처럼 다른 사람과 연결에 의해 정해지는 경우에 사용됩니다. 주로 사기 감지, 추천 엔진, ID 및 액세스 관리 애플리케이션에서 사용됩니다.
인기 있는 오픈 소스 그래프 데이터베이스는 다음과 같습니다:
- Neo4j: 네이티브 그래프 저장 및 처리 기능을 갖춘 ACID 호환 DBMS입니다. 이 글이 작성될 때 Neo4j는 세계에서 가장 인기 있는 그래프 데이터베이스였습니다.
- ArangoDB: ArangoDB는 그래프, 문서 기반, Key-Value 데이터 모델을 하나의 DBMS로 통합하는 다중 모델 데이터 베이스이며 배타적인 그래프 데이터베이스가 아닙니다. SQL과 유사한 쿼리 언어인 AQL, 전체 텍스트 검색, 랭킹 엔진이 특징입니다.
- OrientDB: OrientDB는 그래프, 문서 기반, Key-Value, 객체 모델을 지원하며 또 다른 다중 모델 데이터베이스입니다. SQL 쿼리, ACID 트랜잭션을 지원합니다.
4. 마침.
지금까지의 글에서 현재 사용 중인 NoSQL 데이터 모델 중 몇 가지를 살펴보았습니다. 객체 기반 데이터베이스와 같은 일부 NoSQL 모델은 수년간 다양한 수준의 사용 사례를 보였지만 일부에서는 관계형 모델에 대한 사용 가능한 대안 수준으로만 남았습니다. 객체 관계형(Object-Relational) 데이터베이스나 시계열(Time-Series) 데이터베이스 등 다른 것들은 관계형과 NoSQL의 데이터 모델을 혼합하여 일종의 DB 스펙트럼의 두 끝점 사이의 중간 지대를 형성합니다.
데이터베이스의 NoSQL 범주는 매우 광범위하며 지금도 계속 발전하고 있습니다. NoSQL DBMS 및 그 개념에 대해 좀 더 자세히 알아보려면 NoSQL에 관련된 콘텐츠 라이브러리를 확인해 보는 것이 좋습니다.
'Programming > Databse' 카테고리의 다른 글
[PostgreSQL] Ubuntu에 pgAdmin 설치하기 (0) | 2021.02.04 |
---|---|
[PostgreSQL] Ubuntu에서 Postgresql 업그레이드 하기. (0) | 2021.02.04 |
[DBMS] NoSQL DBMS 및 모델의 비교 - (2) Key-Value와 Columnar 데이터베이스. (0) | 2020.11.18 |
[DBMS] NoSQL DBMS 및 모델의 비교 - (1) RDBMS의 한계와 NoSQL이란. (0) | 2020.11.18 |
[DBMS] SQLite vs MySQL vs PostgreSql: 관계형 DB 시스템의 비교. - (3) PostgreSql (0) | 2020.11.18 |