관계형 데이터베이스 대신 문서 기반 데이터베이스를 사용해야하는 이유는 무엇입니까?


188

관계형 데이터베이스를 사용하는 대신 CouchDB와 같은 문서 기반 데이터베이스를 사용해야하는 이유는 무엇입니까? 문서 기반 데이터베이스가 관계형 데이터베이스보다 적합한 일반적인 종류의 응용 프로그램이나 도메인이 있습니까?


아마도 문서 지향 데이터베이스는 어떤 방식으로 "엔티티 속성 값"(EAV) 데이터베이스와 유사 할 수 있습니다.
ChrisW

답변:


167

아마 당신은해서는 안됩니다 :-)

두 번째로 가장 확실한 대답은 데이터가 관계가없는 경우 사용해야한다는 것입니다. 이것은 일반적으로 데이터를 열 집합으로 쉽게 설명 할 수없는 방법으로 나타납니다. 좋은 예는 실제로 사무실 문서 스캔과 같은 종이 문서를 실제로 저장하는 데이터베이스입니다. 데이터는 스캔 한 PDF이며 항상 존재하는 메타 데이터 (언제나 스캔, 문서 유형) 및 언젠가 존재하는 많은 메타 데이터 필드 (고객 번호, 공급 업체 번호, 주문 번호, 파일 보관 시간, 전체 텍스트 등). 일반적으로 향후 2 년 내에 어떤 메타 데이터 필드를 추가할지 미리 알 수 없습니다. CouchDB와 같은 것은 관계형 데이터베이스보다 이러한 종류의 데이터에 훨씬 좋습니다.

또한 개인적으로 HTTP 클라이언트를 제외하고 CouchDB에 대한 클라이언트 라이브러리가 필요하지 않다는 사실을 좋아합니다. 요즘에는 거의 모든 프로그래밍 언어에 포함되어 있습니다.

아마도 가장 명백한 대답은 : RDBMS를 사용해도 통증이 없다면 그대로 유지하십시오. 작업을 수행하기 위해 항상 RDBMS를 해결해야하는 경우 문서 지향 데이터베이스를 살펴볼 가치가 있습니다.

보다 정교한 목록을 보려면 Richard Jones의이 게시물을 확인하십시오 .


1
나는 2 년 동안 데이터베이스 스키마를 우리가 처음 시작한 원래 스키마와 닮은 적이 없다. 그래서 모든 것이 동일하다. 그것은 다소 오해의 소지가있는 이름이라고 생각합니다 ...
ᆼ ᆺ ᆼ

3
@ int3 데이터를 열 집합으로 설명 할 수 없다면, 해당 데이터에 지능적인 쿼리를 어떻게 작성해야합니까?
Clay Smith

46

CouchDB ( 웹 사이트에서 )

  • RESTful JSON API를 통해 액세스 할 수있는 문서 데이터베이스 서버. 일반적으로 관계형 데이터베이스는 단순히 REST 서비스를 통해 액세스되는 것이 아니라 훨씬 더 복잡한 SQL API가 필요합니다. 종종 이러한 API (JDBC, ODBC 등)는 매우 복잡합니다. REST는 매우 간단합니다.

  • 평평한 주소 공간으로 특별하고 스키마가 없습니다. 관계형 데이터베이스에는 복잡한 고정 스키마가 있습니다. 테이블, 열, 인덱스, 시퀀스, 뷰 및 기타 항목을 정의합니다. 소파는이 수준의 복잡하고 비싸며 깨지기 쉬운 고급 계획이 필요하지 않습니다.

  • 양방향 충돌 감지 및 관리 기능을 갖춘 강력한 증분 복제 기능을 갖춘 분산 형. 일부 SQL 상용 제품은이를 제공합니다. SQL API 및 고정 스키마로 인해 복잡하고 어렵고 비용이 많이 듭니다. 소파의 경우 간단하고 저렴한 것처럼 보입니다.

  • 쿼리 가능 및 인덱스 가능, Javascript를 쿼리 언어로 사용하는 테이블 지향보고 엔진이 특징입니다. SQL 및 관계형 데이터베이스도 마찬가지입니다. 여기에 새로운 것은 없습니다.

그래서. 왜 CouchDB인가?

  • REST는 JDBC 또는 ODBC보다 간단합니다.
  • 스키마보다 단순한 스키마는 없습니다.
  • 단순하고 저렴한 방식으로 배포됩니다.

12
필자는 NoSQL 데이터베이스를 좋아하지만 첫 번째 주장 (REST는 JDBC보다 간단 함)이 매우 모호합니다.
ᆼ ᆺ ᆼ

2
REST 프로토콜은 HTTP이기 때문에 꽤 단순 해 보입니다. 상태 비 저장, 몇 가지 메소드 등. 아마도 JDBC는 간단합니다. 단지 상태에 기반한 것만으로는 더 단순 해 보이지는 않습니다.
S.Lott

5
@ S.Lott CouchDb에만 국한된 것이 아니라 "제네릭"이 아니어야합니까?
Pacerier

