NoSQL 우수성 : 최고의 문서 데이터베이스

"올바른 작업에 적합한 도구." 그러한 지혜가 어느 곳에서나 사실이라면 개발자가 주어진 응용 프로그램에 대해 선택한 데이터베이스를 선택하는 것도 사실입니다. "NoSQL"이라고 통칭하는 데이터 제품군 중 하나 인 문서 데이터베이스 는 데이터베이스 기술이 아닌 응용 프로그램 에 집중하려는 개발자를위한 것 입니다.

문서 데이터베이스를 사용하면 데이터가 고유 한 열 유형이있는 테이블에 저장되지 않습니다. 대신 필드 수와 중첩 구조에 관계없이 자유 형식 "문서"에 저장됩니다. 이러한 문서는 일반적으로 JSON으로 표시되며 API를 통해 또는 JSON을 REST 엔드 포인트로 전송하여 업데이트됩니다. 대부분의 최신 프로그래밍 언어는 JSON 및 REST를 지원하므로 문서 데이터베이스로 작업하는 것은 기존 데이터베이스로 작업하는 것보다 기본적으로 해당 데이터 구조로 작업하는 것과 비슷합니다.

이 스키마가없는 디자인에는 한계가 있습니다. 개발자는 삽입 된 데이터의 일관성을 보장하기 위해 더 많은 작업을 수행해야합니다. 이러한 일관성이 항상 데이터베이스 자체에 의해 보장되는 것은 아니기 때문입니다. 데이터베이스 작업을위한 표준 문제이자 널리 이해되는 언어 인 SQL은 대부분의 문서 데이터베이스에서 지원되지 않으므로 기존 데이터베이스 전문 지식을 가진 사람들은 처음부터 시작해야합니다. 그러나 문서 데이터베이스의 편리 성, 속도, 확장 성 및 융통성은 단백 한 자유 형식 데이터 구조가 필요한 응용 프로그램을 작성할 때 능가하기 어렵습니다.

여기에서 가장 잘 알려져 있고 가장 널리 사용되는 문서 데이터베이스 7 개를 프로파일 링했습니다. 7 개 중 4 개 (CouchDB, Couchbase Server, MongoDB 및 RethinkDB)는 시작하는 데 실질적인 장벽이 거의 또는 전혀없는 오픈 소스 프로젝트입니다. Couchbase 및 MongoDB는 상용 라이선스에 따라 지원되는 엔터프라이즈 에디션에서도 사용할 수 있습니다. 나머지 3 개 (Amazon DynamoDB, Google Firebase 및 IBM Cloudant)는 주요 클라우드 공급 업체의 호스팅 서비스이며, 이러한 클라우드의 다른 서비스와 긴밀하게 통합되는 것이 큰 매력입니다.

기능을 비교하려면 아래 표를 참조하십시오. 하단의 스크롤바를 사용하여 모든 열을 보려면 테이블에서 오른쪽으로 스크롤하십시오. 각 데이터베이스에 대한 간략한 설명을 읽으십시오.

L W M S I A O

1. 타사 도구가이 기능을 제공 할 수 있습니다. 2 . 테이블 당. 3 . 엔터프라이즈 에디션 만 해당. 4 . 보기 기능 만. 5 . 다중 문서 트랜잭션도 사용할 수 있지만 샤딩 된 클러스터에서는 사용할 수 없습니다.

키 : = Linux, = Windows, = MacOS, = Solaris, = iOS, = Android, = 기타 모바일,
  Amazon DynamoDB 코스모스 DB Couchbase CouchDB Google Firebase IBM Cloudant MarkLogic MongoDB RethinkDB
