Google App Engine, BigTable и эволюция модели - PullRequest
0 голосов
/ 28 июля 2011

Я в настоящее время играю с Spring / JPA / Google App Engine, и есть проблема, о которой я беспокоюсь.

Крутая вещь с GAE, когда определено мое отображение, мне просто нужновставьте данные, и все, что с ними связано, также будет сохранено.

Однако, если мне удастся изменить отображение, как мне поступить с моими предыдущими данными?Нужно ли создавать сценарии миграции каждый раз, когда что-то меняется?Есть ли способ использовать Liquibase или что-то подобное в этом случае?Или есть другой способ обработать эти изменения в существующих данных?

Большое спасибо за вашу помощь!Rolf

1 Ответ

1 голос
/ 28 июля 2011

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

Другое дело, что сущности ядра приложения не имеют схемы;например, если у вас есть какой-то класс Foo и вы неожиданно добавляете к нему свойство prop = db.BooleanProperty(default=True), то для всех существующих Foo сущностей не будет установлено значение prop в True (хотя новые будут).Точно так же вам придется управлять ReferenceProperty s и ListProperty(db.Key) вручную.В App Engine действительно есть оператор _set, чтобы помочь с этим, но, честно говоря, я нашел, что это немного ненадежно, с _set, когда я знал, что так быть не должно, пустые значения.В любом случае, вот документация по использованию функциональности _set.

...