Подводные камни с перемешиванием хранилищ в MySQL с Django? - PullRequest
0 голосов
/ 12 марта 2011

Я использую систему django поверх mysql в облаке амазонки, и база данных по умолчанию - innodb. Но теперь я хочу поместить полнотекстовый индекс на пару таблиц для поиска, что, очевидно, требует myisam.

Очевидное решение состоит в том, чтобы просто сказать mysql ALTER TABLE myisam, но будут ли какие-то проблемы с этим?

Одна вещь, которая приходит на ум, это то, что мне придется помнить, чтобы делать это каждый раз, когда я создаю новую версию базы данных, которая теоретически должна быть редкой, но, похоже, нет способа сказать django пожалуйста, установите механизм хранения на уровне таблицы. Я думаю, я мог бы написать миграцию (мы используем юг).

Какие-то другие вещи, которые я мог бы упустить Что может пойти не так?

Ответы [ 2 ]

2 голосов
/ 12 марта 2011

Будет ли заявка замечена?Вероятно, нет.

Это вызовет проблемы?Только когда что-то пойдет не так.MyISAM не является механизмом хранения транзакций.Если вы измените данные в таблице MyISAM, находясь внутри транзакции, то вам придется откатить изменения, изменения в этой таблице не будут откатываться.Прошло много времени с тех пор, как я пытался ужасно сломать его, но я готов поспорить, что MySQL даже не выдаст предупреждение, когда это произойдет.Это будет приводить к проблемам согласованности данных.

Вы должны серьезно рассмотреть внешнее программное обеспечение для поиска вместо полнотекстового индекса, например ElasticSearch (интегрируется на уровне приложения), или Sphinx (интегрируется на уровне MySQL, хотя, если вы используете RDS вместо MySQL напрямую, я не думаю, что вы сможете его использовать).

1 голос
/ 12 марта 2011

может помочь следующее:

используйте полнотекстовую таблицу myisam для индексации в ваших таблицах innodb, например: Создайте свою систему, используя innodb: ...

Любой способ добиться полнотекстового поиска в InnoDB

...