코스모스 DB

Cosmos DB
Azure Cosmos DB
Windows Azure logo.png
개발자마이크로소프트
초기 릴리즈2017년, 5년 전(2017년)
이용가능기간:영어
유형다중 모델 데이터베이스
웹 사이트azure.microsoft.com/en-us/services/cosmos-db/

Azure Cosmos DB는 마이크로소프트가 2017년 [1]5월에 출시한 글로벌하게 분산된 멀티모델 데이터베이스 서비스입니다.스키마에 구애받지 않고 수평으로 확장 가능하며 일반적으로 NoSQL 데이터베이스로 분류됩니다.

데이터 모델

내부적으로 코스모스 DB는 "컨테이너"[2]에 "아이템"을 저장하며, 이 두 개념은 사용되는 API에 따라 다르게 나타납니다(예를 들어 MongoDB 호환 API를 사용할 경우 "컬렉션"에 "문서"가 됩니다).컨테이너는 컨테이너 위의 네임스페이스와 유사한 "데이터베이스"로 그룹화됩니다.컨테이너는 스키마에 의존하지 않으므로 항목을 추가할 때 스키마가 적용되지 않습니다.

기본적으로는 각 항목의 모든 필드가 자동으로 인덱싱되므로 일반적으로 특정 쿼리 패턴에 맞춰 조정하지 않고도 우수한 성능을 제공합니다.이러한 기본값은 각 필드에 원하는 인덱스 유형과 정밀도를 지정할 수 있는 인덱싱 정책을 설정하여 수정할 수 있습니다.Cosmos DB는 두 가지 유형의 인덱스를 제공합니다.

  • 범위, 지원 범위 및 ORDER BY 쿼리,
  • 공간: 표준 GeoJSON fragment로 인코딩된 점, 폴리곤 및 라인 문자열에서 공간 쿼리를 지원합니다.

컨테이너는 데이터 [3]무결성을 보장하기 위해 고유한 키 제약 조건을 적용할 수도 있습니다.

각 Cosmos DB 컨테이너는 변경 피드를 노출합니다. 클라이언트는 변경 피드를 구독하여 컨테이너에 [4]추가 또는 업데이트되는 새 항목에 대한 알림을 받을 수 있습니다.2021년 6월 7일 현재 항목 삭제는 변경 피드에 노출되지 않습니다.변경은 Cosmos DB에 의해 유지되므로 컨테이너 생성 이후 언제든지 변경을 요청할 수 있습니다.

컨테이너 수준에서 "존속 가능 시간"(또는 TTL)을 지정하여 Cosmos DB가 초 단위로 표시된 일정 시간 후 항목을 자동으로 삭제할 수 있습니다.이 카운트다운은 항목의 마지막 업데이트 후 시작됩니다.필요한 경우 항목 수준에서 TTL을 오버로드할 수도 있습니다.

멀티모델 API

이전 섹션에서 설명한 내부 데이터 모델은 다음을 통해 공개됩니다.

  • 독자적인 SQL API
  • MongoDB, Gremlin, Cassandra, Azure Table Storage 의 와이어 프로토콜과 부분적으로 호환되는 엔드포인트를 노출하는 5가지 호환성 API. 이러한 호환성 API를 통해 모든 호환 애플리케이션이 표준 드라이버 또는 SDK를 통해 Cosmos DB에 연결하고 사용할 수 있으며 Cosmos DB의 이점을 누릴 수 있습니다.또는 파티션화 및 글로벌 배포와 같은 기능을 제공합니다.
API 내부 매핑 호환성 상태 및 비고
컨테이너 항목들
MongoDB 컬렉션 문서. MongoDB의 [5]와이어 프로토콜 버전 6 및 서버 버전 3.6과 호환됩니다.
그렘린 그래프 노드 및 에지 Gremlin 사양 버전 3.2와 호환됩니다.
카산드라 테이블 배를 젓다 Cassandra Query Language(CQL) 와이어 프로토콜 버전 4와 호환됩니다.
Azure 테이블 스토리지 테이블 아이템
etcd 열쇠 가치 etcd [6]버전 3과 호환됩니다.

SQL API