플랫폼 클라우드 전용 클라우드 전용 LWM LWMIAO 클라우드 전용 클라우드 전용 LWMS LWMS LWM
쿼리 시스템 REST API MongoDB 유선 프로토콜 Memcached 프로토콜, REST API REST API REST / JavaScript API REST API REST API JSON 기반 API, 부분 REST API ReQL 쿼리 언어, REST API
SQL 쿼리 아니오 1 N1QL 언어를 통해 아니 아니 아니 아니오 1 아니
강력한 타이핑 아니 아니 XML 스키마의 경우
기본 조인 아니 아니 아니 아니
샤딩 파티셔닝 NA 예 2
클러스터링 NA NA NA
복제 NA 테이블 당
일관성 : 즉시 읽기 당 전체적으로 아니 연결된 클라이언트 아니 쓰기 당 문서 당
일관성 : 최종 오프라인 클라이언트 전체 데이터베이스
동시성
인 메모리 작업 NA NA 아니 아니 NA 아니 NA 예 3 아니
저장 프로 시저 아니 자바 스크립트 자바 스크립트 4 자바 스크립트 4 규칙 자바 스크립트 4 XQuery 모듈 자바 스크립트 아니
업무 앱별 단일 문서 단일 문서 단일 문서 단일 문서 단일 문서 5 단일 문서
현재 버전 NA NA 5.0 (2017 년 10 월) 2.1.1 (2017 년 11 월) NA NA 9.0 (2016 년 5 월) 3.4.10 (2017 년 10 월) 2.3.6 (2017 년 7 월)
초판 2012 년 2017 년 2011 년 2005 년 2012 년 2010 년 2005 년 2009 년 2009 년

Amazon DynamoDB

Amazon의 DynamoDB 문서 저장소는 2012 년 Amazon SimpleDB의 확장으로 시작되었습니다. 내부적으로는 키-값 저장소 인 Dynamo에 의해 구동됩니다. DynamoDB의 공동 개발자는 나중에 Apache Cassandra를 만들기 위해 동일한 아이디어를 많이 사용합니다. 

DynamoDB 기능

대부분의 Amazon의 다른 클라우드 제품과 마찬가지로 DynamoDB는 필요한만큼 지불하는 관리 형 서비스입니다. 개발자는 구조화되지 않은 문서 또는 키-값 쌍을 유지하기 위해 제공 할 스토리지 용량을 설정하고 데이터베이스에 대한 읽기 및 쓰기 요청에 대해 고정 된 시간당 속도 제한을 선택합니다. 서버를 프로비저닝하거나 복제를 구성 할 필요가 없습니다. Amazon은 모든 것을 내부적으로 처리하고 최근에 자동 확장을 추가했습니다.

당연히 DynamoDB는 개발자에게 Amazon 클라우드의 다른 서비스와의 유용한 통합을 제공합니다. 예를 들어 트리거는 AWS Lambda 함수를 통해 설정할 수 있습니다. Amazon의 BI 및 분석 도구도 근처에 있습니다. 이러한 서비스와의 근접성은 편리하지만 아마존은 다양한 방법으로 기능을 상향 판매 할 수 있습니다. 예를 들어 Redis에 따른 캐싱 및 가속은 비용이 추가되는 추가 기능인 DynamoDB Accelerator를 통해 사용할 수 있습니다.

DynamoDB 로컬

오픈 소스 화신에서는 DynamoDB를 찾을 수 없습니다. Amazon 클라우드에서 호스팅 된 제품으로 독점적으로 제공됩니다.

즉, 다른 많은 클라우드 네이티브 데이터베이스와 달리 DynamoDB는 로컬에서 다운로드하고 실행할 수있는 버전으로도 제공됩니다. 그러나 DynamoDB Local은 프로덕션 용이 아니라 연결이나 Amazon 청구서를 실행하지 않고 테스트 환경에서 애플리케이션을 준비하는 방법입니다.

Microsoft Azure Cosmos DB

Cosmos DB는 데이터 저장 및 검색을위한 여러 모델을 포함하는 데이터베이스 시스템 인 야심 찬 프로젝트입니다. Cosmos DB는 문서 데이터베이스, 열 형식 데이터베이스, 그래프 데이터베이스 또는 키-값 저장소 역할을 할 수 있으므로 사용자가 자신에게 적합한 패러다임을 선택하고 해당 패러다임 작업을위한 다양한 API를 그릴 수 있습니다. 

Cosmos DB 기능

문서 데이터베이스 시스템을위한 완전히 새로운 API를 개발하는 대신 Cosmos DB는 널리 사용되는 MongoDB (아래에서 설명)와 호환되는 API를 제공합니다. 장점 중 하나는 MongoDB 인터페이스 라이브러리 또는 MongoDB의 바이너리 와이어 프로토콜을 사용하는 기존 코드가 그대로 작동 할 수 있다는 것입니다. Cosmos DB는 MongoDB를 서비스로 제공 할 수 있습니다. 마찬가지로 Cosmos DB는 인기있는 column-family 데이터베이스 인 Cassandra의 API를 지원합니다. 

