Azure Cosmos DB for Table에 대해 자주 묻는 질문

적용 대상: 테이블

Table 및 Azure Table Storage용 Azure Cosmos DB 비교

테이블용 API가 Azure Table Storage 동작과 동일하지 않은 곳은 어디인가요?

Azure Cosmos DB for Table을 사용하여 테이블을 만들려는 Azure Table Storage에서 오는 사용자에게는 다음과 같은 몇 가지 동작 차이점이 있습니다.

  • Azure Cosmos DB for Table은 보장된 성능을 보장하기 위해 예약된 용량 모델을 사용하지만 이는 용량이 사용되지 않더라도 테이블이 만들어지는 즉시 용량에 대한 비용을 지불한다는 것을 의미합니다. Azure Table Storage를 사용하면 사용되는 용량에 대해서만 비용을 지불합니다. 이렇게 하면 Azure Table Storage가 10초 SLA를 제공하는 동안 Table용 API가 99번째 백분위수에서 10ms 읽기 및 15ms 쓰기 SLA를 제공할 수 있는 이유를 설명하는 데 도움이 됩니다. 그러나 결과적으로 테이블 테이블용 API를 사용하면 요청이 없는 빈 테이블도 Azure Cosmos DB에서 제공하는 SLA에서 용량을 처리할 수 있도록 비용이 많이 듭니다.

  • 테이블용 API에서 반환된 쿼리 결과는 Azure Table Storage에 있는 것처럼 파티션 키/행 키 순서로 정렬되지 않습니다.

  • 행 키는 최대 255바이트일 수 있습니다.

  • 일괄 처리에는 최대 2MB만 있을 수 있습니다.

  • CORS는 현재 지원되지 않습니다.

  • Azure Table Storage의 테이블 이름은 대/소문자를 구분하지 않지만 Table용 Azure Cosmos DB에 있습니다.

  • 이진 필드와 같은 정보를 인코딩하기 위한 Azure Cosmos DB의 내부 형식 중 일부는 현재처럼 효율적이지 않습니다. 따라서 이로 인해 데이터 크기에 예기치 않은 제한이 발생할 수 있습니다. 예를 들어, 데이터를 인코드하면 데이터 크기가 커지기 때문에 현재는 테이블 엔터티 1Meg 전체를 이진 데이터 저장에 사용할 수 없습니다.

  • Azure Cosmos DB는 엔터티 속성 이름을 IDridetag예약하며 ResourceId 현재 지원되지 않습니다.

  • TableQuery TakeCount는 1000으로 제한되지 않습니다.

  • REST API 측면에서 Azure Table Storage(테이블용 Azure Cosmos DB는 아님)는 다음 엔드포인트/쿼리 옵션을 지원합니다.

    Rest 메서드 Rest 엔드포인트/쿼리 옵션 문서 URL 설명 Table Storage에서 지원됨 테이블용 API에서 지원됨
    GET, PUT /?Restype=service@comp=properties 테이블 서비스 속성 설정테이블 서비스 속성 가져오기 이 엔드포인트는 CORS 규칙, 스토리지 분석 구성 및 로깅 설정을 설정하는 데 사용됩니다. CORS는 현재 지원되지 않습니다. 또한 분석 및 로깅은 Azure Storage 테이블과 다르게 Azure Cosmos DB에서 처리됩니다. 아니요
    OPTIONS /<table-resource-name> 실행 전 CORS 테이블 요청 이는 Azure Cosmos DB가 현재 지원하지 않는 CORS의 일부입니다. 아니요
    GET /?Restype=service@comp=stats Table Service 통계 가져오기 주 데이터베이스와 보조 데이터베이스 간에 복제본(replica) 데이터를 얼마나 빨리 복제본(replica) 정보를 제공합니다. 복제본(replica)이 쓰기의 일부이므로 Azure Cosmos DB에서는 이 작업이 필요하지 않습니다. 아니요
    GET, PUT /mytable?comp=acl 테이블 ACL 가져오기 및 테이블 ACL 설정 SAS(공유 액세스 서명)를 관리하는 데 사용되는 저장된 액세스 정책을 가져오고 설정합니다. 아니요
  • Azure Cosmos DB for Table은 ATOM이 아닌 JSON 형식만 지원합니다.

  • 특히 .NET SDK의 경우 Azure Cosmos DB에서 현재 지원하지 않는 몇 가지 클래스와 메서드가 있습니다.

    • CloudTableClient 클래스
      • \ServiceProperties
      • \ServiceStats
    • CloudTable 클래스
      • SetPermissions
      • GetPermissions

기타 질문과 대답

