Увеличение количества моделей в Google App Engine влияет на производительность? - PullRequest
3 голосов
/ 07 сентября 2010

Я создал приложение Google App Engine в качестве учебного проекта в моем университете. Теперь мне нужно оптимизировать его для коммерческого использования.

В настоящее время код очень медленный. У него есть только несколько моделей с множеством свойств в каждой. Прежде чем переписывать код Моделей, мне нужно знать, будет ли мое приложение работать быстрее, если я увеличу количество Моделей, то есть увеличу развязку. И до какого момента я должен рассмотреть деление моделей на другие модели?

Другой вопрос, если разъединение положительно влияет на производительность, является ли количество свойств в модели прямо пропорциональным времени для его извлечения из хранилища данных?

1 Ответ

7 голосов
/ 07 сентября 2010

В настоящее время код очень медленный. Это имеет только несколько моделей со многими свойства в каждом.

Получение / размещение больших объектов

Поскольку API хранилища данных может только помещать или получать объект (в отличие от отдельных полей), каждый раз, когда вы выбираете объект для хранилища данных, он выбирает все его поля независимо от того, собираетесь ли вы использовать их все в этой точке или нет , Этот эффект будет сильнее, когда мы записываем объект обратно в хранилище данных, он должен записывать все, даже когда вы изменяете одно поле в объекте. (запись стоит больше, чем чтение)

Прежде чем я скажу что-либо еще: распространение моделей должно следовать вашей схеме чтения и записи.

Чтобы быть практичным и привести пример, скажем, я моделирую посты в блоге, где у каждого будут title, date и body (которые мы по праву будем считать гораздо большими, чем другие поля). В прямолинейном моделировании объектов у меня были бы эти три поля в одном классе BlogPost, но я наказываю за весь объект каждый раз, когда просто хочу прочитать titles (скажем, просто отобразить список сообщений и создать ссылки на сообщения), или просто обновить dates.

class BlogPost {
String title; String body; long date; }

Итак, что можно сделать, это создать класс Body, который будет содержать body, и сохранить ссылку (ключ) на него внутри BlogPost.

class BlogPost {
String title;
Key<Body> body;
long date;
}

class Body {
String body;
}

Легкий вес обеспечивает эффективную сериализацию на стороне

Это также делает класс BlogPost более легким, если я решу его сериализовать и отправить по сети, например, отправить в веб-браузер (для использования в JavaScript), например, с GWT.

Увеличивает ли количество моделей на Google App Engine влияет на производительность?

Ответ Ника Джонсона:

Нет, добавлять дополнительные модели не буду Ударопрочность.

...