Microsoft는 문서 데이터베이스 기능에만 국한되지는 않지만 문서 데이터베이스 응용 프로그램을 구축하는 사람들에게 어필하기 위해 Cosmos DB에 몇 가지 이점을 선전합니다. 이러한 제품 중 하나는 조정 가능한 일관성 수준입니다. Azure 지역에서 다른 지역보다 더 강력한 일관성이 필요한 문서 트랜잭션 클래스가있는 경우 트랜잭션별로 수동으로 지정할 수 있습니다.

다른 기능은 문서 데이터베이스에 더 구체적입니다. 예를 들어 MongoDB 사용자는 검색을 최적화하기 위해 문서 컬렉션에 인덱스를 설정해야합니다. MongoDB API로 작업하는 Cosmos DB 사용자는 삽입 된 문서의 모든 속성이 자동으로 인덱싱되므로 문서에 대한 인덱싱을 설정할 필요가 없습니다.

Microsoft Azure에서 Cosmos DB 사용

로컬에서 호스팅되는 Cosmos DB 버전이 없습니다. Microsoft Azure 클라우드에서 서비스로만 사용할 수 있습니다. 즉, Cosmos DB 용 개발 API는 Java, Node.js, .NET 및 Python과 같은 대부분의 대중적인 엔터프라이즈 언어에서 사용할 수 있습니다.

Couchbase 서버

Couchbase는 CouchDB의 후계자만큼 형제가 아닙니다. Couchbase는 CouchDB 및 Membase에서 수행 된 작업을 기반으로 구축되었지만 두 프로젝트 중 어느 것과도 관련이 없습니다. 엔터프라이즈 사용 사례를위한 자동화 된 장애 조치 및 데이터 센터 간 복제와 같은 고급 기능을 갖춘 문서 데이터베이스 및 분산 키-값 저장소가 하나로 통합되었습니다.

Couchbase 기능

Couchbase를 다른 NoSQL 경쟁 제품뿐만 아니라 이전 CouchDB와 차별화하는 기능 중 하나는 N1QL ( "니켈"로 발음)이라는 SQL과 유사한 쿼리 언어입니다. N1QL은 ANSI SQL 구현에서 기대할 수있는 모든 명령을 제공하지는 않지만, SQL 경험이있는 사람이 실행 가능한 결과를 얻을 수 있도록 JOIN 작업과 같은 유용한 기능을 충분히 제공합니다.

Couchbase 쿼리 시스템은 개발자뿐만 아니라 일반적으로 기존 데이터베이스를 다루는 DBA 및 비즈니스 분석가를위한 것입니다. EXPLAIN 키워드와 같은 기능은 특히 군중의 관심을 끌기 위해 삽입 된 것 같습니다.

결합 문서 데이터베이스 및 키-값 저장소로서 Couchbase는 고유 식별자를 키로 사용하여 문서를 저장합니다. 키-값 캐시처럼 작동하도록 문서에 수명 값을 할당 할 수도 있습니다. 즉, Redis와 같은 진정한 키-값 캐싱 시스템은 기본 키-값 저장에 훨씬 빠르지 만 Couchbase는 더 유연하며 Redis와 Couchbase를 효과적으로 결합하여 작업 속도를 높일 수 있습니다. 참고로 Couchbase는 Memcached 프로토콜에 대한 기본 지원을 제공하므로 Memcached를 사용하는 기존 애플리케이션은 대체로 Couchbase에 연결할 수 있습니다.

Couchbase 커뮤니티 대 엔터프라이즈

Couchbase Server는 본격적인 유료 엔터프라이즈 에디션, 무료 사용 커뮤니티 에디션 및 다른 제품의 기반이되는 오픈 소스 에디션으로 제공됩니다. 엔터프라이즈 및 커뮤니티 에디션 용 바이너리 다운로드는 Couchbase 사이트에서 제공되며 소스 코드는 Couchbase 개발자 사이트에서 제공됩니다. (여러 프로젝트의 집합이므로 Couchbase 오픈 소스 프로젝트에 대한 GitHub 저장소가 하나도 없습니다.)

