Doctrine2和MySQL分区

Vla*_*viy 21 php mysql partitioning doctrine-orm

有没有人有使用分区功能和Doctrine2库的经验?

第一个问题是Doctrine为关联列创建了外键,有人知道如何阻止或禁用它吗?

第二个问题是如何指定自定义表定义(PARTITION BY ...)?

提前致谢!

小智 7

你不是运气不好!!

首先,从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';
Run Code Online (Sandbox Code Playgroud)

然后重写supportsForeignKeyConstraints()在方法/vendor/doctrine-dbal/lib/Doctrine/DBAL/Platforms/MySqlPlatform.php(或任何此类位于)到:

public function supportsForeignKeyConstraints()
{
    return false;
}
Run Code Online (Sandbox Code Playgroud)

这将阻止Doctrine在您的下一个doctrine:schema:update命令上创建外键约束.之后,您可以ALTER TABLE PARTITION BY...在需要时简单地执行语句(D2不支持在模式级别上进行分区).我建议您先备份并截断表(使用--no-create-info),以便尽快执行结构更改,然后恢复它们.

正如这位研究员在这里所说的那样,根据我的个人经验,D2并不关心你是否有FK,只要有适当的关系定义.

PS:我正在努力扩展注释语法以支持正确的表和列定义,包括ENGINE(可能很有用),PARTITION BY和@Column options数组(即{"fixed"=true, "unsigned"=true, "default"=0})

整体工作相当于逆向工程和代码补丁的几个不眠之夜,希望你能更快地完成:)


Sco*_*ive 2

MySQL 中的 PARTITION 引擎在键方面有很大的限制。请参阅最新文档,目前位于: http: //dev.mysql.com/doc/refman/5.1/en/partitioning-limitations-partitioning-keys-unique-keys.html

如果 Doctrine 需要 Partition 不支持的密钥,那么你就不走运了。分区引擎在设计上受到很大限制 - 它旨在用于不经常读取的档案存储。除非您进行更改,否则很少有支持 MySQL 的应用程序可以与分区一起使用。

我建议按照预期使用分区 - 归档。将数据存储在更主流的 MySQL 数据引擎中将是答案。