SQL API를 통해 클라이언트는 컨테이너 및 항목을 생성, 업데이트 및 삭제할 수 있습니다.읽기 전용 JSON 친화적인 SQL 언어를 [7]사용하여 항목을 조회할 수 있습니다.Cosmos DB에는 JavaScript 엔진이 내장되어 있으므로 SQL API는 다음과 같은 기능도 제공합니다.

  • 저장 프로시저임의로 복잡한 조작과 로직을 ACID 준거 트랜잭션에 번들하는 함수.저장 프로시저가 실행되는 동안 변경된 내용과 분리되어 모든 쓰기 작업이 성공하거나 실패하여 데이터베이스가 일관된 상태로 유지됩니다.저장 프로시저는 단일 파티션에서 실행됩니다.따라서 발신자는 분할된 컬렉션을 호출할 때 파티션키를 제공해야 합니다.저장 프로시저는 특정 기능의 부족을 보충하기 위해 사용할 수 있습니다.예를 들어, 어그리게이션 기능의 부족은 오픈 소스 documentdb-lumenize[8] 프로젝트에서 스토어드 프로시저로서 OLAP 큐브를 구현함으로써 보충됩니다.
  • 트리거.작업을 변경하거나 취소할 수 있는 특정 작업(예: 문서 삽입) 전후에 실행되는 함수입니다.트리거는 요청이 있을 때만 실행됩니다.
  • User-Defined Functions(UDF; 사용자 정의 함수).제한된 SQL 기능을 보완하는 SQL 쿼리 언어에서 호출할 수 있는 함수입니다.

SQL API는 REST API로 공개됩니다.이 API 자체는 Microsoft에서 공식적으로 지원되며 에서 사용할 수 있는 다양한 SDK에 구현됩니다.NET Framework ,NET,[9] Node.js(JavaScript), Java 및 Python.

파티셔닝

코스모스 DB는 2016년 파티션 컨테이너 도입으로 자동 파티션 기능을 추가하였습니다.백그라운드에서 분할된 컨테이너는 클라이언트가 제공한 파티션 키에 의해 배포된 항목을 사용하여 여러 물리적 파티션에 걸쳐 있습니다.Cosmos DB는 크기와 처리량에 따라 데이터를 분산할 파티션 수를 자동으로 결정합니다.파티션이 추가 또는 삭제되면 작업이 다운타임 없이 수행되므로 새 파티션 또는 나머지 파티션 간에 데이터가 재조정되는 동안 사용 가능한 상태로 유지됩니다.

분할된 컨테이너를 사용할 수 있게 되기 전에는 데이터를 분할하기 위한 사용자 지정 코드를 작성하는 것이 일반적이었습니다. 일부 Cosmos DB SDK는 여러 가지 다른 분할 체계를 명시적으로 지원했습니다.이 모드는 계속 사용할 수 있지만 스토리지 및 throughput 요건이 하나의 컨테이너 용량을 초과하지 않거나 내장된 파티셔닝 기능이 애플리케이션의 요구 사항을 충족하지 못하는 경우에만 권장됩니다.

조정 가능한 스루풋

개발자는 애플리케이션의 예상 부하와 일치하도록 원하는 처리량을 지정할 수 있습니다.Cosmos DB는 리소스(메모리, CPU 및 IOPS)를 예약하여 요청된 처리량을 보장하는 동시에 99번째 백분위수로 읽기 및 쓰기 요청 지연 시간을 10ms 미만으로 유지합니다.throughput은 Request Units(RU; 요청 단위)/초로 지정됩니다.1KB 항목을 읽는 데 드는 비용은 요청 단위(또는 RU) 1개입니다.동일한 문서에 대한 삭제, 업데이트 및 삽입 조작에 비해 'id' 조작에 의해 선택되는 RU 수는 더 적습니다.대규모 쿼리(예: 카운트) 및 저장 프로시저 실행은 [10]필요한 작업의 복잡성에 따라 수백에서 수천 개의 RU를 소비할 수 있습니다.최소 과금은 시간당입니다.

throughput은 컨테이너 또는 데이터베이스 수준에서 프로비저닝할 수 있습니다.데이터베이스 수준에서 프로비저닝할 경우 해당 데이터베이스 내의 모든 컨테이너에서 throughput이 공유되며 일부 컨테이너에 전용 throughput이 추가될 수 있습니다.Azure Cosmos 컨테이너에 프로비저닝된 throughput은 해당 컨테이너 [11]전용입니다.데이터베이스 및 컨테이너당 프로비저닝할 수 있는 기본 최대 RU는 1,000,000 RU이지만, 고객은 고객 지원에 문의하여 이 제한을 늘릴 수 있습니다.

예를 들어, 단일 지역 인스턴스를 사용하여 5초당 1k씩 1,000,000개의 레코드를 계산하려면 시간당 0.008달러로 1,000,000 RU가 필요합니다. 이는 800달러에 해당합니다.두 지역은 비용이 두 배입니다.

글로벌 디스트리뷰션