"취약한 고급 계획"vs 무엇? 내 경험상 대안은 계획이 없으므로 스파게티 데이터 구조가 변덕스럽게 수정됩니다.
Tejay Cardon

26

다른 서버 데이터를 어리석게 저장하고 제공합니다.

지난 몇 주 동안 나는 내 피드 (맛있고, 깜박임, github, 트위터 ...)를 폴링하고 couchdb에 저장하는 라이프 스트림 앱을 가지고 놀았습니다. couchdb의 장점은 원본 데이터를 오버 헤드없이 원래 구조로 유지할 수 있다는 것입니다. 각 문서에 '클래스'필드를 추가하고 소스 서버를 저장하고 각 소스에 대한 자바 스크립트 렌더 클래스를 작성했습니다.

일반화하면 서버가 다른 서버와 통신 할 때마다 스키마를 제어 할 수 없으므로 스키마가없는 스토리지가 가장 좋습니다. 또한 couchdb는 서버 및 클라이언트의 기본 프로토콜 인 JSON을 표현 용으로, HTTP REST를 사용하여 전송합니다.


왜 파일 또는 피드 당 파일로 저장하지 않습니까?
j_random_hacker

6
couchdb를 사용하면 map / reduce를 사용하여 흥미로운 뷰를 만들 수도 있습니다. 예를 들어 데이터 소스를 기반으로보기를 만들거나 각 소스의 총계를 계산할 수 있습니다.
daonb 2016 년

4
데이터를 소비하고 있고 인바운드 데이터 스키마를 제어 할 수없는 경우 문서 저장소를 사용하십시오.
Joshua Robinson

1
이것은 NoSQL 데이터베이스의 가치에 대해 들어 본 첫 번째 설득력있는 주장입니다.
Caleb McNevin

20

신속한 응용 프로그램 개발이 떠 오릅니다.

스키마를 지속적으로 발전시킬 때 MySQL / SQLite에서 스키마를 유지 관리해야한다는 점에서 끊임없이 좌절하고 있습니다. 아직 CouchDB를 많이 사용하지는 않았지만 RAD 프로세스 중에 스키마를 발전시키는 것이 얼마나 간단한 지 좋아합니다.

비 관계형 데이터베이스를 사용하지 않으려는 경우는 다 대다 관계가 많은 경우입니다. 이러한 관계에 대해 특히 MapReduce 함수를 작성하는 방법, 특히 조인 관계에 메타 데이터가 필요한 경우에 대해서는 아직 이해하지 못했습니다. 확실하지 않지만 CouchDB Map 함수가 데이터베이스에서 자체 쿼리를 호출 할 수 있다고 생각하지 않습니다. 잠재적으로 무한 루프가 발생할 수 있기 때문입니다.


1
훌륭한 지적입니다. 문서 (및 기타 스키마가없는) 데이터 저장소는 빠른 초기 단계 개발에 좋습니다. 그러나 같은 이유로 초기 프로토 타입 제작에 적합하기 때문에 강력한 프로덕션 응용 프로그램에 문제가 있습니다.
Tejay Cardon

6

각 레코드에 대해 균일 한 크기의 필드가있는 테이블에 데이터를 저장할 필요가없는 경우 문서 기반 데이터베이스를 사용하십시오. 대신, 특정 특성이있는 문서로 각 레코드를 저장해야합니다. 먼저 "테이블을 수정"할 필요없이 길이에 관계없이 원하는 길이의 필드를 문서에 동적으로 추가 할 수 있습니다. 문서 기반의 필드에는 여러 데이터 조각이 포함될 수도 있습니다.


1

smdelfin을 정교하게하려면 : 유연성. 모든 구조 (구조화되지 않은 모든 구조)에 데이터를 저장할 수 있으며 모든 문서는 완전히 다를 수 있습니다. CouchDB는 특히 "보기"인덱스를 사용하여 데이터베이스의 하위 집합을 원할 때 특정 문서를 필터링하고 해당보기 만 쿼리 할 수 ​​있기 때문에 특히 유용합니다.

JSON 형식으로 데이터를 저장하는 문서 데이터베이스의 가장 큰 장점은 JavaScript의 기본 형식입니다. 따라서 JavaScript 웹 응용 프로그램은 CouchDB와 함께 잘 작동합니다. 최근에 CouchDB를 사용하는 웹 응용 프로그램을 만들었으며 끊임없이 변화하는 데이터 구조를 처리 할 수 ​​있으며 빠른 속도입니다.


0

문서 기반 데이터베이스는 데이터를 입력하기 전에 스키마를 미리 정의 할 필요가 없기 때문에 관계형 데이터베이스보다 큰 이점이 있습니다.

또한 데이터가 관계형이 아니고 테이블에 저장할 수 없지만 이미지 또는 신문 기사와 같은 문서 인 경우 문서 데이터베이스를 사용해야합니다.

또 다른 장점은 웹 개발에서 문서 기반 데이터베이스를 쉽게 사용할 수 있다는 것입니다. 더 자세한 NoSQL 데이터베이스 모델 comarison에 대해서는 다음 소스를 확인하십시오. https://arxiv.org/ftp/arxiv/papers/1509/1509.08035.pdf

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