Table service 데이터 모델 이해
테이블 서비스는 테이블 형식으로 구조적 저장소를 제공합니다. 다음 섹션에서는 테이블 서비스 데이터 모델을 개괄적으로 설명합니다.
스토리지 계정
저장소 계정은 저장소 시스템 내에 있는 전역적으로 고유한 엔터티입니다. 스토리지 계정은 Table Service의 부모 네임스페이스이며 권한 부여의 기초입니다. 각 테이블에 고유한 이름을 지정하는 한 특정 저장소 계정 내에 테이블을 원하는 수만큼 만들 수 있습니다.
저장소 계정을 항상 요청 URI에 지정해야 합니다. 테이블 서비스에 액세스하기 위한 기본 URI는 다음과 같습니다.
https://myaccount.table.core.windows.net
테이블, 엔터티 및 속성
테이블에는 데이터가 엔터티 모음으로 저장됩니다. 엔터티는 행과 비슷합니다. 엔터티에는 기본 키와 속성 집합이 있습니다. 속성은 이름-형식화된 값 쌍으로, 열과 비슷합니다.
테이블 서비스는 테이블에 스키마를 적용하지 않으므로 동일한 테이블에 있는 두 엔터티의 속성 집합이 서로 다를 수 있습니다. 개발자는 클라이언트 쪽에서 스키마를 적용할 수 있습니다. 테이블에는 엔터티를 원하는 수만큼 포함할 수 있습니다.
테이블 이름
테이블 이름은 다음 규칙을 따라야 합니다.
테이블 이름은 계정 내에서 고유해야 합니다.
테이블 이름에는 영숫자 문자만 포함할 수 있습니다.
테이블 이름은 숫자 문자로 시작할 수 없습니다.
테이블 이름은 대/소문자를 구분하지 않습니다.
테이블 이름은 3에서 63자여야 합니다.
"tables"를 비롯한 일부 테이블 이름은 예약되어 있습니다. 예약된 테이블 이름을 사용하여 테이블을 만들려고 하면 오류 코드 404(잘못된 요청)가 반환됩니다.
이러한 규칙은 "^[A-Za-z][A-Za-z0-9]{2,62}$" 정규식으로도 설명됩니다.
테이블 이름의 대/소문자는 만들어진 상태로 유지되지만 사용 시에는 대/소문자가 구분되지 않습니다.
속성 이름
속성 이름은 대/소문자를 구분하며 255자까지 허용됩니다. 속성 이름은 C# 식별자에 대한 명명 규칙을 따라야 합니다.
참고
일부 C# 식별자는 XML 사양에 따라 유효하지 않습니다. 속성 이름은 테이블 서비스에 대한 요청에서 XML 페이로드를 통해 전송되기 때문에 이러한 식별자를 속성 이름에 사용하면 안 됩니다.
중요
속성 이름은 URL을 통해 테이블 서비스로 전달됩니다. 특정 문자는 UTF-8(기본) 또는 MBCS를 사용하여 퍼센트 인코딩되어야 URL에 표시될 수 있습니다. 이 인코딩은 Azure Storage 클라이언트 라이브러리를 사용할 때 자동으로 발생합니다. 그러나 인코딩해도 URL 경로에 적합하지 않은 문자가 있습니다. 이러한 문자는 속성 이름에 표시될 수 없습니다. \uE000과 같은 코드 포인트는 NTFS 파일 이름에는 적합하지만 유효한 유니코드 문자가 아니므로 사용할 수 없습니다. 제어 문자(0x00-0x1F, \u0081 등)와 같은 일부 ASCII 또는 유니코드 문자도 허용되지 않습니다. HTTP/1.1에서 유니코드 문자열에 적용되는 규칙은 다음을 참조하세요.
참고
2009-04-14 버전부터 테이블 서비스에서 속성 이름에 더 이상 대시(-) 문자를 포함할 수 없습니다.
속성 제한 사항
다음 섹션에 설명된 3개의 시스템 속성을 포함하여 최대 255개의 속성을 엔터티에 포함할 수 있습니다. 따라서 사용자는 3개의 시스템 속성을 제외하고 252개의 사용자 지정 속성을 포함할 수 있습니다. 엔터티 속성에 있는 모든 데이터의 결합된 크기는 1MiB를 초과할 수 없습니다.
시스템 속성
엔터티에는 항상 다음 시스템 속성이 있습니다.
PartitionKey
속성RowKey
속성Timestamp
속성
이러한 시스템 속성은 테이블의 모든 엔터티에 자동으로 포함됩니다. 이러한 속성의 이름은 예약되어 있으며 변경할 수 없습니다.
PartitionKey
및 RowKey
의 값은 개발자가 삽입하고 업데이트해야 하며, 수정할 수 없는 Timestamp
의 값은 서버에서 관리됩니다.
키 필드에서 허용되지 않는 문자
다음 문자는 PartitionKey
및 RowKey
속성의 값에 사용할 수 없습니다.
슬래시(/) 문자
백슬래시(\) 문자
숫자 기호(#) 문자
물음표(?) 문자
다음을 포함한 U+0000에서 U+001F까지의 제어 문자:
- 가로 탭(\t) 문자
- 줄 바꿈(\n) 문자
- 캐리지 리턴(\r) 문자
U+007F에서 U+009F까지의 제어 문자
PartitionKey 속성
테이블은 저장소 노드에서 부하 분산을 지원하기 위해 분할으로 분할됩니다. 테이블의 엔터티는 분할별로 구성됩니다. 분할은 동일한 분할 키 값을 가지는 일련의 엔터티입니다. 분할 키는 PartitionKey
속성으로 지정되며, 특정 테이블 내에서 분할에 대한 고유 식별자로 사용됩니다. 분할 키는 엔터티 기본 키의 첫 번째 부분을 구성합니다. 파티션 키는 최대 1024자 크기의 문자열 값일 수 있습니다.
모든 삽입, 업데이트 및 삭제 작업에 PartitionKey
속성이 포함되어야 합니다.
RowKey 속성
기본 키의 두 번째 부분은 RowKey
속성으로 지정되는 행 키입니다. 행 키는 주어진 파티션 내 엔터티의 고유 식별자입니다.
PartitionKey
및 RowKey
는 함께 테이블 내의 모든 엔터티를 고유하게 식별합니다.
행 키는 최대 1024자까지 사용할 수 있는 문자열 값입니다.
모든 삽입, 업데이트 및 삭제 작업에 RowKey
속성이 포함되어야 합니다.
Timestamp 속성
Timestamp
속성은 엔터티가 마지막으로 수정된 시간을 기록하기 위해 서버 쪽에서 유지 관리되는 DateTime
값입니다. 테이블 서비스는 Timestamp
속성을 사용하여 내부적으로 낙관적 동시성을 제공합니다. 엔터티의 Timestamp
속성 값은 엔터티가 수정될 때마다 진행됩니다. 이 속성은 삽입 또는 업데이트 작업에 대해서는 설정되지 않아야 합니다. 값이 무시됩니다.
속성은 Timestamp
허용되는 ISO 8601 UTC 형식 중 하나로 표현되어야 합니다. 허용되는 UTC 형식에 대한 자세한 내용은 DateTime 값 서식 지정을 참조하세요.
속성 형식
Table Service는 OData 프로토콜 사양에 정의된 데이터 형식의 하위 집합을 지원합니다. 다음 표에서는 테이블 서비스에 대해 지원되는 속성 유형을 보여 줍니다.
OData 데이터 형식 | 공용 언어 런타임 유형 | 세부 정보 |
---|---|---|
Edm.Binary |
byte[] |
최대 64KiB 크기의 바이트 배열입니다. |
Edm.Boolean |
bool |
부울 값입니다. |
Edm.DateTime |
DateTime |
UTC(협정 세계시)로 표현되는 64비트 값입니다. 지원되는 DateTime 범위는 서기 1601년 1월 1일 자정(UTC)에 시작되어 범위는 9999년 12월 31일에 끝납니다. 자세한 내용은 DateTime 값 서식 지정을 참조하세요. |
Edm.Double |
double |
64비트 부동 소수점 값입니다. |
Edm.Guid |
Guid |
전역적으로 고유한 128 비트 식별자입니다. |
Edm.Int32 |
Int32 또는 int |
32비트 정수입니다. |
Edm.Int64 |
Int64 또는 long |
64비트 정수입니다. |
Edm.String |
String |
UTF-16으로 인코딩된 값입니다. 문자열 값의 크기는 최대 64KiB입니다. 지원되는 최대 문자 수는 약 32K 이하입니다. |
유형을 지정하지 않으면 기본적으로 속성이 String
유형으로 만들어집니다. 속성을 명시적으로 입력하려면 엔터티 삽입 또는 엔터티 업데이트 작업에 적절한 OData 데이터 형식을 사용하여 해당 데이터 형식 을 지정합니다 . 자세한 내용은 엔터티 삽입 및 업데이트를 참조하세요.
Table Service는 속성에 대한 값을 유지 null
하지 않습니다. 엔터티를 쿼리할 때 위의 속성 형식은 모두 null을 허용하지 않습니다. 엔터티를 작성할 때 위의 속성 형식은 모두 null 허용되며 값이 있는 null
모든 속성은 페이로드에 해당 속성이 포함되지 않은 것처럼 처리됩니다.
쿼리 요청 URI의 다양한 속성 형식을 필터링하는 방법을 보여 주는 예제는 테이블 및 엔터티 쿼리를 참조하세요.