문제

Google 앱 응용 프로그램에서 사용자가 여러 계약을 구매할 때마다 이러한 이벤트가 실행됩니다 (명확성을 위해 단순화).

  • user.cash가 감소했습니다
  • user.contracts는 숫자로 증가합니다
  • Contracts.current_Price가 업데이트되었습니다.
  • 시장 .no_of_transactions는 1만큼 증가합니다.

RDM에서는 이들이 동일한 거래 내에 배치됩니다. Google Datastore는 둘 이상의 모델의 엔티티가 동일한 거래에 참여할 수 없다고 생각합니다.

이 문제에 대한 올바른 접근법은 무엇입니까? 쓰기가 실패하면 앞의 모든 쓰기가 롤백되도록하려면 어떻게해야합니까?

편집 : 나는 분명히 엔티티 그룹을 놓쳤다. 이제 어떻게 사용되는지에 대한 추가 정보에 감사드립니다. 명확한 또 다른 요점은 Google은 "트랜잭션에 필요할 때만 엔터티 그룹 만 사용합니다. 엔티티 간의 다른 관계의 경우 쿼리에 사용할 수있는 참고 자료 속성과 키 값을 사용하십시오". 참조 속성 (쿼리가 필요하기 때문에)과 부모-자식 관계 (거래를 위해)를 모두 정의해야한다는 것을 의미합니까?

편집 2 : 마지막으로, 두 부모 사이에 N-to-N 관계를 확립하기 위해 단체가 만들어진 경우 실체에 대해 두 부모를 어떻게 정의합니까?

도움이 되었습니까?

해결책

통행 연구 후, 나는 일부 Google 사람들의 도움으로 단일 엔터티 그룹 제한에 대한 솔루션을 제공하는 분산 거래 계층이 사용자 랜드에서 개발되었음을 발견했습니다. 그러나 지금까지는 출시되지 않았으며 Java에서만 사용할 수 있습니다.

다른 팁

The에서 인용문을 추가하겠습니다 DataStore 문서:

엔티티 그룹의 경험적 규칙은 단일 사용자의 데이터의 크기에 관한 것이어야한다는 것입니다.

의사 뿌리 엔티티를 만들고이 모든 것을 아래에 넣을 수 있습니다. 그런 다음 거래에서 모든 것을 실행합니다.

Shanyu, 당신은 분산 거래 계층을 언급하여 단일 트랜잭션에서 임의로 많은 엔티티 그룹을 운영 할 수 있습니다. 실제로출시되었습니다, 그것은 매우 큰 소리로 광고되지 않았습니다. 그것은 Daniel Wilkerson과 Erick Armbrust가 설계하고 작성했으며, 일부 컨설팅은 저의 컨설팅입니다. 댄은 그것을 설명합니다 이 대화.

Nick Johnson도 설명했습니다엔티티 그룹에서 "전송"유형 작업을 수행하는 방법, 당신이 설명하는 것과 비슷합니다. 그것은 타피오카 오르름만큼 일반적인 목적이 아니지만 더 간단하고 가벼운 무게입니다.

관련 내장 기능이 있으며 거래 작업, 이를 통해 데이터 스토어 트랜잭션 내에서 큐에 작업을 추가 할 수 있으므로 트랜잭션이 성공적으로 저지르는 경우에만 추가됩니다. 이 작업은 다른 엔티티 그룹의 거래를 포함하여 더 많은 데이터 저장소 작업을 수행 할 수 있습니다. Dan과 Erick의 솔루션만큼 강하지는 않지만 엔티티 그룹간에 최종 일관성을 보장합니다. 이는 추가 오버 헤드없이 많은 사용 사례에 충분합니다.

귀하의 질문에 대한 응답으로 : 1) 참조 속성과 부모/자식 관계 (즉, 엔티티 그룹)를 모두 사용할 필요는 없습니다. 이 가이드 라인은 엔티티 그룹이 엔티티 그룹 별 직렬화되기 때문에 엔티티 그룹은 데이터 스토어 쓰기 처리량을 제한한다는 것을 의미합니다. 조상 쿼리를 위해 데이터를 엔티티 그룹으로 구조화하는 것을 고려하는 경우 알고 있어야합니다.

2) 실체는 한 명 이상의 부모를 가질 수 없습니다. 다수의 관계를 모델링하려면 일반적으로 참조 속성 (예 : 키)의 ListProperty를 사용해야합니다. 보다 이 기사 그리고 이 대화 자세한 내용은.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top