항목 키 만들기 및 사용

Datastore의 각 항목에는 항목을 고유하게 식별하는 가 있습니다. 키는 다음 구성요소로 구성됩니다.

  • 멀티테넌시를 허용하는 항목의 네임스페이스
  • Datastore 쿼리 목적으로 항목을 분류하는 항목의 종류
  • Datastore 계층 구조에서 항목 위치를 나타내는 선택적 상위 경로
  • 다음 중 하나에 해당하는 개별 항목의 식별자

    • 키 이름 문자열
    • 정수 숫자 ID

식별자는 항목 키의 일부이므로 항목과 영구 연결되며 변경될 수 없습니다. 다음 2가지 방법 중 하나로 식별자를 할당합니다.

  • 항목의 고유한 키 이름 문자열을 지정합니다.
  • Datastore에서 항목에 정수 숫자 ID를 자동으로 할당하도록 합니다.

항목의 키 이름 지정

항목에 키 이름을 할당하려면 항목을 만들 때 생성자에 대한 두 번째 인수로 이름을 제공합니다.

Entity employee = new Entity("Employee", "asalieri");

Datastore에서 숫자 ID를 자동으로 할당하도록 하려면 다음 인수를 생략합니다.

Entity employee = new Entity("Employee");

식별자 할당

2가지 자동 ID 정책을 사용하여 자동 ID를 생성하도록 Datastore를 구성할 수 있습니다.

  • default 정책은 거의 균일하게 분포된 미사용 ID의 임의 시퀀스를 생성합니다. 각 ID는 최대 16자리 숫자입니다.
  • legacy 정책은 연속되지 않는 더 작은 정수 ID 시퀀스를 만듭니다.

사용자에게 항목 ID를 표시하거나 항목 ID의 순서를 결정하려는 경우 수동으로 할당하는 것이 좋습니다.

상위 경로 사용

Cloud Datastore의 항목은 파일 시스템의 디렉토리 구조와 유사한 계층 구조 형식의 공간을 형성합니다. 항목을 만들 때 선택적으로 다른 항목을 상위 요소로 지정할 수 있으며, 새 항목은 상위 항목의 하위 요소가 됩니다. 파일 시스템과 달리 상위 항목이 실제로 존재할 필요는 없습니다. 상위 요소가 없는 항목은 루트 항목입니다. 항목과 상위 요소 간의 연결은 영구적이며 항목이 생성되면 변경할 수 없습니다. Cloud Datastore는 상위 요소가 동일한 2개의 항목 또는 2개의 루트 항목(상위 요소가 없는 항목)에 동일한 숫자 ID를 할당하지 않습니다.

항목의 상위 요소, 상위 요소의 상위 요소 등은 재귀적으로 해당 항목의 상위가 되고, 항목의 하위 요소, 하위 요소의 하위 요소 등은 해당 항목의 하위가 됩니다. 루트 항목과 그 하위에 있는 모든 항목은 동일한 항목 그룹에 속합니다. 루트 항목에서 시작하여 상위 요소에서 하위 요소로 진행되고 지정된 항목까지 이어지는 항목의 시퀀스를 해당 항목의 상위 경로라고 합니다. 항목을 식별하는 전체 키는 상위 경로를 지정하고 항목 자체로 종료되는 종류-식별자 쌍의 시퀀스로 구성됩니다.

[Person:GreatGrandpa, Person:Grandpa, Person:Dad, Person:Me]

루트 항목의 경우 상위 경로는 비어 있으며 키는 항목의 고유한 종류 및 식별자로만 구성됩니다.

[Person:GreatGrandpa]

이 개념은 다음 다이어그램에서 설명합니다.

항목 그룹에서 루트 항목과 하위 항목의 관계 표시

항목의 상위를 지정하려면 하위 항목 생성 시 상위 항목의 키를 Entity() 생성자에 대한 인수로 제공합니다. 상위 항목의 getKey() 메서드를 호출하여 키를 가져올 수 있습니다.

Entity employee = new Entity("Employee");
datastore.put(employee);

Entity address = new Entity("Address", employee.getKey());
datastore.put(address);

새 항목에도 키 이름이 포함된 경우 Entity() 생성자에 대한 두 번째 인수로 키 이름을 제공하고 상위 항목의 키를 세 번째 인수로 제공합니다.

Entity address = new Entity("Address", "addr1", employee.getKey());

키 생성

애플리케이션은 KeyFactory 클래스를 사용하여 항목의 종류 및 식별자와 같은 알려진 구성요소의 항목에 대한 Key 객체를 만들 수 있습니다. 항목에 상위 요소가 없으면 종류 및 식별자(키 이름 문자열 또는 숫자 ID)를 정적 메서드 KeyFactory.createKey()에 전달하여 키를 만듭니다. 다음 예시에서는 키 이름 "GreatGrandpa" 또는 숫자 ID 74219를 사용하여 Person 종류 항목의 키를 만듭니다.

Key k1 = KeyFactory.createKey("Person", "GreatGrandpa");
Key k2 = KeyFactory.createKey("Person", 74219);

키에 경로 구성요소가 포함된 경우 도우미 클래스 KeyFactory.Builder를 사용하여 경로를 빌드할 수 있습니다. 이 클래스의 addChild 메서드는 경로에 단일 항목을 추가하고 빌더 자체를 반환하므로, 루트 항목을 시작으로 여러 개의 호출을 서로 연결하여 한 번에 한 항목씩 경로를 빌드할 수 있습니다. 전체 경로를 빌드한 후에는 getKey를 호출하여 결과 키를 검색합니다.

Key k =
    new KeyFactory.Builder("Person", "GreatGrandpa")
        .addChild("Person", "Grandpa")
        .addChild("Person", "Dad")
        .addChild("Person", "Me")
        .getKey();

또한 KeyFactory 클래스에는 키와 해당 문자열 표현 사이의 전환을 위한 정적 메서드 keyToStringstringToKey가 포함됩니다.

String personKeyStr = KeyFactory.keyToString(k);

// Some time later (for example, after using personKeyStr in a link).
Key personKey = KeyFactory.stringToKey(personKeyStr);
Entity person = datastore.get(personKey);

키의 문자열 표현은 '웹에 적합한' 형식입니다. 여기에는 HTML 또는 URL에서 특수하게 고려되는 문자가 포함되어 있지 않습니다.