Медленные операции с базой данных Django в Google App Engine - PullRequest
2 голосов
/ 19 сентября 2011

Я тестирую Google App Engine и Django-nonrel с бесплатной квотой.Мне кажется, что операции с базой данных для Datastore ужасно медленные.

Возьмем, к примеру, эту упрощенную функцию, обрабатывающую запрос, которая принимает данные multipart / form-данных больших двоичных объектов XML, анализирует их и вставляет их вбаза данных:

def post(request):
    fields = cgi.FieldStorage(request)
    with transaction.commit_on_success():
        for xmlblob in fields.getlist('xmlblob'):
            blob_object = parse_xml(xmlblob)
            blob_object.save()

Blob_object имеет пять полей, каждое из которых имеет тип CharField.

Для всего ок.30 блобов (всего около 1 КБ XML), эта функция возвращает 5 секунд и использует более 30000 api_cpu_ms.Процессорное время должно соответствовать объему работы, которую мог бы выполнять процессор Intel x86 с тактовой частотой 1,2 ГГц, но я уверен, что для вставки 30 строк в базу данных для любого доступного процессора x86 не потребуется 30 секунд.

Без сохранения объектов в базе данных (то есть простого анализа XML и отбрасывания результата) запрос занимает всего миллисекунды.

Так что, если Google App Engine действительно будет настолько медленным, что я смогусохранить несколько десятков объектов в хранилище данных в обычном запросе, или я что-то здесь упускаю?И, конечно же, даже если бы я делал вставки в каком-нибудь Backend или используя очередь задач, это все равно стоило бы в сотни раз больше, чем казалось бы приемлемым.

Редактировать: IВыяснилось, что по умолчанию GAE выполняет две записи индекса для каждого объекта.Большинство из этих свойств не должны быть проиндексированы, поэтому возникает вопрос: как я могу установить неиндексированные свойства для Django-nonrel?

Я все еще чувствую, что даже при записи в индекс операции с базой данных занимают смешную суммувремени.

Ответы [ 2 ]

3 голосов
/ 20 сентября 2011

В отсутствие пакетных операций мало что можно сделать, чтобы сократить время настенных часов. Пакетные операции очень важны для сокращения времени настенных часов в App Engine (или любой другой распределенной платформе с RPC).

В соответствии с текущей моделью выставления счетов, миллисекунды ЦП, сообщаемые хранилищем данных, отражают стоимость операции, а не фактическое время, затрачиваемое на нее, и представляют собой способ выставления счетов за ресурсы. В соответствии с новой моделью выставления счетов они будут выставляться в явном виде как операции с хранилищем данных.

1 голос
/ 26 сентября 2011

Реального ответа пока не нашел, но я сделал некоторые расчеты по стоимости. В настоящее время каждое поле индексированного свойства стоит от $ 0,20 до $ 0,30 за 10 000 вставок. В новой модели выставления счетов ( FAQ по ценам ) стоимость будет составлять ровно 0,1 доллара на 100 000 операций или 0,2 доллара на проиндексированное поле на 100 000 операций вставки с 2 операциями записи индекса на одну вставку.

Так что, как представляется, цена снижается в десять раз, наблюдаемая медлительность действительно является неожиданным поведением. Поскольку бесплатной квоты достаточно для моих тестовых прогонов, а также с появлением новой модели ценообразования, я не позволю ей сейчас беспокоиться.

...