커뮤니티 에디션은 프로덕션 환경에 배포 할 수 있지만 엔터프라이즈 에디션의 고급 기능과 지원이 부족하므로 구매자가주의해야합니다. 수평 적 확장 기능과 같은 Couchbase의 일부 기능은 CouchDB 프로젝트에 적용되었지만 이는 규칙보다 예외입니다.

Couchbase Lite

앱 개발자에게 주목할만한 Couchbase의 또 다른 에디션은 본격적인 에디션의 인스턴스와 동기화 할 수있는 Couchbase의 임베드 가능한 버전 인 Couchbase Lite입니다. Couchbase Lite는 백엔드와 자동으로 동기화되는 데이터 저장소가 필요한 모바일 앱용 애플리케이션 스택 인 Couchbase Mobile의 핵심 구성 요소입니다. Couchbase Mobile은 iOS, Android, Java에서 사용할 수 있습니다. .Net, MacOS 및 tvOS.

CouchDB

CouchDB 프로젝트는 전 IBM 개발자가 2005 년에 시작하여 2008 년에 Apache Software Foundation으로 이전했습니다. CouchDB가 Couchbase의 기반이라고 가정하는 경우도 있지만 CouchDB와 Couchbase는 목적이 다른 병렬 프로젝트입니다.

CouchDB 대 Couchbase

Couchbase는 문서 데이터베이스이자 키-값 저장소 인 반면 CouchDB는 엄격하게 문서 데이터베이스입니다. 그리고 Couchbase는 내결함성 및 SQL과 유사한 쿼리 언어와 같은 엔터프라이즈 기능에 오랫동안 집중 해 왔지만 이러한 기능은 CouchDB에 도입되기 시작했습니다.

CouchDB 기능

CouchDB는 배포의 단순성과 사용의 용이성을 강조합니다. 데이터베이스에서 데이터를 검색하는 것은 JSON 형식의 쿼리를 REST HTTPS 엔드 포인트로 보내는 것만 큼 간단하며 결과는 JSON으로 반환됩니다. 대부분의 최신 프로그래밍 언어는 이러한 작업을 수행 할 수 있으며 CouchDB 쿼리 및 보고서 뒤에있는 뷰를 만드는 데 필요한 매핑 및 축소도 수행 할 수 있습니다. ODBC 드라이버 나 데이터 커넥터가 필요하지 않습니다.

CouchDB의 특별한 소스 중 하나는 데이터 조정 기술입니다. 하나의 CouchDB 피어에 대한 변경 사항은 버전 제어 시스템과 유사한 방식으로 다른 피어와 자동으로 조정됩니다. 문서 버전 간의 모든 충돌은 해당 문서의 이전 개정 본인 것처럼 유지됩니다.

이 최종 일관성 모델은 항상 또는 일관되게 연결되지 않은 데이터베이스 (예 : 간헐적으로 연결된 모바일 애플리케이션) 또는 특정 노드에서 가장 최신 버전의 데이터가 필요하지 않은 경우에 유용합니다. 그러나 최종 일관성은 CouchDB의 가장 큰주의 사항 중 하나입니다. 즉각적인 일관성 필요한 경우 CouchDB는이를 찾을 수 없습니다.

확장 성은 오랫동안 CouchDB의 약점 이었지만 최근에 해결되었습니다. 버전 2.0은 Cloudant / IBM에서 오픈 소스로 제공하는 비트를 사용하여 새로운 클러스터링 기술에 영향을 미치고 프로젝트에 병합되었습니다. 마지막으로 MongoDB에 익숙하고 유사한 선언적 쿼리 구문을 사용하려는 사용자를 위해 Cloudant / IBM의 Mango 프로젝트도이를 외부 애드온으로 제공합니다.

CouchDB 다운로드

모든 주요 플랫폼 용 CouchDB 바이너리 및 소스 코드는 공식 CouchDB 사이트에서 다운로드 할 수 있습니다. 프로젝트의 소스는 GitHub에서도 사용할 수 있습니다.

Google Firebase 실시간 데이터베이스

Google Firebase를 DynamoDB에 대한 Google의 답변으로 생각할 수 있습니다. 이는 여러 플랫폼에서 클라우드 백엔드와 로컬 앱간에 빠른 동기화 데이터 스토리지를 제공하는 방법입니다.

Firebase 실시간 데이터베이스는 잠재 고객 참여와 인사이트가 많은 앱을 빌드하기위한 Firebase 스택의 한 구성 요소 일뿐입니다. 전체 스택에는 인증, 성능 모니터링, 사용자 분석 등의 기능이 포함되어 있지만 여기서는 Firebase 자체에 중점을 둡니다.

