我的场景:
- 新蛋糕(2.x)项目,尚未DB
- MySQL集群,也许还有Oracle集群产品
- 无需迁移/导入任何数据
- 数据可以是:
Users
->HABTM->Groups
->HABTM->Other Groups
我一直在研究如何在CakePHP中使用UUID,我发现了以下内容:
Cake本机支持UUID,但它假定CHAR(36)
:
http://book.cakephp.org/2.0/en/getting-started/cakephp-conventions.html
这个堆栈回答指出:
将UUID作为CHAR(36)的成本高得离谱愚蠢的100多万,1000多万,100多万排,在我的谦逊中体验
这篇博客文章声称BINARY(36)
比CHAR(36)
:更好
尽管CakePHP不支持16字节十六进制编码的UUIDBINARY(16)的密钥类型,它确实支持仍然比使用CHAR(36)要好,后者可以通过排序来减慢速度。
。。。但是蛋糕医生没有这么说。。。
我的问题是,考虑到CakePHP/MySQL(或CakePHP/Oracle),CHAR(36)是这里唯一合理的选择,还是有更好、更有效的方法将UUID与CakePHP(或任何其他PHP框架)一起使用?
你可能已经知道了,但你可以用String::uuid()
为新记录生成一个id,并在你的表中有BINARY(36)
——我认为cake在生成uuid之后没有任何自动魔力。
如果CakePHP的模型有一个SQL类型为Binary(36)的id字段,那么每次创建新记录时,id字段都会得到一个新的GUID值。这种行为自1.3.15版本以来就一直存在。
关于您的另一个问题,由于CHAR涉及排序,我会选择二进制解决方案。