Cosmos DB 데이터베이스는 Microsoft Azure 지역(2018년 12월 현재 54개 지역)에서 사용할 수 있도록 구성할 수 있으므로 애플리케이션 개발자는 데이터를 사용자의 [12]위치에 더 가깝게 배치할 수 있습니다.각 컨테이너의 데이터는 구성된 모든 영역에서 투과적으로 복제됩니다.영역 추가 또는 삭제는 다운타임이나 성능 저하 없이 수행됩니다.Cosmos DB의 멀티호밍 API를 활용하면 Cosmos DB가 사용 가능한 가장 가까운 지역으로 요청을 자동으로 라우팅하기 때문에 지역을 추가하거나 제거할 때 애플리케이션을 업데이트하거나 재배치할 필요가 없습니다.

일관성 수준

Cosmos DB에서 데이터 일관성을 구성할 수 있으므로 애플리케이션 개발자는 다음 5가지 [13]레벨 중에서 선택할 수 있습니다.

  • Event는 순서를 보증하지 않으며 복제본이 최종적으로 수렴되는 것만 보증합니다.
  • 일관된 프레픽스로 주문 보증이 추가됨
  • 세션은 단일 클라이언트 연결로 범위가 지정되며 기본적으로 각 클라이언트의 읽기/쓰기 일관성이 보장됩니다.이것은 기본[14] 일관성 수준입니다.
  • 제한적인 고정성은 읽기가 x개 버전의 항목 또는 지정된 기간을 초과하여 지연되지 않도록 함으로써 일관성 있는 접두사를 증가시킵니다.
  • 높은 일관성(또는 선형화 가능)을 통해 클라이언트는 항상 글로벌하게 커밋된 최신 쓰기를 읽을 수 있습니다.

원하는 일관성 수준은 계정 수준에서 정의되지만 SDK에 의해 공개되는 특정 HTTP 헤더 또는 대응하는 기능을 사용하여 요청별로 덮어쓸 수 있습니다.TLA+ 모델은 GitHub에서 [15]오픈소싱되며, 5가지 일관성 수준은 모두 TLA+ 사양 언어를 사용하여 지정 및 검증되었습니다.

멀티마스터

Cosmos DB의 원래 분포 모델은 하나의 쓰기 영역을 포함하며, 다른 모든 영역은 읽기 전용 복제본입니다.2018년 3월, 멀티 마스터 기능이 새롭게 발표되어 글로벌 배치 내에서 여러 지역이 복제본을 작성할 수 있게 되었습니다.서로 다른 쓰기 영역에서 동시에 충돌하는 쓰기가 발생할 경우 발생할 수 있는 잠재적인 병합 충돌은 기본 마지막 쓰기 승리 정책 또는 사용자 정의 JavaScript 함수를 통해 해결할 수 있습니다.

분석 저장소

2020년 [16]5월에 발표된 이 기능은 트랜잭션 워크로드에 영향을 주지 않으면서 Azure Cosmos DB의 운영 데이터에 대한 대규모 분석을 가능하게 하는 완전히 격리된 열 저장소입니다.이 기능은 온라인 분석 처리를 수행하기 위해 최적화된 데이터 저장소를 필요로 하는 기존 ETL 파이프라인에서 발생하는 복잡성과 지연에 대한 과제에 대처합니다.이것에 의해, 운용 데이터는 자동적으로 다른 컬럼 스토어에 동기 해, 최적화된 방법으로 실행할 수 있습니다.따라서 이러한 쿼리의 지연 시간이 향상됩니다.

Microsoft Azure Synapse[17] Link for Cosmos DB를 사용하면 Synapse Analytics에서 Azure Cosmos DB 분석 스토어에 직접 링크하여 ETL 하이브리드 트랜잭션/분석 처리 솔루션을 구축할 수 있습니다.운영 데이터에 대해 거의 실시간으로 대규모 분석을 직접 실행할 수 있습니다.

접수처

Gartner Research는 2016년 Microsoft를[18] Magic Quadrant Operational Database Management Systems의 리더로 선정하고 Cosmos DB의 고유한 기능을 평가했습니다.

실제 사용 사례

Microsoft는 Microsoft Office, Skype, Active Directory, Xbox MSN을 포함한 자체 [19]앱에서 Cosmos DB를 사용합니다.

Cosmos DB는 Azure App Services 및 Azure Traffic [20]Manager와 같은 다른 Azure 서비스와 결합되어 보다 글로벌하게 복원되는 애플리케이션/시스템을 구축합니다.

Cosmos DB 프로파일러

