관계형 데이터베이스를 사용하는 대신 CouchDB와 같은 문서 기반 데이터베이스를 사용해야하는 이유는 무엇입니까? 문서 기반 데이터베이스가 관계형 데이터베이스보다 적합한 일반적인 종류의 응용 프로그램이나 도메인이 있습니까?
관계형 데이터베이스를 사용하는 대신 CouchDB와 같은 문서 기반 데이터베이스를 사용해야하는 이유는 무엇입니까? 문서 기반 데이터베이스가 관계형 데이터베이스보다 적합한 일반적인 종류의 응용 프로그램이나 도메인이 있습니까?
답변:
아마 당신은해서는 안됩니다 :-)
두 번째로 가장 확실한 대답은 데이터가 관계가없는 경우 사용해야한다는 것입니다. 이것은 일반적으로 데이터를 열 집합으로 쉽게 설명 할 수없는 방법으로 나타납니다. 좋은 예는 실제로 사무실 문서 스캔과 같은 종이 문서를 실제로 저장하는 데이터베이스입니다. 데이터는 스캔 한 PDF이며 항상 존재하는 메타 데이터 (언제나 스캔, 문서 유형) 및 언젠가 존재하는 많은 메타 데이터 필드 (고객 번호, 공급 업체 번호, 주문 번호, 파일 보관 시간, 전체 텍스트 등). 일반적으로 향후 2 년 내에 어떤 메타 데이터 필드를 추가할지 미리 알 수 없습니다. CouchDB와 같은 것은 관계형 데이터베이스보다 이러한 종류의 데이터에 훨씬 좋습니다.
또한 개인적으로 HTTP 클라이언트를 제외하고 CouchDB에 대한 클라이언트 라이브러리가 필요하지 않다는 사실을 좋아합니다. 요즘에는 거의 모든 프로그래밍 언어에 포함되어 있습니다.
아마도 가장 명백한 대답은 : RDBMS를 사용해도 통증이 없다면 그대로 유지하십시오. 작업을 수행하기 위해 항상 RDBMS를 해결해야하는 경우 문서 지향 데이터베이스를 살펴볼 가치가 있습니다.
보다 정교한 목록을 보려면 Richard Jones의이 게시물을 확인하십시오 .
CouchDB ( 웹 사이트에서 )
RESTful JSON API를 통해 액세스 할 수있는 문서 데이터베이스 서버. 일반적으로 관계형 데이터베이스는 단순히 REST 서비스를 통해 액세스되는 것이 아니라 훨씬 더 복잡한 SQL API가 필요합니다. 종종 이러한 API (JDBC, ODBC 등)는 매우 복잡합니다. REST는 매우 간단합니다.
평평한 주소 공간으로 특별하고 스키마가 없습니다. 관계형 데이터베이스에는 복잡한 고정 스키마가 있습니다. 테이블, 열, 인덱스, 시퀀스, 뷰 및 기타 항목을 정의합니다. 소파는이 수준의 복잡하고 비싸며 깨지기 쉬운 고급 계획이 필요하지 않습니다.
양방향 충돌 감지 및 관리 기능을 갖춘 강력한 증분 복제 기능을 갖춘 분산 형. 일부 SQL 상용 제품은이를 제공합니다. SQL API 및 고정 스키마로 인해 복잡하고 어렵고 비용이 많이 듭니다. 소파의 경우 간단하고 저렴한 것처럼 보입니다.
쿼리 가능 및 인덱스 가능, Javascript를 쿼리 언어로 사용하는 테이블 지향보고 엔진이 특징입니다. SQL 및 관계형 데이터베이스도 마찬가지입니다. 여기에 새로운 것은 없습니다.
그래서. 왜 CouchDB인가?
다른 서버 데이터를 어리석게 저장하고 제공합니다.
지난 몇 주 동안 나는 내 피드 (맛있고, 깜박임, github, 트위터 ...)를 폴링하고 couchdb에 저장하는 라이프 스트림 앱을 가지고 놀았습니다. couchdb의 장점은 원본 데이터를 오버 헤드없이 원래 구조로 유지할 수 있다는 것입니다. 각 문서에 '클래스'필드를 추가하고 소스 서버를 저장하고 각 소스에 대한 자바 스크립트 렌더 클래스를 작성했습니다.
일반화하면 서버가 다른 서버와 통신 할 때마다 스키마를 제어 할 수 없으므로 스키마가없는 스토리지가 가장 좋습니다. 또한 couchdb는 서버 및 클라이언트의 기본 프로토콜 인 JSON을 표현 용으로, HTTP REST를 사용하여 전송합니다.
신속한 응용 프로그램 개발이 떠 오릅니다.
스키마를 지속적으로 발전시킬 때 MySQL / SQLite에서 스키마를 유지 관리해야한다는 점에서 끊임없이 좌절하고 있습니다. 아직 CouchDB를 많이 사용하지는 않았지만 RAD 프로세스 중에 스키마를 발전시키는 것이 얼마나 간단한 지 좋아합니다.
비 관계형 데이터베이스를 사용하지 않으려는 경우는 다 대다 관계가 많은 경우입니다. 이러한 관계에 대해 특히 MapReduce 함수를 작성하는 방법, 특히 조인 관계에 메타 데이터가 필요한 경우에 대해서는 아직 이해하지 못했습니다. 확실하지 않지만 CouchDB Map 함수가 데이터베이스에서 자체 쿼리를 호출 할 수 있다고 생각하지 않습니다. 잠재적으로 무한 루프가 발생할 수 있기 때문입니다.
smdelfin을 정교하게하려면 : 유연성. 모든 구조 (구조화되지 않은 모든 구조)에 데이터를 저장할 수 있으며 모든 문서는 완전히 다를 수 있습니다. CouchDB는 특히 "보기"인덱스를 사용하여 데이터베이스의 하위 집합을 원할 때 특정 문서를 필터링하고 해당보기 만 쿼리 할 수 있기 때문에 특히 유용합니다.
JSON 형식으로 데이터를 저장하는 문서 데이터베이스의 가장 큰 장점은 JavaScript의 기본 형식입니다. 따라서 JavaScript 웹 응용 프로그램은 CouchDB와 함께 잘 작동합니다. 최근에 CouchDB를 사용하는 웹 응용 프로그램을 만들었으며 끊임없이 변화하는 데이터 구조를 처리 할 수 있으며 빠른 속도입니다.
문서 기반 데이터베이스는 데이터를 입력하기 전에 스키마를 미리 정의 할 필요가 없기 때문에 관계형 데이터베이스보다 큰 이점이 있습니다.
또한 데이터가 관계형이 아니고 테이블에 저장할 수 없지만 이미지 또는 신문 기사와 같은 문서 인 경우 문서 데이터베이스를 사용해야합니다.
또 다른 장점은 웹 개발에서 문서 기반 데이터베이스를 쉽게 사용할 수 있다는 것입니다. 더 자세한 NoSQL 데이터베이스 모델 comarison에 대해서는 다음 소스를 확인하십시오. https://arxiv.org/ftp/arxiv/papers/1509/1509.08035.pdf