При использовании объектной базы данных, как вы обрабатываете значительные изменения в вашей объектной модели? - PullRequest
8 голосов
/ 05 апреля 2011

Если вы используете объектную базу данных, что происходит, когда вам нужно изменить структуру вашей объектной модели?

Например, я играю с Google App Engine.Разрабатывая свое приложение, я понял, что в некоторых случаях я неправильно назвал класс и хочу изменить имя.И у меня есть два класса, которые, я думаю, мне нужно объединить.

Однако я не думаю, что смогу, потому что имя класса интуитивно связано с хранилищем данных, и в них хранятся фактические данныеИмена классов.

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

Итак, в целом, при использовании хранилища данных, которое тесно связано с вашей моделью данных ... как вы меняете вещи вокруг

Ответы [ 3 ]

2 голосов
/ 06 апреля 2011

Если вас беспокоит только имя класса, вы можете изменить имя класса без изменения типа (идентификатор, который используется в хранилище данных):

class Foo(db.Model):
  @classmethod
  def kind(cls):
    return 'Bar'

Если вы хотите переименовать вашкласс, просто реализуйте метод kind(), как указано выше, и пусть он возвращает старое доброе имя.

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

1 голос
/ 05 апреля 2011

Так же, как вы делаете это в реляционных базах данных, за исключением того, что без простого простого SQL-скрипта: http://code.google.com/appengine/articles/update_schema.html

Кроме того, как и в прежние времена, объекты без свойств не получают автоматически значения по умолчанию, а свойства, которые не существуют в схеме, по-прежнему остаются фантомами в объектах.

Чтобы переименовать свойство, я ожидаю, что вы можете удалить старое свойство (фантомное свисание), добавить новое имя, заполнить данные копией старого (фантомного) свойства. Переписанный объект будет иметь только новое свойство

0 голосов
/ 05 апреля 2011

Вы можете сделать это так, как мы это делаем в нашем проекте:

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

...