테이블용 API를 사용하려면 새 SDK가 필요한가요?

아니요, 기존 스토리지 SDK는 계속 작동해야 합니다. 그러나 최상의 지원 및 대부분의 경우 우수한 성능을 위해 항상 최신 SDK를 가져오는 것이 좋습니다. Azure Cosmos DB for Table 소개에서 사용 가능한 언어 목록을 참조하세요.

API for Table에 연결하는 데 사용해야 하는 연결 문자열 무엇인가요?

연결 문자열은 다음과 같습니다.

DefaultEndpointsProtocol=https;AccountName=<AccountNamefromCosmosDB;AccountKey=<FromKeysPaneofCosmosDB>;TableEndpoint=https://<AccountName>.table.cosmosdb.azure.com

Azure Portal의 커넥트ion String 페이지에서 연결 문자열 가져올 수 있습니다.

테이블용 API에 대한 .NET SDK의 요청 옵션에 대한 구성 설정을 재정의할 어떻게 할까요? 있나요?

일부 설정은 CreateCloudTableClient 메서드에서 처리되고 다른 설정은 클라이언트 애플리케이션의 app설정 섹션에 있는 app.config를 통해 처리됩니다. 구성 설정에 대한 자세한 내용은 Azure Cosmos DB 기능을 참조 하세요.

기존 Azure Table Storage SDK를 사용하는 고객에게 변경 내용이 있나요?

없음 기존 Azure Table Storage SDK를 사용하는 기존 또는 신규 고객은 변경되지 않습니다.

테이블용 API와 함께 사용하기 위해 Azure Cosmos DB에 저장된 테이블 데이터를 볼 어떻게 할까요? 있나요?

Azure Portal을 사용하여 데이터를 찾아볼 수 있습니다. 테이블 코드용 API 또는 다음 답변에 멘션 도구를 사용할 수도 있습니다.

Table용 API에서 작동하는 도구는 무엇입니까?

Azure Storage Explorer사용할 수 있습니다.

이전에 지정한 형식으로 연결 문자열 유연하게 사용할 수 있는 도구는 테이블에 대한 새 API를 지원할 수 있습니다. 테이블 도구 목록은 Azure Storage 클라이언트 도구 페이지에 제공됩니다.

작업에 대한 동시성이 제어되는가?

예, 낙관적 동시성은 ETag 메커니즘을 사용하여 제공됩니다.

OData 쿼리 모델이 엔터티에 대해 지원되는가요?

예, 테이블용 API는 OData 쿼리 및 LINQ 쿼리를 지원합니다.

동일한 애플리케이션에서 테이블용 Azure Table Storage 및 Azure Cosmos DB에 나란히 연결할 수 있나요?

예, 각각 연결 문자열 통해 자체 URI를 가리키는 CloudTableClient의 두 개의 별도 인스턴스를 만들어 연결할 수 있습니다.

기존 Azure Table Storage 애플리케이션을 이 제품으로 마이그레이션하려면 어떻게 할까요?

AzCopy 가 지원됩니다.

예를 들어 'n' GB의 데이터로 시작하고 시간이 지남에 따라 데이터가 1TB로 증가하는 경우 이 서비스에 대해 스토리지 크기를 확장하려면 어떻게 해야 하나요?

Azure Cosmos DB는 수평 크기 조정을 사용하여 무제한 스토리지를 제공하도록 설계되었습니다. 이 서비스는 스토리지를 모니터링하고 효과적으로 늘릴 수 있습니다.

Table 제품용 API를 모니터링할 어떻게 할까요? 있나요?

테이블 메트릭 에 대한 API 창을 사용하여 요청 및 스토리지 사용량을 모니터링할 수 있습니다.

필요한 처리량은 어떻게 계산하나요?

용량 추정기를 사용하여 작업에 필요한 TableThroughput을 계산할 수 있습니다. 자세한 내용은 예상 요청 단위 및 데이터 스토리지를 참조 하세요. 일반적으로 엔터티를 JSON으로 표시하고 작업에 대한 숫자를 제공할 수 있습니다.

에뮬레이터와 함께 Table SDK용 API를 로컬로 사용할 수 있나요?

현재는 불가능합니다.

기존 애플리케이션이 API for Table에서 작동할 수 있나요?

예, 동일한 API가 지원됩니다.

Table용 API 기능을 사용하지 않으려면 기존 Azure Table Storage 애플리케이션을 SDK로 마이그레이션해야 하나요?

아니요, 모든 종류의 중단 없이 기존 Azure Table Storage 자산을 만들고 사용할 수 있습니다. 그러나 테이블용 API를 사용하지 않는 경우 자동 인덱스, 추가 일관성 옵션 또는 전역 배포를 활용할 수 없습니다.

