Чрезвычайно медленный db.get ([keys]) в хранилище данных GAE HR - PullRequest
3 голосов
/ 31 октября 2011

Я использую db.get ([keys]) и очень медленно читаю. Для простого теста требуется как минимум «9008cpu_ms 2125api_cpu_ms». Длина массива ключей ~ 200 . Это нормально? Объекты маленькие:

p1 = db.StringProperty(indexed=False) - ~20 characters
p2 = db.StringProperty(indexed=False, required=True) ~10 characters
p3 = db.GeoPtProperty(indexed=False, required=True)
p4 = db.StringListProperty(indexed=False) 10 items x ~10 characters

Всего объектов в хранилище данных HRD: ~ 1000. Получено: ~ 200.

Appstats показывает:

datastore_v3.RunQuery    9ms (29ms api)
datastore_v3.Next    32ms (16ms api)
datastore_v3.Next    11ms (16ms api)
datastore_v3.Next    16ms (16ms api)
datastore_v3.Next    86ms (16ms api)
datastore_v3.Next    8ms (16ms api)
datastore_v3.Next    84ms (16ms api)
datastore_v3.Next    8ms (16ms api)
datastore_v3.Next    92ms (16ms api)
datastore_v3.Next    14ms (16ms api)
datastore_v3.Next    82ms (16ms api)
datastore_v3.Next    8ms (16ms api)
datastore_v3.Next    86ms (16ms api)
datastore_v3.Next    96ms (16ms api)
datastore_v3.Next    7ms (16ms api)
datastore_v3.Next    92ms (16ms api)
datastore_v3.Next    92ms (16ms api)
datastore_v3.Next    9ms (16ms api)
datastore_v3.Next    89ms (16ms api)
datastore_v3.Next    7ms (4ms api)
datastore_v3.Get    5692ms (8ms api)
datastore_v3.Get    5688ms (8ms api)
datastore_v3.Get    5684ms (8ms api)</code>

И сотни:

datastore_v3.Get    ~ 5681ms (8ms api)

Источник:

logging.debug('Fetching ' + str(len(m.keys())) + ' entities')
items = db.get(m.keys())
logging.debug('Done fetching items')

Вход:

D 2011-10-30 22:46:41.495 Fetching 238 entities
D 2011-10-30 22:46:50.009 Done fetching items
W 2011-10-30 22:46:54.407 Full proto too large to save, cleared variables.

Обновление 1 (понедельник, 31 октября 2011 года в 23:33:42 UTC):

При поиске возможного решения я удалил свойство StringList и воссозданные сущности. Без изменений.

Пример объекта:

ID/Name|description|location|name
id=804|Sample description|54.8968721,23.892426|Sample place

Обновление 2 (вторник, 1 ноября 2011 г. в 12:27:31 UTC):

Снимок экрана вывода Appstats:

Screenshot of Appstats output

1 Ответ

1 голос
/ 01 ноября 2011

Да, это нормально для получения 1000 объектов (по 10 элементов в списке свойств!). Высокие миллисекунды ЦП указывают на то, что вы тратите много времени на декодирование и обработку сущностей, не считая времени API, потраченного на их получение.

Имейте в виду, что значения по умолчанию строго согласованы. Если вам это не нужно, вы можете ускорить процесс, выполнив в конечном итоге непротиворечивое получение, как описано здесь .

...