Mysql Geodjango和Innodb,混合Innodb和myisam模型
我一直听说InnoDB在数据完整性方面更好,不幸的是,MySQL 5.6还没有支持空间索引。一个快速的空间索引对我的应用程序来说非常关键,尽管我的模型的优点是,它几乎可以生成一个相当静态(写一次,读多次)的(ID,POINT)表,所以我可以使用MyISAM,而不必太在意 我希望将MyISAM的使用限制在该表上,并在InnoDB对SPATIAL的支持就绪时将其迁移。问题是,如果在迁移模型后(通过使用app/sql/app_model.sql)更改表以将表切换到MyISAM,MySQL会抱怨:Mysql Geodjango和Innodb,混合Innodb和myisam模型,mysql,django,innodb,myisam,geodjango,Mysql,Django,Innodb,Myisam,Geodjango,我一直听说InnoDB在数据完整性方面更好,不幸的是,MySQL 5.6还没有支持空间索引。一个快速的空间索引对我的应用程序来说非常关键,尽管我的模型的优点是,它几乎可以生成一个相当静态(写一次,读多次)的(ID,POINT)表,所以我可以使用MyISAM,而不必太在意 我希望将MyISAM的使用限制在该表上,并在InnoDB对SPATIAL的支持就绪时将其迁移。问题是,如果在迁移模型后(通过使用app/sql/app_model.sql)更改表以将表切换到MyISAM,MySQL会抱怨: ER
ERROR 1217 (23000): Cannot delete or update a parent row: a foreign key constraint fails
这是有道理的,我的其他模型引用了这个模型,Django自动在这些模型和这个模型之间进行外键约束
这里最好的策略是什么?我应该放弃InnoDB,把一切都换回MyISAM吗?我可以删除所有外键约束吗
我试图通过查找信息\u SCHEMA.TABLE\u约束来自动删除外键,但这只列出了具有约束的表,而没有列出这些约束引用的表。我将不得不做一些模糊的列名匹配,这感觉非常脆弱 为了解决这个问题,我默认放弃使用InnoDB。因为Amazon RDS将Inno设置为默认设置,所以我通过在my settings.py中添加init_命令来实现这一点:
'default': {
'OPTIONS': {
'init_command' : 'SET storage_engine=MYISAM', # Can't make SPATIAL keys on InnoDB
},
}
然后,对于除了具有空间索引的表之外的所有表,我在$appname/sql目录下创建了一个$modelname.sql文件,该文件在创建引擎后会更改引擎
-- Alter to InnoDB so we can make concurrent insertions w/o full table lock.
ALTER TABLE <modeltable> ENGINE=INNODB;
——更改为InnoDB,这样我们就可以进行不带全表锁的并发插入。
ALTER TABLE ENGINE=INNODB;
切换到MYISAM默认值意味着Django不会自动为Inno表创建外键约束,这并不理想。我希望有办法让Django在事后创造它们