둘 이상의 Azure 지역에 걸쳐 테이블용 API에서 데이터의 복제본(replica)tion을 추가할 어떻게 할까요? 있나요?

Azure Cosmos DB 포털의 전역 복제본(replica)tion 설정을 사용하여 애플리케이션에 적합한 지역을 추가할 수 있습니다. 전역적으로 분산된 애플리케이션을 개발하려면 낮은 읽기 대기 시간을 제공하기 위해 PreferredLocation 정보가 설정된 애플리케이션을 로컬 지역에 추가해야 합니다.

테이블용 API에서 계정에 대한 기본 쓰기 지역을 변경할 어떻게 할까요? 있나요?

Azure Cosmos DB의 전역 복제 포털 창에서 지역을 추가한 다음 필요한 지역에 장애 조치(Failover)를 추가할 수 있습니다. 지침은 다중 지역 Azure Cosmos DB 계정으로 개발을 참조 하세요.

데이터를 배포할 때 대기 시간이 짧은 기본 읽기 지역을 구성할 어떻게 할까요? 있나요?

로컬 위치에서 읽을 수 있도록 app.config 파일에서 PreferredLocation 키를 사용합니다. 기존 애플리케이션의 경우 LocationMode가 설정된 경우 Table용 API에서 오류를 throw합니다. Table용 API가 app.config 파일에서 이 정보를 선택하므로 해당 코드를 제거합니다.

API for Table의 일관성 수준에 대해 어떻게 생각해야 하나요?

Azure Cosmos DB는 일관성, 가용성 및 대기 시간 간에 적절한 장단 관계를 제공합니다. Azure Cosmos DB는 테이블 개발자를 위해 API에 5가지 일관성 수준을 제공하므로 테이블 수준에서 올바른 일관성 모델을 선택하고 데이터를 쿼리하는 동안 개별 요청을 수행할 수 있습니다. 클라이언트가 연결되면 일관성 수준을 지정할 수 있습니다. CreateCloudTableClient의 consistencyLevel 인수를 통해 수준을 변경할 수 있습니다.

테이블용 API는 제한된 부실 일관성을 기본값으로 사용하여 "사용자 고유의 쓰기 읽기"를 사용하여 대기 시간이 짧은 읽기를 제공합니다. 자세한 내용은 일관성 수준을 참조하세요.

기본적으로 Azure Table Storage는 지역 내에서 강력한 일관성을 제공하고 보조 위치에서 최종 일관성을 제공합니다.

Azure Cosmos DB for Table은 Azure Table Storage보다 더 많은 일관성 수준을 제공하나요?

예, Azure Cosmos DB의 분산 특성을 활용하는 방법에 대한 자세한 내용은 일관성 수준을 참조 하세요. 일관성 수준에 대한 보장이 제공되므로 안심하고 사용할 수 있습니다.

전역 배포를 사용하는 경우 데이터를 복제본(replica) 데 얼마나 걸리나요?

Azure Cosmos DB는 로컬 지역에서 지속적으로 데이터를 적용하고 몇 밀리초 이내에 즉시 다른 지역에 데이터를 밀어넣습니다. 이 복제는 데이터 센터의 RTT(왕복 시간)에만 종속됩니다. Azure Cosmos DB의 전역 분산 기능에 대한 자세한 내용은 Azure Cosmos DB: Azure에서 전역적으로 분산 데이터베이스 서비스를 참조하세요.

읽기 요청 일관성 수준을 변경할 수 있나요?

Azure Cosmos DB를 사용하면 컨테이너 수준에서 일관성 수준을 설정할 수 있습니다. .NET SDK를 사용하면 app.config 파일에서 TableConsistencyLevel 키에 대한 값을 제공하여 수준을 변경할 수 있습니다. 가능한 값은 강력, 제한된 부실, 세션, 일관된 접두사 및 최종 값입니다. 자세한 내용은 Azure Cosmos DB의 튜닝 가능한 데이터 일관성 수준을 참조하세요. 중요한 아이디어는 요청 일관성 수준을 테이블의 설정 이상으로 설정할 수 없다는 것입니다. 예를 들어 최종 테이블의 일관성 수준과 Strong의 요청 일관성 수준을 설정할 수 없습니다.

지역이 다운되면 테이블용 API에서 장애 조치(failover)를 어떻게 처리하나요?

