使用django在mysql中混合存储引擎的陷阱?

时间:2011-03-11 23:50:42

标签: mysql django storage-engines

我在amazon的云中运行mysj的django系统,数据库默认为innodb。但现在我想在几个表上放一个全文索引进行搜索,这显然需要myisam。

显而易见的解决办法就是告诉mysql将ALTER TABLE告诉myisam,但这会有什么问题吗?

我想到的是,每当我构建新版本的数据库时,我都必须记住这样做,这在理论上应该是罕见的,但似乎没有办法告诉django请在桌面级别设置存储引擎。我想我可以编写一个迁移(我们使用南方)。

我可能遗失的任何其他事情?什么可能出错?

2 个答案:

答案 0 :(得分:2)

申请会通知吗?可能不是。

会引起问题吗?只有当事情出错时。 MyISAM不是事务存储引擎。如果在事务内部更改MyISAM表中的数据,则必须回滚更改,则不会回滚该表中的更改。已经有一段时间了,因为我试图打破它可怕,但我愿意下注,当发生这种情况时,MySQL甚至不会发出警告。 导致数据一致性问题。

您应该认真考虑使用外部搜索软件而不是全文索引,例如ElasticSearch(在应用程序级别集成)或Sphinx(在MySQL级别集成,但如果您使用的是RDS而不是直接使用MySQL,我认为你不能使用它。)

答案 1 :(得分:1)

以下内容可能有所帮助:

  

使用myisam全文表来索引回你的innodb表,例如:   使用innodb构建您的系统:...

Any way to achieve fulltext-like search on InnoDB