2012-04-27 6 views
1

У меня есть класс, который что-то делает (инициализацию) при первом запуске приложения. Этот код инициализации присутствует в статическом блоке. Обычно он должен выполняться только один раз, когда класс загружается в первый раз.проблема с динамическим экземпляром appengine

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

Я знаю, эта проблема может быть решена с использованием резидентного экземпляра. Но я думаю, что экземпляр-резидент не доступен в свободной квоте. Исправьте меня, если я ошибаюсь.

Есть ли способ, которым я могу избежать этой проблемы?

Сохранение результата вычисления в db является одним из вариантов, но его невозможно, так как я хочу эти данные быстро? Как насчет memchace? Будет ли это работать? Будут ли данные в memchace preserverd через динамическую загрузку моего приложения? Примечание: я не выгружаю экземпляр моего экземпляра, но движок приложения делает это, когда мое приложение не получает никаких запросов.

+1

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

+1

Я думаю, вы неправильно поняли резидентный экземпляр (как и я). резидентный экземпляр подобен постоянному idle-экземпляру, который обслуживает запросы до запуска динамического экземпляра. если вы настроите резидентный экземпляр (min idle), вы увидите, что он будет обслуживать только минимальную часть или даже ни одно из запросов вашего приложения. – aschmid00

ответ

1

Данные Memcache могут исчезнуть в любое время. Гарантируется, что сохраняются только данные хранилища данных.

Вы можете хранить ваши данные инициализации и принести его в следующем порядке: (?)

  1. статические данные
  2. Memcache данные
  3. в хранилище данных

(это то, что я do), если вы не хотите принять предложение Ника.

1

Или вы можете запланировать задачу, которая периодически запускается каждые 10 минут, этот экземпляр будет загружен. (убедитесь, что потокобезопасность включена)

Смежные вопросы