테이블용 API는 Azure Cosmos DB의 전역적으로 분산된 플랫폼을 사용합니다. 애플리케이션이 데이터 센터 가동 중지 시간을 허용할 수 있도록 하려면 다중 지역 Azure Cosmos DB 계정으로 개발 중인 Azure Cosmos DB 포털 에서 계정에 대해 하나 이상의 지역을 사용하도록 설정합니다. 포털 다중 하위 지역 Azure Cosmos DB 계정을 사용하여 개발을 사용하여 하위 지역의 우선 순위를 설정할 수 있습니다.

계정에 대해 원하는 개수의 지역을 추가하고 장애 조치(Failover) 우선 순위를 지정하여 장애 조치할 수 있는 위치를 제어할 수 있습니다. 데이터베이스를 사용하려면 애플리케이션도 제공해야 합니다. 이렇게 하면 고객에게 가동 중지 시간이 발생하지 않습니다. 최신 .NET 클라이언트 SDK는 자동 호밍이지만 다른 SDK는 그렇지 않습니다. 즉, 다운된 지역을 감지하고 자동으로 새 지역으로 장애 조치(failover)할 수 있습니다.

테이블용 API가 백업에 사용하도록 설정되어 있나요?

예, Table용 API는 백업에 Azure Cosmos DB의 플랫폼을 사용합니다. 백업은 자동으로 이루어집니다. 자세한 내용은 Azure Cosmos DB를 사용하여 온라인 백업 및 복원을 참조 하세요.

테이블용 API는 기본적으로 엔터티의 모든 특성을 인덱싱하나요?

예, 엔터티의 모든 특성은 기본적으로 인덱싱됩니다. 자세한 내용은 Azure Cosmos DB: 인덱싱 정책을 참조하세요.

쿼리를 충족하기 위해 둘 이상의 인덱스를 만들 필요가 없나요?

예, 테이블용 Azure Cosmos DB는 스키마 정의 없이 모든 특성의 자동 인덱싱을 제공합니다. 이 자동화를 통해 개발자는 인덱스 만들기 및 관리보다는 애플리케이션에 집중할 수 있습니다. 자세한 내용은 Azure Cosmos DB: 인덱싱 정책을 참조하세요.

인덱싱 정책을 변경할 수 있나요?

예, 인덱스 정의를 제공하여 인덱싱 정책을 변경할 수 있습니다. 설정을 제대로 인코딩하고 이스케이프해야 합니다.

인덱싱 정책은 데이터 탐색기의 포털에서만 설정할 수 있으며 변경하려는 특정 테이블로 이동한 다음 크기 조정 및 설정 인덱싱 정책으로> 이동하여 원하는 변경을 한 다음 저장합니다.

플랫폼인 Azure Cosmos DB에는 정렬, 집계, 계층 구조 등 많은 기능이 있는데, 테이블용 API에 이러한 기능을 추가하시겠습니까?

테이블용 API는 Azure Table Storage와 동일한 쿼리 기능을 제공합니다. 또한 Azure Cosmos DB는 정렬, 집계, 지리 공간적 쿼리, 계층 구조 및 다양한 기본 제공 함수도 지원합니다. 자세한 내용은 SQL 쿼리를 참조 하세요.

Table용 API의 TableThroughput은 언제 변경해야 하나요?

다음 조건 중 하나가 적용되는 경우 TableThroughput을 변경해야 합니다.

  • ETL(추출, 변환 및 로드)을 수행하거나 짧은 시간 안에 수많은 데이터를 업로드하려고 합니다.
  • 컨테이너 또는 백 엔드의 컨테이너 집합에서 더 많은 처리량이 필요합니다. 예를 들어 사용되는 처리량이 프로비전된 처리량보다 많은 경우 제한됩니다. 자세한 내용은 Azure Cosmos DB 컨테이너에 대한 처리량 설정을 참조하세요.

Table 테이블에 대한 API의 처리량을 확장하거나 축소할 수 있나요?

예, Azure Cosmos DB 포털의 크기 조정 창을 사용하여 처리량을 조정할 수 있습니다. 자세한 내용은 처리량 설정을 참조하세요.

새로 프로비전된 테이블에 대해 기본 TableThroughput이 설정되나요?

예, app.config를 통해 TableThroughput을 재정의하지 않고 Azure Cosmos DB에서 미리 생성된 컨테이너를 사용하지 않는 경우 서비스는 처리량이 400인 테이블을 만듭니다.

Azure Table Storage 서비스의 기존 고객에 대한 가격 책정에 변동 사항이 있나요?

없음 기존 Azure Table Storage 고객의 가격은 변경되지 않습니다.

Table용 API에 대한 가격은 어떻게 계산됩니까?

가격은 할당된 TableThroughput에 따라 달라집니다.

Table 제품용 API의 테이블에 대한 속도 제한을 처리할 어떻게 할까요? 있나요?

