7

私のシナリオ:

  • 新しい Cake (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

このStack Answerは、次のことを指摘しています。

UUID を CHAR(36) として実行するコストはとてつもなく高く、私の謙虚な経験では、100 万以上、1000 万以上、1 億以上の行でばかげています。

このブログ投稿BINARY(36)は、次のものよりも優れていると主張していますCHAR(36):

CakePHP は、キータイプが BINARY(16) の 16 バイトの 16 進数でエンコードされた UUID をサポートしていませんが、照合によって遅くなる可能性がある CHAR(36) を使用するよりも優れた BINARY(36) をサポートしています。

...しかしCake Docsはそうは言っていない...

私の質問は、CakePHP/MySQL (または CakePHP/Oracle) を考えると、CHAR(36) がここで唯一の合理的な選択であるか、または CakePHP (またはその他の PHP フレームワーク) で UUID を使用するためのより良い、より効率的な方法があるかということです。 ?

4

2 に答える 2

3

おそらくすでにこれを知っているでしょうがString::uuid()、新しいレコードの id を生成BINARY(36)し、テーブルに含めることができます-ケーキには uuid 生成以降の自動魔法はないと思います。

于 2012-11-30T04:18:07.733 に答える
2

SQL タイプが Binary(36) の id フィールドを持つモデルが CakePHP に与えられた場合、新しいレコードを作成するたびに、id フィールドには新しい GUID 値が与えられます。この動作は、バージョン 1.3.15 以降です。

あなたの他の問題に関しては、CHARには照合が含まれるため、バイナリソリューションを使用します。

于 2013-11-04T15:09:04.207 に答える