ФорумПрограммированиеPythonDjango → Кто-нибудь пользуется в Django версионированием данных модели?

Кто-нибудь пользуется в Django версионированием данных модели?

  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 4 марта 2012 г. 12:34

    Пример, у нас есть модель постов в блоге, при каждом изменении какого-либо поля необходимо хранить изменения о нем.

    Имеется хранилище версий, это может быть:
    1. Таже самая таблица - Не прозрачно, свалка данных и тормоза :(
    2. Отдельная таблица, которая имеет такую же структуру + REVISION_KEY, CHANGED_TIMESTAMP на каждую строку данных - Придется хранить полные копии строк, а не только изменений, либо запретить юзать NULL в моделях (либо ключевое слово вместо NULL использовать и т.д.)
    3. Отдельная БД, в ней есть таблицы (как у моделей), но структура там REVISION_KEY | CHANGED_TIMESTAMP | FIELD_NAME | FIELD_TYPE | VALUE
    4. Некоторые выгружают в файлы и версионируют в системах контроля версий - Не хочется иметь лишние зависимости

    Далее, как это вижу я:
    1. В хранилище-историй откладываются ТОЛЬКО изменненые поля и помечается REVISION_KEY, TIMESTAMP
    2. В самой модели, для каждого ячейки хранится указатель на версию в хранилище (по сути внейшний ключ), то есть самих данных не будет в таблице, а только ссылки на данные в истории
    3. Естественно это будет выбираться прозрачно через кастомный менеджер модели, который при запросе данных будет отдавать актуальные данные из хранилища-историй

    Вообщем подскажите что-нибудь готовое, если есть или аналоги приближенные, возможно как хранилище будет NoSQL/MySQL-engine и т.д.

    Аналоги:
    http://stdbrouw.github.com/django-revisions/
    https://github.com/colinhowe/django-model-versions
    https://github.com/nowells/django-versions
    https://github.com/brosner/django-versioning

    Спустя 142 сек.
    Говорят в Oracle такой есть внутренний механизм, но в любом случае мне надо к нему доступ будет иметь. Ну ещё Oracle не по карману :)
    adw/0
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 4 марта 2012 г. 12:48, спустя 13 минут 47 секунд

    Также можно выбрать вариант хранения последних изменений в таблице самой модели, но при этом главное не потерять целостность данных в хранилище-истории
    Спустя 27 сек.
    Это будет бытрее, так как выбираются в основном последние данные
    adw/0
  • adwo

    Сообщения: 913 Репутация: N Группа: Джедаи

    Spritz 4 марта 2012 г. 12:49, спустя 1 минуту 38 секунд

    юзал django-reversion.

    они там хранят в json. удобно, т.к. можно в любой момент вернуться на нужную точку.
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 4 марта 2012 г. 12:51, спустя 1 минуту 24 секунды

    adw0rd, в фан проекте который сейчас в разработке еще, юзаю reversion (https://github.com/etianen/django-reversion/)

    по архитектуре понравилось, хранит данные в отдельнйо таблице в виде model, id, json(model_data)
    Спустя 30 сек.
    adwo, ага. только домой пришел, пока искал источник компонента :-)
    Сапожник без сапог
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 4 марта 2012 г. 13:00, спустя 9 минут 6 секунд

    Сенкью, пойду курить доку
    adw/0
  • Troy

    Сообщения: 2532 Репутация: N Группа: Джедаи

    Spritz 5 марта 2012 г. 9:21, спустя 20 часов 21 минуту 2 секунды

    У себя делаю версионность описания игры, чтобы юзеры и редактировать могли и вреда не нанесли. Юзаю схему как предложил дуд: основную таблицу вобще не трогаем, актуальные данные все так же хранятся как и сейчас, а для истории табличка id | game_id | data (json) | author | date | is_active
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 5 марта 2012 г. 9:25, спустя 3 минуты 45 секунд

    При смене is_active данные актуализируешь в основной таблице? Проблем с целостностью не возникало?
    adw/0
  • Troy

    Сообщения: 2532 Репутация: N Группа: Джедаи

    Spritz 5 марта 2012 г. 9:49, спустя 24 минуты 6 секунд

    adw0rd, да. Проблем пока не было, еще не залил в продакшен, не вся система готова. Но думаю возникнуть не должны.
  • Troy

    Сообщения: 2532 Репутация: N Группа: Джедаи

    Spritz 10 марта 2012 г. 9:33, спустя 4 дня 23 часа 43 минуты

    Зарелизил на сайте. Версионность была нужна. чтобы пользователи могли редактировать игры. но при этом не навредить, возможно даже с модерацией изменений. Все данные игры храняться как и раньше. Изменения в отдельной таблице. При первом редактировании (если нет ревизий) создаю сначало ревизию с тм. что сейчас в базе. При применении ревизии - перезаписываю данные в основной таблице, так что вывод не поменялся совсем. Так же сделал просмотр ревизий, например http://finle.ru/game/mount-and-blade-epoha-turnirov?rev=1 и http://finle.ru/game/mount-and-blade-epoha-turnirov?rev=2 , чтобы администратор наглядно мог увидеть "что же там" и если все огонь - применить правку.

Пожалуйста, авторизуйтесь, чтобы написать комментарий!