0

Google 데이터 저장소에 urlsafe 키 값을 사용하여 대량 가져 오기 방법이 있습니까?Google Datastore는 urlsafe를 사용하여 데이터를 대량으로 가져옵니다.

나는 키 목록을 취하여보다 효율적인 대량 개체를 검색하는 약 ndb.get_multi([list])을 알고 있습니다. 그러나 우리의 경우 우리는 엔티티 urlsafe 키 값으로 임베드 된 수백 개의 엔티티가있는 웹 페이지를 가지고 있습니다. 처음에는 단일 엔티티에 대한 작업 만 수행 했으므로 urlsafe 값을 사용하여 엔티티를 검색하고 많은 문제없이 작업을 수행 할 수있었습니다. 이제는 한 번에 여러 엔티티를 변경해야하며 하나씩 차례대로 반복하는 것은 효율적인 접근 방식처럼 들리지 않습니다. 이견있는 사람?

엔티티 키 ID를 직접 사용하는 이점이 있습니까 (대 키 urlsafe 값)? 이 documentation 인 경우 엔티티를 대량으로 가져올 수 없다는 것을 의미하지는 않습니다 (하나의 ID 만 사용).

엔티티 키를 사용하여 엔티티를 검색하는 유일한 방법은 엔티티 키를 사용하는 것이지만 웹 페이지에서 키를 표시하는 것은 권장되는 방법이 아닙니다. 즉, 다음과 같은 페이지의 대량 작업과 관련하여 몇백 개의 실체?

답변

1

키와 urlsafe 문자열은 정확히 1 : 1 관계입니다. 당신은 해당 키를 획득하고 모든 개체를 얻기 위해 그 키 ndb.get_multi()을 사용할 수 있습니다 urlsafe 문자열의 무리가 있다면, 그래서

urlsafe_string = entity_key.urlsafe() 
entity_key = ndb.Key(urlsafe=urlsafe_string) 

를 사용 후 필요에 따라 수정 : 당신이 하나를 가질 때 당신은 다른 사람을 얻을 수 있습니다 ndb.put_multi()을 사용하여 다시 데이터 스토어에 저장하십시오.

ID를 사용하는 경우 엔 엔티티 가설을 사용하지 않는 경우에만 편리하게 작동합니다 (편리한 방식으로). 키를 얻으려면 ID와 엔티티의 상위 키 (또는 전체 조상)가 모두 필요합니다.이 경우 편리한 urlsafe 문자열을 사용하는 것이 편리하지 않습니다.

하지만 부모와 함께 엔티티 (일명 루트 개체 각각의 엔티티 그룹) 엔티티 키와 ID에 대한

은 1에서 항상 : 1의 관계와는 다른 경우 다시 하나를 얻을 수 있습니다

entity_key_id = entity_key.id() 
entity_key = ndb.Key(MyModel, entity_key_id) 

다시 ID 묶음에서 ndb.get_multi() 및/또는 ndb.put_multi()과 함께 사용할 키를 얻을 수 있습니다.

urlsafe 문자열을 통해 화장품 이점을 가질 수 ID를 사용하여이 - 그들이하는 URL 또는 페이지의 HTML 코드 :

ID를 사용의 또 다른 이점에 apear 때 눈에 일반적으로 짧고 쉽게 분할 할 수있는 기능입니다 대형 엔터티 또는 1 : 1 관계에있는 엔터티를 사용하여보다 단순한 방식으로 처리 할 수 ​​있습니다. re-using an entity's ID for other entities of different kinds - sane idea?

키와 ID에 대한 자세한 내용은 Creating and Using Entity Keys을 참조하십시오.

+0

감사합니다. @Dan Cornilescu에 대한 설명이 많아서 urlsafe 목록을 반복하고'entity_key = ndb.Key (urlsafe = urlsafe_string) '를 사용하면 데이터 저장소에 액세스하지 않습니다. 기본적으로 ndb입니다. urlsafe를 키 (_decode_)로 변환하는 클래스 함수? 그 뒤에'ndb.get_multi()'를 사용할 수 있습니까? – Khaled

+0

네, 맞습니다. –

+0

굉장합니다. 고마워요. 나는 그것을 시도하고 아름답게 운동했다. 하나의 미래가 아닌 미래의리스트를 반환하는 비동기 버전'ndb.get_multi_async()'를 사용하고리스트에서'get_result()'가 작동하지 않기 때문에 또 다른 문제가 생겼습니다.목록에서 반복하고 싶지는 않지만 다음을 이해해야합니다. D .. – Khaled

관련 문제