Подводные камни с перемешиванием хранилищ в MySQL с Django?
Я использую систему django поверх mysql в облаке амазонки, и база данных по умолчанию - innodb. Но теперь я хочу поместить полнотекстовый индекс на пару таблиц для поиска, что, очевидно, требует myisam.
Очевидное решение состоит в том, чтобы просто сказать mysql ALTER TABLE myisam, но будут ли какие-то проблемы с этим?
Одна вещь, которая приходит на ум, это то, что мне придется помнить об этом каждый раз, когда я создаю новую версию базы данных, что теоретически должно быть редко, но, похоже, нет способа заставить django установить механизм хранения на уровне таблицы. Я думаю, что я мог бы написать миграцию (мы используем юг).
Какие-нибудь другие вещи, которые я мог бы пропустить? Что возможно могло пойти не так?
2 ответа
Следующие могут быть полезны:
используйте полнотекстовую таблицу myisam для индексации в ваших таблицах innodb, например: создайте свою систему, используя innodb:...
Будет ли приложение замечать? Возможно нет.
Это вызовет проблемы? Только когда что-то пойдет не так. MyISAM не является механизмом хранения транзакций. Если вы измените данные в таблице MyISAM, находясь внутри транзакции, то вам придется откатить изменения, изменения в этой таблице не будут откатываться. Прошло много времени с тех пор, как я пытался ужасно сломать его, но я готов поспорить, что MySQL даже не выдаст предупреждение, когда это произойдет. Это приведет к проблемам согласованности данных.
Вы должны серьезно рассмотреть внешнее программное обеспечение для поиска вместо полнотекстового индекса, такого как ElasticSearch (интегрируется на уровне приложения) или Sphinx (интегрируется на уровне MySQL, хотя, если вы используете RDS вместо MySQL напрямую, я не думаю, что вы смогу им пользоваться).