Cosmos DB Profiler 클라우드 비용 최적화 도구는 애플리케이션과 Cosmos DB 데이터베이스 간의 상호 작용에서 비효율적인 데이터 쿼리를 탐지합니다.프로파일러는 성능 낭비와 과도한 클라우드 지출에 대해 사용자에게 경고합니다.또한 코드를 분리 및 분석하여 사용자를 정확한 [21]위치로 유도함으로써 이러한 문제를 해결하는 방법도 권장합니다.

제한 사항

  • SQL은 한정되어 있습니다.집약은 COUNT, SUM, MIN, MAX, AVG 기능으로 제한되지만 GROUP BY 또는 데이터베이스 시스템에서 찾을 수 있는 기타 집계 기능은 지원되지 않습니다.그러나 저장 프로시저를 사용하여 데이터베이스 내 집약 기능을 [22]구현할 수 있습니다.
  • "테이블" 간의 SQL 조인은 불가능합니다.
  • 순수 JSON 데이터 유형만 지원됩니다.특히 Cosmos DB는 사용 가능한 데이터 유형을 사용하여 데이터를 저장해야 하는 날짜 데이터를 지원하지 않습니다.예를 들어 ISO-8601 문자열 또는 에폭 정수로 저장할 수 있습니다.Cosmos DB가 가장 자주 비교되는 데이터베이스인 MongoDB는 BSON 바이너리 시리얼라이제이션 사양에서 JSON을 확장하여 날짜-시간 데이터뿐만 아니라 기존 번호 유형, 정규 표현식 및 정의되지 않음도 포함했습니다.그러나 Cosmos DB의 순수 JSON 선택은 JSON 기반 REST API와 데이터베이스에 내장된 JavaScript 엔진에 더 적합하기 때문에 실제로는 이점이 있다고 많은 사람들이[who?] 주장한다.

레퍼런스

  1. ^ "Azure Cosmos DB". Microsoft Azure. Microsoft. Retrieved 9 July 2017.
  2. ^ "Working with Azure Cosmos DB databases, containers and items". docs.microsoft.com. Retrieved 2018-12-13.
  3. ^ "Unique keys in Azure Cosmos DB". Dibran's Blog. Retrieved 2018-12-13.
  4. ^ "Working with the change feed support in Azure Cosmos DB". docs.microsoft.com. Retrieved 2021-07-03.
  5. ^ "Azure Cosmos DB API now supports MongoDB version 3.6". azure.microsoft.com. Retrieved 2020-02-11.
  6. ^ "Introduction to the Azure Cosmos DB etcd API". docs.microsoft.com. Retrieved 2020-06-10.
  7. ^ "SQL language syntax in Azure Cosmos DB". docs.microsoft.com. Retrieved 2018-12-13.
  8. ^ Maccherone, Larry. "Announcing documentdb-lumenize". blog.lumenize.com. Retrieved 2016-12-11.
  9. ^ "Using Azure DocumentDB and ASP.NET Core for extreme NoSQL performance". auth0.com.
  10. ^ "Provisioned Throughput: Request Units in Azure Cosmos DB". docs.microsoft.com. Retrieved 2019-07-21.
  11. ^ "Provision throughput on containers and databases". docs.microsoft.com. Retrieved 2019-07-21.
  12. ^ "How to distribute data globally with Azure Cosmos DB". docs.microsoft.com. Retrieved 2017-08-22.
  13. ^ "Diving Deep Into Different Consistency Levels Of Azure Cosmos DB". www.c-sharpcorner.com. Retrieved 2018-12-13.
  14. ^ "Tunable data consistency levels in Azure Cosmos DB". docs.microsoft.com. Microsoft. Retrieved 2017-08-22.
  15. ^ GitHub - Azure/azure-cosmos-tla: Azure Cosmos TLA+ specifications., Microsoft Azure, 2018-12-09, retrieved 2018-12-13
  16. ^ "Microsoft Announces a New Pricing Model Option for Azure Cosmos DB and More Capabilities". www.infoq.com. Retrieved 2020-06-20.
  17. ^ "A closer look at Azure Synapse Link". www.zdnet.com. Retrieved 2017-04-15.
  18. ^ "Magic Quadrant for Operational Database Management Systems". www.gartner.com. Retrieved 2016-12-11.
  19. ^ http://www.vldb.org/pvldb/vol8/p1668-shukla.pdf[베어 URL PDF]
  20. ^ Pietschmann, Chris. "Building Globally Resilient Apps with Azure App Service and Cosmos DB". Build5Nines.com. Opsgility. Retrieved 30 January 2018.
  21. ^ "Cosmos DB Profiler". hibernatingrhinos.com. Hibernating Rhinos. Retrieved 2020-05-20.
  22. ^ "Add Group By support for Aggregate Functions". feedback.azure.com. Retrieved 2019-03-31.

외부 링크