bonsai icon indicating copy to clipboard operation
bonsai copied to clipboard

Отказ от использования операторов json при работе с базой

Open impworks opened this issue 4 years ago • 7 comments

Нужно денормализовать базу: важные факты типа пола и даты рождения\смерти хранить в отдельных столбцах, а полный JSON-документ с фактами использовать только при отображении конкретной страницы.

Преимущества:

  • Облегчит запросы, для которых требуется весь контекст: валидация фактов при редактировании \ создании, отображение дерева и т.д.
  • Позволит в будущем мигрировать движок базы с PostgreSQL на SQLite

impworks avatar Jan 21 '21 18:01 impworks

Позволит в будущем мигрировать движок базы с PostgreSQL на SQLite

для миграции существующей базы данных postgres, предполагается разработка инструмента миграции?

centralhardware avatar Sep 04 '21 05:09 centralhardware

Облегчит запросы, для которых требуется весь контекст: валидация фактов при редактировании \ создании, отображение дерева и т.д.

Есть какие то проблемы с производительностью postgres в плане работы с json. Знаю как минимум две компании с весьма таки большой нагрузкой которые используют JSONB и не имеют с этим никаких проблем. Мы прямо сейчас отказываемся от отдельных таблиц в базе в пользу одного поля типа JSONB.

centralhardware avatar Sep 04 '21 05:09 centralhardware

  • имею опыт использования проекта calibry-web и каждый раз когда я захожу туда, чтобы залить данные о книжках, я трачу пару дней, чтобы починить базу sqlite, Так как она в очередной раз находиться в RO, очень не хотелось бы, чтобы история повторилась

centralhardware avatar Sep 04 '21 06:09 centralhardware

Проблем с производительностью нет - наоборот, задача в том, чтобы сделать деплой меньше (сейчас контейнер Postgres весит больше, чем контейнер Bonsai).

Как конкретно реализовать миграцию пока не знаю. В идеале должна быть всего одна кнопка в админке - "мигрировать БД", нажатие на которую автоматически все перенесет, после чего контейнер с Postgres можно будет отключить и удалить.

Я использую sqlite в параллельном проекте (https://github.com/impworks/isotope), где нагрузка аналогичная, и никаких проблем не возникает. Возможно, calibre просто криво работает с базой.

impworks avatar Sep 04 '21 07:09 impworks

Миграция будет работать следующим образом:

  1. В настройках появится два отдельных connection string'а - для Postgres и для SQLite
  2. Если указан только Postgres или только SQLite - все работает как раньше
  3. Если указан и Postgres, и SQLite - при старте приложения выполняется дополнительная задача, копирующая все данные из Postgres в SQLite. Дальше используется только база SQLite, а контейнер Postgres можно отключить и удалить.

При этом поддержка PostgreSQL в самом Bonsai останется навсегда (для возможности мигрировать в любой момент, или просто "ничего не трогать"), а базой "по умолчанию" станет SQLite.

impworks avatar Oct 29 '21 16:10 impworks

Но инструмент миграции будет поддерживать только одну версию схемы постгрес? А не будет обновляться каждый раз, когда обновляется схема

centralhardware avatar Oct 30 '21 02:10 centralhardware

Нет - сначала любая версия постгреса обновляется до актуальной, потом актуальная переносится в sqlite

impworks avatar Oct 30 '21 06:10 impworks