Doctrine2 和 MySQL Partitioning
是否有人有将分区功能与 Doctrine2 库结合使用的经验?
第一个问题是,Doctrine为关联列创建了外键,有人知道如何防止或禁用它吗?
第二个问题是如何指定自定义表定义(PARTITION BY ...)?
提前致谢!
是否有人有将分区功能与 Doctrine2 库结合使用的经验?
第一个问题是,Doctrine为关联列创建了外键,有人知道如何防止或禁用它吗?
第二个问题是如何指定自定义表定义(PARTITION BY ...)?
提前致谢!
你不倒霉!!
首先,从 D2 管理的所有表中删除所有外键。复制并执行此查询的结果:
SET SESSION group_concat_max_len=8192; -- // increase this if you do not see the full list of your tables
SELECT IFNULL(REPLACE(GROUP_CONCAT('ALTER TABLE ',TABLE_NAME,' DROP FOREIGN KEY ',CONSTRAINT_NAME,'; '), ',', ''), '') FROM information_schema.TABLE_CONSTRAINTS WHERE CONSTRAINT_TYPE='FOREIGN KEY';
然后重写该方法(或此类所在的任何位置)以:supportsForeignKeyConstraints()
/vendor/doctrine-dbal/lib/Doctrine/DBAL/Platforms/MySqlPlatform.php
public function supportsForeignKeyConstraints()
{
return false;
}
这将阻止 Doctrine 在下一个命令上创建外键约束。之后,您可以简单地在需要时执行语句(D2 不支持在架构级别上进行分区)。我建议您先备份并截断表(使用),以便尽快执行结构更改,然后还原它们。doctrine:schema:update
ALTER TABLE PARTITION BY...
--no-create-info
正如这个家伙在这里说的,根据我个人的经验,D2并不关心你是否有FKs,只要有适当的关系定义。
P.S.:我目前正在努力扩展注释语法以支持正确的表和列定义,包括(这可能很有用)和@Column数组(即ENGINE
PARTITION BY
options
{"fixed"=true, "unsigned"=true, "default"=0}
)
整体努力相当于几个不眠之夜的逆向工程和代码补丁,希望你做得更快,:)
MySQL中的分区引擎在键方面存在重大限制。请参阅最新文档,当前位置:http://dev.mysql.com/doc/refman/5.1/en/partitioning-limitations-partitioning-keys-unique-keys.html
如果 Doctrine 需要 Partition 不支持的键,那么你就不走运了。分区引擎在设计上非常有限 - 它用于不经常读取的存档存储。很少有MySQL感知应用程序可以与分区一起使用,除非您进行更改。
我建议使用分区,因为它的意图 - 存档。将数据存储在更主流的MySQL数据引擎中将是答案。