항목 속성 참조

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)은 색인이 생성되지 않으며 쿼리 필터 및 정렬 순서에 사용될 수 없습니다.
참고: 긴 바이트 문자열 유형 이름은 Datastore API에서 Blob으로 지정되지만 이 유형은 Blobstore API에 사용되는 blob과는 관련이 없습니다.

쿼리에 혼합 유형 값이 있는 필드가 있으면 Datastore는 내부 표시를 기준으로 확정된 순서를 사용합니다.

  1. Null 값
  2. 고정 소수점 수
    • 정수
    • 날짜 및 시간
    • 평점
  3. 부울 값
  4. 바이트 시퀀스
    • 바이트 문자열
    • 유니코드 문자열
    • Blobstore 키
  5. 부동 소수점 수
  6. 지리적 지점
  7. Google 계정 사용자
  8. Datastore 키

긴 텍스트 문자열, 긴 바이트 문자열, 삽입 항목은 색인이 생성되지 않기 때문에 순서가 정의되지 않습니다.

반복 속성

단일 속성 내에 여러 개의 값을 저장할 수 있습니다.

Entity employee = new Entity("Employee");
ArrayList<String> favoriteFruit = new ArrayList<String>();
favoriteFruit.add("Pear");
favoriteFruit.add("Apple");
employee.setProperty("favoriteFruit", favoriteFruit);
datastore.put(employee);

// Sometime later
employee = datastore.get(employee.getKey());
@SuppressWarnings("unchecked") // Cast can't verify generic type.
    ArrayList<String> retrievedFruits = (ArrayList<String>) employee
    .getProperty("favoriteFruit");

삽입 항목

경우에 따라서는 항목을 다른 항목의 속성으로 삽입하는 것이 편리할 수 있습니다. 이 방식은 예를 들어 항목 내에 속성 값의 계층 구조를 만들 때 유용합니다. 이를 위해 Java 클래스 EmbeddedEntity를 사용할 수 있습니다.

// Entity employee = ...;
EmbeddedEntity embeddedContactInfo = new EmbeddedEntity();

embeddedContactInfo.setProperty("homeAddress", "123 Fake St, Made, UP 45678");
embeddedContactInfo.setProperty("phoneNumber", "555-555-5555");
embeddedContactInfo.setProperty("emailAddress", "test@example.com");

employee.setProperty("contactInfo", embeddedContactInfo);

삽입 항목의 속성은 색인 생성되지 않으며 쿼리에 사용할 수 없습니다. 삽입 항목에 키를 연결할 수도 있지만 일반 항목과 달리 키는 필수적이지 않으며 키가 있더라도 키를 사용하여 항목을 검색할 수 없습니다.

삽입 항목의 속성에 수동으로 값을 채우는 대신 setPropertiesFrom() 메서드를 사용하여 기존 항목에서 복사할 수 있습니다.

// Entity employee = ...;
// Entity contactInfo = ...;
EmbeddedEntity embeddedContactInfo = new EmbeddedEntity();

embeddedContactInfo.setKey(contactInfo.getKey()); // Optional, used so we can recover original.
embeddedContactInfo.setPropertiesFrom(contactInfo);

employee.setProperty("contactInfo", embeddedContactInfo);

이후에 동일한 메서드를 사용하여 삽입 항목에서 원래 항목을 복구할 수 있습니다.

Entity employee = datastore.get(employeeKey);
EmbeddedEntity embeddedContactInfo = (EmbeddedEntity) employee.getProperty("contactInfo");

Key infoKey = embeddedContactInfo.getKey();
Entity contactInfo = new Entity(infoKey);
contactInfo.setPropertiesFrom(embeddedContactInfo);

빈 목록 사용

지금까지 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에서 읽을 때 빈 목록이 빈 컬렉션으로 반환됩니다.