0

내 REST 백엔드에 google-datastore를 사용하고 데이터베이스에 objectify를 사용하여 데이터베이스에 액세스하고 있습니다.데이터 저장소에서 하위 엔티티의 속성을 사용하여 상위 엔티티를 필터링하는 방법

단위를 구성 요소 또는 조립 된 단위로 저장할 수있는 단위 엔티티를 만들고 싶습니다. 기본적으로 조립 된 단위는 여러 구성 요소로 이루어져 있으며 자체 속성도 있습니다. 조립 된 유닛에는 여러 유형이 있으며 구성 요소에는 여러 유형이있을 수 있습니다. 여기

public class UnitEntity { 
Long unitId; 
String serialNumber; 
String state; 
String unitType; 
Long parentId;// -> this would be null for all assembled units and in case of components, if they are part of any assembled unit, it will be the Id of the assembled unit (This is added so that I can list all components of a particular assembled unit) 
UnitParameters unitParameters; 
} 

UnitParameters 등 엔티티 클래스가 될 일이 연장 상이한 클래스 들일 것 "UNITTYPE"의 값에 기초하여, 즉, 유닛 타입에 특정한 속성을 포함하는 다형성 클래스 것 "UnitParameters".

하나의 구성 요소 (예 : component1, 즉 unitType = component1)에 modelNumber라는 속성이 있다고 가정 해 보겠습니다. 이 속성은 unitType = component1 인 모든 엔터티의 unitParameters에 저장됩니다.

이제 unitType = assembledUnit1이고 modelNumber가 2.0 인 하위 구성 요소 1이있는 단위를 나열 할 수 있습니다.

(I 쉽게 modelNumber는 2.0 형 컴포넌트 1의 목록 단위를 얻을 수 있지만, 나는 또한 부모 엔티티 얻을 수 있어야합니다) 여기 그래서 기본적으로

나는 필터링에 의해 부모 개체를 얻기 위해 노력하고 있어요을 아이들의 속성. 이것이 데이터 저장소에서 가능하고 객체화할 수 있는지 알고 싶습니다. 이 기능을 수행 할 수있는 방법이 있습니까?

업데이트 - 후속 질문을 @stickfigure으로 답변에 따라 :

내 사용 사례에 대한 (MySQL을 기반으로) 구글 클라우드 SQL로 갈 경우, 어떻게 내 데이터를 모델링한다 ?

처음에는 각 unitType에 대한 테이블을 가지고 있다고 생각했습니다. unitTypes - assembledUnit1, assembledUnit2 및 component1의 3 가지 유형이 있다고 가정 해 보겠습니다. 이제 각 장치의 세부 정보를 나열하는 API를 원한다면 어떻게 클라우드 SQL을 사용하여이 작업을 수행 할 수 있습니까?

모든 엔티티가 동일한 "종류"였기 때문에 데이터 저장소로 수행 할 수있는 작업입니다.

조립 된 unitUnit1, assembledUnit2 등의 모든 단위를 나열하기 위해 별도의 API를 사용할 수는 있지만 모든 단위를 나열 할 수있는 단일 API를 어떻게 가질 수 있습니까?

누군가가 REST API GET/units/{unitId}을 호출하면 올바른 것으로 보이지 않는 각 테이블의 unitId를 확인해야한다고 생각합니다.

이 문제를 해결할 수있는 한 가지 방법은 모든 unitTypes의 열에 대한 상위 집합이 될 "단위"라는 하나의 테이블을 만드는 것입니다. 그러나 각 행에 대해 빈 열이 많을 것이고 새 unitType이 추가되면 스키마를 변경해야하기 때문에 이것이 좋은 설계 방법이라고 생각하지 않습니다.

답변

1

데이터 저장소는 조인을 수행하지 않습니다. 따라서 두 가지 옵션, 즉 1) 페칭을 통해 자신을 결합하거나 2) 부모 데이터에 일부 자식 데이터를 비정규 화하고 거기에 색인을 붙일 수 있습니다. 어떤 전략이 가장 효과적 일지는 데이터의 모양과 성능/비용 고려 사항에 따라 다릅니다.

"검색 API 또는 RDBMS와 같은 다른 종류의 데이터베이스에 일부 데이터의 외부 색인을 저장하는"세 번째 옵션이 추가되어야합니다.

이것은 항상 만족스러운 대답은 아닙니다. RDBMS에서 조인과 집계를 수행하는 기능은 대단히 유용합니다. 겸손한 크기/트래픽/신뢰성 요구 사항이있는 관계형 데이터가 높은 경우 Cloud SQL과 같은 것을 사용하는 것이 좋습니다.

+0

응답 해 주셔서 감사합니다. 질문에 업데이트 된 답변을 기반으로 몇 가지 추가 질문이 있습니다. –