Google Firebase 기능

Google은 2014 년에 Firebase를 인수했습니다. 이후 몇 년 동안 Google은 많은 Google Cloud 기능을 활용하기 위해 Firebase를 연결했습니다. 예를 들어 Firebase 용 Google Cloud Functions를 사용하면 Firebase 이벤트에 대한 응답으로 클라우드에서 자바 스크립트 함수를 트리거 할 수 있습니다. Firebase 용 Google 애널리틱스를 사용하면 심층 분석을 위해 모바일 앱 데이터를 BigQuery로 가져올 수 있습니다.

게임은 Firebase의 대상 애플리케이션 중 하나이므로 Firebase 용으로 제공되는 SDK에는 Unity 크로스 플랫폼 게임 개발 프레임 워크가 포함됩니다. 기존의 엔터프라이즈 중심 또는 소비자 대상 프로젝트에서 작업하는 개발자는 기본 iOS 및 Android, C ++, 일반 웹 / 자바 스크립트, REST를 지원하는 기타 언어 (자바, Python 등)와 같은 다른 선택 사항이 많습니다.

Firebase는 연결이 보장되지 않는 시나리오에서 작동하도록 설계되었습니다. CouchDB와 마찬가지로 오프라인 일 때 로컬로 변경 사항을 캐시하고 연결이 반환되면 자동으로 백엔드와 동기화됩니다. Firebase는 완전히 오프라인 인 독립형 솔루션으로 사용하도록 설계되지 않았습니다. 예를 들어 Android에서 로컬 데이터베이스는 스토리지가 10MB로 제한됩니다.

Google Cloud 및 GitHub의 Firebase

Firebase는 독립형 제품으로 제공되지 않지만 Google 클라우드 제품 제공의 일부로 만 제공됩니다. Firebase GitHub 저장소에는 SDK 및 다양한 플랫폼 별 도구에 대한 소스 코드가 있습니다.

IBM Cloudant

Cloudant는 본질적으로 IBM이 호스팅하는 CouchDB 에디션입니다. 원래 Cloudant는 IBM의 SoftLayer 클라우드에서 호스팅되는 "BigCouch"라는 CouchDB 에디션을 제공하는 독립 회사였습니다. 2014 년 IBM은 분석 및 빅 데이터에 대한 IBM의 전반적인 추진의 일환으로 Cloudant를 완전히 인수했습니다. 

Cloudant 대 CouchDB

Cloudant는 CouchDB의 호스팅 된 버전 이상을 의미합니다. Cloudant는 기본적으로 통합 된 전체 텍스트 검색과 같이 CouchDB 자체에서 쉽게 사용할 수없는 기능을 제공합니다. CouchDB의 전체 텍스트 검색에는 일반적으로 외부 프로젝트와의 통합이 필요합니다. 데이터는 Cloudant와 CouchDB 인스턴스간에 양방향으로 복제 될 수 있으므로 필요에 따라 둘 중 하나 사이를 이동하는 것이 비교적 쉽습니다.

CouchDB에 대한 Cloudant의 개선 사항 중 일부는 CouchDB 2.0의 수평 확장 기능 및 Mango 쿼리 언어 인터페이스를 포함하여 기본 CouchDB 프로젝트로 다시 돌아 왔습니다. 그러나 Cloudant 기능이 자동으로 CouchDB로 떨어질 것이라는 증거로 받아들이지 마십시오.

IBM Cloud의 Cloudant

Cloudant는 주로 IBM Cloud의 클라우드 오퍼링이며 dashDB, DataWorks 및 Watson Analytics와 같은 다른 IBM Cloud 데이터 제품과 함께 사용할 수 있습니다.

Cloudant 로컬

Cloudant Local이라고하는 Cloudant의 방화벽 뒤 버전은 클라우드 호스팅 제품과 동일한 기능을 모두 제공합니다. Cloudant Local은 x86 Linux의 Ubuntu 및 Red Hat 버전과 Red Hat 또는 Suse를 실행하는 IBM의 자체 System z에서 사용할 수 있습니다. 개발자는 Docker 이미지로 테스트 및 개발 전용 무료 버전을 다운로드 할 수 있습니다.