문서 기반 데이터베이스와 키 / 값 기반 데이터베이스의 차이점은 무엇입니까?


98

SQL 이외의 데이터베이스에는 널리 사용되는 세 가지 유형이 있습니다.

  • 키 / 값 : Redis, Tokyo Cabinet, Memcached
  • ColumnFamily : Cassandra, HBase
  • 문서 : MongoDB, CouchDB

나는 그다지 이해하지 못한 채 그것에 대해 긴 블로그를 읽었습니다.

저는 관계형 데이터베이스를 알고 있으며 MongoDB / CouchDB와 같은 문서 기반 데이터베이스에 익숙합니다.

누군가 목록에있는 이들과 두 전자의 주요 차이점이 무엇인지 말해 줄 수 있습니까?


4
5 가지 : (1) 키-값 저장소 : Oracle Coherence, Redis, Kyoto Cabinet (2) BigTable 스타일 데이터베이스 : Apache HBase, Apache Cassandra (3) 문서 데이터베이스 : MongoDB, CouchDB (4) 전체 텍스트 검색 엔진 : Apache Lucene, Apache Solr (5) 그래프 데이터베이스 : neo4j, FlockDB, nosql-data-modeling-techniques 참조
Gary Gauh 2013 년

답변:


75

주요 차이점은 데이터 모델과 쿼리 기능입니다.

키-값 저장소

첫 번째 유형은 매우 간단하며 추가 설명이 필요하지 않을 것입니다.

데이터 모델 : 키-값 저장소 그 이상

있지만 Cassandra와 같은 데이터베이스의 올바른 이름에 대해 약간의 논쟁 저는이를 column- familystore라고 부르고 싶습니다 . 키-값 쌍은 Cassandra의 필수 부분이지만, 이것에만 국한되지 않습니다. 키-값 쌍을 중첩 할 수 있으므로 키가 여러 하위 키-값 쌍을 참조 할 수 있습니다.

하지만 키-값 쌍을 무기한 중첩 할 수는 없습니다. 3 단계 (열 패밀리) 또는 4 단계 중첩 (수퍼 컬럼 패밀리)으로 제한됩니다. column family라는 용어가 종을 울리지 않는 경우 WTF는 SuperColumn 기사입니다. Cassandra의 데이터 모델에 대한 좋은 설명입니다.

문서 데이터베이스CouchDB 및 MongoDB와 같은 는 전체 문서를 JSON 객체 형태로 저장 합니다 . 이러한 개체를 중첩 된 키-값 쌍으로 생각할 수 있습니다. Cassandra와 달리 원하는만큼 키-값 쌍을 중첩 할 수 있습니다. JSON은 또한 배열을 지원하고 문자열, 숫자 및 부울 값과 같은 다양한 데이터 유형을 이해합니다.

질의

컬럼 패밀리 스토어는 키로 만 쿼리하거나 맵 축소 기능을 작성하여 쿼리 할 수 ​​있다고 생각합니다. SQL 데이터베이스 에서처럼 값을 쿼리 할 수 ​​없습니다. 애플리케이션에 더 복잡한 쿼리가 필요한 경우 애플리케이션은 원하는 데이터에 액세스하기 위해 인덱스를 만들고 유지 관리해야합니다.

문서 데이터베이스는 키별 쿼리 및 맵 축소 기능도 지원하지만 "게시물이 10 개 이상인 모든 사용자에게 제공"과 같은 기본 쿼리를 값별로 수행 할 수도 있습니다. 문서 데이터베이스는 이러한 방식으로 더 유연합니다.


2
따라서 redit과 같은 키-값 저장소에서는 중첩 된 키 : 값을 저장할 수 없습니다. 그리고 귀하의 설명에서 전체 데이터베이스 (RDBMS에서)를 Cassandra에 저장하는 것은 유연한 쿼리를 허용하지 않고 중첩 깊이가 제한되어 있기 때문에 매우 영리하게 들리지 않습니다. 맞습니까?
never_had_a_name 2010-08-24

7
@ajsie : 맞습니다. 키-값 저장소는 중첩 된 키-값 쌍을 지원하지 않습니다. 하지만 대부분은 목록과 같은 특수한 값을 지원합니다. Cassandra는 RDBMS와 매우 다릅니다. 둘 다 매우 다른 문제를 해결하도록 설계 되었기 때문입니다. RDBMS 시스템은 복잡한 쿼리가 필요한 관계형 데이터를 대상으로하는 반면 Cassandra는 대부분 비 관계형 데이터를 처리하는 데 중점을 둡니다. 물론 그건 가능 카산드라에 RDBMS 데이터베이스를 이동하는 것이 아니라 참으로 아주 똑똑하지. 그들 각각은 자체 용도가 있습니다.
Niels van der Rest

따라서 모든 문서 데이터베이스는 {value : base64 (val)}과 같이 값이 단순히 JSON 인 키, 값 저장소입니까?
GroovyDotCom

@GroovyDotCom : 예, 문서 데이터베이스를 사용하여 간단한 키 / 값 개체를 저장할 수 있습니다.
Niels van der Rest

16

Ayende 는 키-값과 문서 데이터베이스의 차이점에 대해 좋은 설명을했습니다.

문서 데이터베이스는 하나의 주요 예외를 제외하고 핵심적으로 키 / 값 저장소입니다. 문서 DB는 blob을 저장하는 대신 데이터베이스가 이해할 수 있는 형식 (예 : JSON, XML 등)으로 데이터를 저장 해야합니다. 대부분의 문서 DB에서 이는 이제 문서 데이터에 대한 쿼리허용 할 수 있음을 의미합니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.