Я нанял программиста для переноса моего веб-сайта, изначально реализованного с использованием Django и MySQL, на Google App Engine. Размер базы данных исходного веб-приложения составляет около 2 ГБ, а самая большая таблица содержит 5 миллионов строк. Чтобы перенести это содержимое, как я понимаю, программист сериализует базу данных в JSON, а затем загружает ее в движок приложений Google.
Пока что на его загрузку было потрачено 100 часов процессорного времени, как указано GAE, но похоже, что в базу данных загружено только около 50 или 100 МБ. Это разумное количество процессорного времени для такого небольшого количества данных? MySQL может загрузить такой объем данных за несколько минут, поэтому я не понимаю, почему GAE будет в 1000 раз медленнее. Он что-то делает неэффективно?
Процессорное время необходимо для массовой загрузки базы данных объемом 2 ГБ?
Ответы (3)
Это кажется высоким, и, вероятно, они заставляют сервер выполнять большую работу (декодирование JSON, кодирование и сохранение сущностей), которая может быть выполнена на клиенте. В SDK уже есть массовый загрузчик, и если он по какой-то причине не подходит, remote_api, на котором основан массовый загрузчик, обеспечивает более эффективный вариант, чем развертывание собственного.
Я массово загрузил гигабайт данных, однако я написал свой собственный модуль массовой загрузки (на основе определенных интерфейсов), и это заняло 25 часов процессорного времени.
Для получения дополнительной информации вы можете взглянуть на Производительность массового загрузчика App Engine
Это во многом зависит от того, как он сериализирует данные. Я НАСТОЯТЕЛЬНО подозреваю, что он делает что-то неэффективное, поскольку да, это смехотворно для такого количества данных. Ваша неэффективность, вероятно, заключается во времени передачи и времени начала / окончания каждого запроса. Если он сериализует каждую строку и отправляет ее обработчику по одной, я могу полностью понять, что это занимает вечность и потребляет много времени процессора.
putting
каждую строку / объект по отдельности, он должен рассмотреть возможность объединенияputs
вместе, чтобы сэкономить ЦП и другие ресурсы. - person Chris Farmiloe   schedule 14.07.2011Put()
вызова. - person Roman Dolgiy   schedule 15.07.2011db.put([instance1, instance2])
использовать меньше процессорного времени, чемdb.put(instance1); db.put(instance2)
? - person Roman Dolgiy   schedule 15.07.2011remote_api
, да. Это два полных запроса против одного запроса - person Chris Farmiloe   schedule 16.07.2011