요청 속도가 기본 컨테이너 또는 컨테이너 세트에 대해 프로비전된 처리량의 용량을 초과하면 오류가 발생하고, SDK에서 다시 시도 정책을 적용하여 호출을 다시 시도합니다.

Azure Cosmos DB의 API for Table 제품을 활용하기 위해 PartitionKey 및 RowKey 외에 처리량을 선택해야 하는 이유는 무엇인가요?

app.config 파일 또는 포털을 통해 컨테이너를 제공하지 않는 경우 Azure Cosmos DB는 컨테이너에 대한 기본 처리량을 설정합니다.

Azure Cosmos DB는 작업에 대한 상한을 사용하여 성능 및 대기 시간을 보장합니다. 이 보장은 엔진이 테넌트의 작업에 대한 거버넌스를 적용할 수 있는 경우에 가능합니다. TableThroughput을 설정하면 플랫폼이 이 용량을 예약하고 운영 성공을 보장하기 때문에 보장된 처리량 및 대기 시간을 얻을 수 있습니다.

처리량 사양을 사용하면 애플리케이션의 계절성을 활용하고 처리량 요구 사항을 충족하며 비용을 절감하도록 탄력적으로 변경할 수 있습니다.

Azure Table Storage는 데이터를 저장하는 데만 비용을 지불하고 거의 쿼리하지 않으므로 저렴합니다. 단일 트랜잭션을 수행하거나 아무것도 저장하지 않았더라도 Table용 Azure Cosmos DB 제품이 청구되는 것 같습니다. 설명해 주시겠습니까?

Azure Cosmos DB는 가용성, 대기 시간 및 처리량을 보장하는 전역적으로 분산된 SLA 기반 시스템으로 설계되었습니다. Azure Cosmos DB에서 처리량을 예약하는 경우 다른 시스템의 처리량과 달리 보장됩니다. Azure Cosmos DB는 보조 인덱스 및 글로벌 배포와 같이 고객이 요청한 더 많은 기능을 제공합니다.

Azure Table Storage에 데이터를 수집할 때 할당량이 가득 찼습니다." 알림(파티션이 가득 찼음을 나타낸다). 테이블용 API를 사용하면 이 메시지가 표시됩니다. 이 제품은 저를 제한하고 기존 애플리케이션을 변경하도록 강요하고 있습니까?

Azure Cosmos DB는 대기 시간, 처리량, 가용성 및 일관성을 보장하여 무제한 규모를 제공하는 SLA 기반 시스템입니다. 프리미엄 성능을 보장하려면 데이터 크기 및 인덱스가 관리 가능하고 확장 가능한지 확인합니다. 파티션 키당 엔터티 또는 항목 수에 대한 20GB 제한은 훌륭한 조회 및 쿼리 성능을 제공하는 것입니다. Azure Storage의 경우에도 애플리케이션의 크기를 잘 조정하려면 모든 정보를 하나의 파티션에 저장하고 쿼리하여 핫 파티션을 만들지 않는 것이 좋습니다.

따라서 Table용 API에는 PartitionKey 및 RowKey가 여전히 필요합니까?

예. 테이블용 API의 노출 영역은 Azure Table Storage SDK의 노출 영역과 유사하므로 파티션 키는 데이터를 배포하는 효율적인 방법을 제공합니다. 행 키는 해당 파티션 내에서 고유합니다. 행 키가 있어야 하며 표준 SDK와 같이 null일 수 없습니다. RowKey의 길이는 255바이트이고 PartitionKey의 길이는 1KB입니다.

테이블용 API에 대한 오류 메시지는 무엇인가요?

Azure Table Storage 및 Table용 Azure Cosmos DB는 동일한 SDK를 사용하므로 대부분의 오류는 동일합니다.

테이블용 API에서 여러 테이블을 하나씩 만들려고 할 때 제한이 발생하는 이유는 무엇인가요?

Azure Cosmos DB는 대기 시간, 처리량, 가용성 및 일관성을 보장하는 SLA 기반 시스템입니다. 프로비전된 시스템이므로 이러한 요구 사항을 보장하기 위해 리소스를 예약합니다. 따라서 빠른 테이블 만들기 속도가 감지되고 제한됩니다. 테이블 생성 속도를 살펴보고 분당 5개 미만으로 낮추는 것이 좋습니다. 테이블용 API는 프로비전된 시스템입니다. 프로비전하는 순간 비용을 지불하기 시작합니다.

SDK 또는 버그에 대한 피드백을 제공할 어떻게 할까요? 있나요?

다음과 같은 방법으로 피드백을 공유할 수 있습니다.