Мелкие несоответствия в документации Google AppEngine
или мелкие, но неприятные особености.
или мелкие, но неприятные особености.
Загрузка файлов.
- В документации в примере работы с фотографиями указано, что по умолчанию для параметров загрузки файлов выдается их содержимое. В действительности выдается исходное имя файла, поэтому нужно вместо:
self.request.get('uploadfile')
, использоватьself.request.params.get('cvs').file.read()
Кодировка строк.
- Параметры возвращаемые self.request.get() возвращаются в виде unicode строк;
- В базу данных тоже нужно сохранять unicode строки;
- При редиректе нужно использовать для строк содержащих символы не входящие в ASCII выражение вида:
sub_path = self.request.get('path')
, то есть перед выполнением редиректа нужно преобразовать в обычную строку.
self.redirect('/forum?path=' + cgi.escape(sub_path.encode('utf-8')))
Особенности базы данных
- Пока обнаружил только, что желательно добавлять и удалять маленькими порциями. В первом случае можно наткнуться на ограничение во времени (5 секунд) и нагрузке при обработке запроса. В втором случае удалить более 300 объектов за раз нельзя. Цифры примерные - точные цифры получить не пытался, известно только, что за зараз можно добавить 600 объектов и раза в два меньше объектов удалить.
- Нагрузки на процессорное время при первом получении результатов (не созданы индексы) может достигать на простых операциях вида: получить первые 25 результатов с сортировкой по дате ключу, может занять до 10 абстрактных секунд(30 секунд реальных) при последующих запросах значения падают на порядок.
- Добавление 600 записей может использовать до 1% процессорного времени выданного для бесплатного аккаунта.
- База основана на технологии map/reduce, и не поддерживает команды SQL кроме select. Но удобнее, как по мне, использовать нативные методы order, filter, put, fetch.
- Можно только сравнивать на равенство больше/меньше и включение(in), операции like и под запросы не поддерживаются.
- Для реализации операций соответствия признаку (или поиск слов, тегов) можно использовать разбиение исходного предложения на минимальные единицы с последующим сохранением этого списка, как отдельного поля в записи (можно в поле записи сохранять список), а потом при поиске использовать вхождение. Конечно, это немного не то, если нужен like, но вполне быстро срабатывает.
- Включение работает как пересечение, то есть если есть общие элементы, то возвращается истина.
No comments:
Post a Comment