2016-11-03 7 views
1

Google Cloud Client 라이브러리에는 많은 내장 기능이 있지만 해당 ID를 기반으로 엔티티 존재 여부를 쿼리 할 때 사용할 수있는 항목이 없습니다. . 내가 아는 바로는 엔터티 쿼리보다 키 쿼리를 만드는 것이 훨씬 더 효율적입니다. 더 나은 될 것 get(Key key) 기능을 사용하여 가능하면 자바 응용 프로그램 내에서GQL 쿼리 존재 여부 : 쿼리 대 엔티티 쿼리 비교

SELECT __key__ FROM User WHERE __key__ = Key(User, 1) 

. 난 그냥 부모 ID와 조상의 존재를 쿼리 할 때 세 가지를보다 효율적으로 될 내 법인뿐만 아니라 조상을 가지고 인스턴스가있는 경우

Datastore datastore = DatastoreOptions.getDefaultInstance().getService(); 
KeyFactory keyFactory = datastore.newKeyFactory().setKind(User); 
Key key = keyFactory.newKey(1); 
Entity entity = datastore.get(key); 

? 엔티티 쿼리 (SELECT * From Parent WHERE __key__ = Key(Parent, 1))가 항상 키 쿼리보다 느릴 것이라고 생각하지만 get?

조상 경로가 더 길게 연결된 경우는 어떻습니까?

SELECT __key__ FROM Grandchild WHERE __key__ = Key(Parent, 1, Child, 1, Grandchild, 1) 

답변

0

키 전용 쿼리가 빠르게 엔티티의 데이터가 클라이언트로 전송 될 필요가 없기 때문에 다음과 같습니다 그런 다음 키 쿼리의 좋아하는을 따라 뭔가 될 수 있습니다. N 개의 속성을 가진 엔티티가 있고 속성 (이름 및 값)의 크기가 50KB라고 가정하면 키 전용 쿼리를 수행하면 네트워크를 통해 50KB의 데이터 전송을 저장합니다.

Datastore의 관점에서 보면 키 전용 쿼리, 키 또는 Get (키) 메서드를 기반으로 한 엔터티 쿼리를 사용하든 데이터 스토어가 제공된 키.

요약하면 - 주어진 키가있는 엔티티가 존재하지 않는 경우 키 - 온리 쿼리가 가장 좋습니다.

+0

종류와 식별자가 별도로 있으면 어떻게됩니까? get() 메서드를 사용하는 것이 더 좋습니까? 아니면 키 리터럴/인수 바인딩을 구성하는 것이 더 낫습니까? – Kookz