Я тестирую 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?
Я все еще чувствую, что даже при записи в индекс операции с базой данных занимают смешную суммувремени.