GAE 파이썬 앱에서 읽기 연산을 최적화하려고합니다. 내 무료 할당량을 초과하고 싶지 않습니다. 나는 기본적으로 데이터를 저장하고있다. 점점 많은 데이터가 중복 될 수 있으므로 저장하기 전에 확인해야합니다. 결과적으로 많은 읽기 연산과 일부 쓰기 연산이 발생합니다. 여기에 내가 지금하고있는 방법입니다 :Google App Engine NDB 읽기 연산 최적화
#data is a JSON data list with hundreds of items
for item in data:
record = InfoDB.get_by_id(item['id'])
if record:
continue
else:
entity = InfoDB(id=item['id'], data=item['data']).put()
여기는 읽기 작전을 낮추는 방법 중 하나입니다. 비록 그것이 사실이라면 나는 100 % 확실하지는 않지만. 루프가 반복 될 때마다 읽기 연산을 수행 할 수 있다고 생각합니다.
#data is a JSON data list with hundreds of items
flag = False
db = InfoDB.query().fetch()
for item in data:
for record in db:
if record.id == item.id:
flag = True
if flag is True:
continue
else:
entity = InfoDB(id=item['id'], data=item['data']).put()
위의 방법은 실제로는 본질적으로 전체 데이터 저장소를 잡는 이후 나 읽기 작업을 저장하고 다음 for 루프는 전체 세트마다 반복을 처리하기 위해 사용되어 있습니까? 나는 이것이 더 느리다는 것을 깨닫는다. 그러나 나는 이것을 어떻게 효율적으로 성취 할 수 있는지를 알지 못한다.
다른 아이디어?
편집 :
그냥 명확하게,이 NDB를 사용하고 있습니다. 이전 DB가 아닙니다.
재미있는을한다. 나는 keys_only = True가 query()가 아니라 fetch()에 있어야 함을 발견했다. 즉, 쿼리 기반 돈 키를 수행하는 방법을 알 수 없습니다. 가장 가까운 것은'InfoDB.query (InfoDB._key == 'item ['id ']'). fetch (keys_only = True)'였습니다. 그러나 그것은 작동하지 않습니다. 이견있는 사람? –
왜 키를 전달하고 키를 검색하려고합니까? –
다음은 docs의 keys_only 쿼리에 대한 링크입니다. https://developers.google.com/appengine/docs/python/datastore/queries#Python_Keys_only_queries –