Datastore 모드의 Firestore(Datastore)는 다양한 속성 값 데이터 유형을 지원합니다. 여기에는 다음이 포함됩니다.
- 정수
- 부동 소수점 수
- 문자열
- 날짜
- 바이너리 데이터
전체 유형 목록은 속성 및 값 유형을 참조하세요.
속성 및 값 유형
항목과 연관된 데이터 값은 하나 이상의 속성으로 구성됩니다. 각 속성에는 이름과 하나 이상의 값이 있습니다. 속성에는 둘 이상의 유형 값이 있을 수 있으며, 두 개의 항목에 동일한 속성의 서로 다른 유형 값이 있을 수 있습니다. 속성은 색인 생성되거나 색인 생성되지 않을 수 있으며, 속성 P를 기준으로 정렬 또는 필터링하는 쿼리는 P가 색인 생성되지 않은 항목을 무시합니다. 항목 하나에 포함될 수 있는 색인 생성된 속성은 최대 20,000개입니다.
값 유형 | Java 유형 | 정렬 순서 | 참고 |
---|---|---|---|
정수 | short int long java.lang.Short java.lang.Integer java.lang.Long |
숫자 | 긴 정수로 저장된 후 필드 유형으로 변환됨 값이 범위를 벗어나면 오버플로 발생 |
부동 소수점 수 | float double java.lang.Float java.lang.Double |
숫자 | 64비트 배정밀도, IEEE 754 |
불리언 | boolean java.lang.Boolean |
false <true |
|
텍스트 문자열(short) | java.lang.String |
유니코드 | 최대 1,500 바이트 값이 1,500바이트보다 크면 IllegalArgumentException 발생 |
텍스트 문자열(long) | com.google.appengine.api.datastore.Text |
없음 | 최대 1MB 색인 생성되지 않음 |
바이트 문자열(short) | com.google.appengine.api.datastore.ShortBlob |
바이트순 | 최대 1,500 바이트 값이 1,500바이트보다 길면 IllegalArgumentException 발생 |
바이트 문자열(long) | com.google.appengine.api.datastore.Blob |
없음 | 최대 1MB 색인 생성되지 않음 |
날짜 및 시간 | java.util.Date |
시간순 | |
지리적 지점 | com.google.appengine.api.datastore.GeoPt |
위도순 우선 적용 후 경도순 |
|
우편 주소 | com.google.appengine.api.datastore.PostalAddress |
유니코드 | |
전화번호 | com.google.appengine.api.datastore.PhoneNumber |
유니코드 | |
이메일 주소 | com.google.appengine.api.datastore.Email |
유니코드 | |
Google 계정 사용자 | com.google.appengine.api.users.User |
이메일 주소 (유니코드 순서) |
|
채팅 메시지 핸들 | com.google.appengine.api.datastore.IMHandle |
유니코드 | |
링크 | com.google.appengine.api.datastore.Link |
유니코드 | |
카테고리 | com.google.appengine.api.datastore.Category |
유니코드 | |
평점 | com.google.appengine.api.datastore.Rating |
숫자 | |
Datastore 키 | com.google.appengine.api.datastore.Key 또는 참조된 객체(하위 항목) |
경로 요소 기준 (종류, 식별자, 종류, 식별자...) |
최대 1,500 바이트 값이 1,500바이트보다 길면 IllegalArgumentException 발생 |
Blobstore 키 | com.google.appengine.api.blobstore.BlobKey |
바이트순 | |
삽입 항목 | com.google.appengine.api.datastore.EmbeddedEntity |
없음 | 색인이 생성되지 않음 |
Null | null |
없음 |
중요: users.User
는 고유 ID 및 이메일 주소를 포함하므로 속성 값으로 저장하지 않는 것이 좋습니다. 사용자가 자신의 이메일 주소를 변경하고 이전에 저장한 user.User
값과 새 user.User
값을 비교하면 서로 일치하지 않게 됩니다. 대신 User
사용자 ID 값을 사용자의 안정적인 고유 식별자로 사용하세요.
텍스트 문자열 및 인코딩되지 않은 바이너리 데이터(바이트 문자열)에 대해 Datastore는 두 가지 값 유형을 지원합니다.
- short 문자열(최대 1500바이트)은 색인이 생성되고 쿼리 필터 조건 및 정렬 순서에 사용될 수 있습니다.
- long 문자열(최대 1MB)은 색인이 생성되지 않으며 쿼리 필터 및 정렬 순서에 사용될 수 없습니다.
Blob
으로 지정되지만 이 유형은 Blobstore API에 사용되는 blob과는 관련이 없습니다.
쿼리에 혼합 유형 값이 있는 필드가 있으면 Datastore는 내부 표시를 기준으로 확정된 순서를 사용합니다.
- Null 값
- 고정 소수점 수
- 정수
- 날짜 및 시간
- 평점
- 부울 값
- 바이트 시퀀스
- 바이트 문자열
- 유니코드 문자열
- Blobstore 키
- 부동 소수점 수
- 지리적 지점
- Google 계정 사용자
- Datastore 키
긴 텍스트 문자열, 긴 바이트 문자열, 삽입 항목은 색인이 생성되지 않기 때문에 순서가 정의되지 않습니다.
반복 속성
단일 속성 내에 여러 개의 값을 저장할 수 있습니다.
삽입 항목
경우에 따라서는 항목을 다른 항목의 속성으로 삽입하는 것이 편리할 수 있습니다. 이 방식은 예를 들어 항목 내에 속성 값의 계층 구조를 만들 때 유용합니다. 이를 위해 Java 클래스 EmbeddedEntity
를 사용할 수 있습니다.
삽입 항목의 속성은 색인 생성되지 않으며 쿼리에 사용할 수 없습니다. 삽입 항목에 키를 연결할 수도 있지만 일반 항목과 달리 키는 필수적이지 않으며 키가 있더라도 키를 사용하여 항목을 검색할 수 없습니다.
삽입 항목의 속성에 수동으로 값을 채우는 대신 setPropertiesFrom()
메서드를 사용하여 기존 항목에서 복사할 수 있습니다.
이후에 동일한 메서드를 사용하여 삽입 항목에서 원래 항목을 복구할 수 있습니다.
빈 목록 사용
지금까지 Datastore에는 빈 목록을 나타내는 속성 표현이 없었습니다. Java SDK는 임시방편으로 빈 컬렉션을 null 값으로 저장하므로 null 값과 빈 목록을 구분할 수 있는 방법이 없습니다. 이 방식은 하위 호환성을 위해 기본 동작으로 계속 유지되며, 다음과 같이 정리할 수 있습니다.
- null 속성이 Datastore에 null로 기록됩니다.
- 빈 컬렉션이 Datastore에 null로 기록됩니다.
- null은 Datastore에서 null로 읽습니다.
- 빈 컬렉션은 null로 읽습니다.
그러나 기본 동작을 변경하면 Appengine Datastore Java SDK에서 빈 목록 스토리지를 지원합니다. 애플리케이션의 기본 동작을 변경할 때의 영향을 고려한 후 빈 목록 지원을 설정하는 것이 좋습니다.
빈 목록을 사용할 수 있도록 기본 동작을 변경하려면 앱을 초기화하는 동안 다음과 같이 DATASTORE_EMPTY_LIST_SUPPORT 속성을 설정합니다.
System.setProperty(DatastoreServiceConfig.DATASTORE_EMPTY_LIST_SUPPORT, Boolean.TRUE.toString());
위와 같이 이 속성을 true
로 설정하면 다음과 같은 결과가 나타납니다.
- null 속성이 Datastore에 null로 기록됩니다.
- 빈 컬렉션은 Datastore에 빈 목록으로 기록됩니다.
- null은 Datastore에서 null로 읽습니다.
- Datastore에서 읽을 때 빈 목록이 빈 컬렉션으로 반환됩니다.