bonsai
bonsai copied to clipboard
Отказ от использования операторов json при работе с базой
Нужно денормализовать базу: важные факты типа пола и даты рождения\смерти хранить в отдельных столбцах, а полный JSON-документ с фактами использовать только при отображении конкретной страницы.
Преимущества:
- Облегчит запросы, для которых требуется весь контекст: валидация фактов при редактировании \ создании, отображение дерева и т.д.
- Позволит в будущем мигрировать движок базы с PostgreSQL на SQLite
Позволит в будущем мигрировать движок базы с PostgreSQL на SQLite
для миграции существующей базы данных postgres, предполагается разработка инструмента миграции?
Облегчит запросы, для которых требуется весь контекст: валидация фактов при редактировании \ создании, отображение дерева и т.д.
Есть какие то проблемы с производительностью postgres в плане работы с json. Знаю как минимум две компании с весьма таки большой нагрузкой которые используют JSONB и не имеют с этим никаких проблем. Мы прямо сейчас отказываемся от отдельных таблиц в базе в пользу одного поля типа JSONB.
- имею опыт использования проекта calibry-web и каждый раз когда я захожу туда, чтобы залить данные о книжках, я трачу пару дней, чтобы починить базу sqlite, Так как она в очередной раз находиться в RO, очень не хотелось бы, чтобы история повторилась
Проблем с производительностью нет - наоборот, задача в том, чтобы сделать деплой меньше (сейчас контейнер Postgres весит больше, чем контейнер Bonsai).
Как конкретно реализовать миграцию пока не знаю. В идеале должна быть всего одна кнопка в админке - "мигрировать БД", нажатие на которую автоматически все перенесет, после чего контейнер с Postgres можно будет отключить и удалить.
Я использую sqlite в параллельном проекте (https://github.com/impworks/isotope), где нагрузка аналогичная, и никаких проблем не возникает. Возможно, calibre просто криво работает с базой.
Миграция будет работать следующим образом:
- В настройках появится два отдельных connection string'а - для Postgres и для SQLite
- Если указан только Postgres или только SQLite - все работает как раньше
- Если указан и Postgres, и SQLite - при старте приложения выполняется дополнительная задача, копирующая все данные из Postgres в SQLite. Дальше используется только база SQLite, а контейнер Postgres можно отключить и удалить.
При этом поддержка PostgreSQL в самом Bonsai останется навсегда (для возможности мигрировать в любой момент, или просто "ничего не трогать"), а базой "по умолчанию" станет SQLite.
Но инструмент миграции будет поддерживать только одну версию схемы постгрес? А не будет обновляться каждый раз, когда обновляется схема
Нет - сначала любая версия постгреса обновляется до актуальной, потом актуальная переносится в sqlite