3

一部のデータを MySQL から Mongo に移行しており、移行されたデータ オブジェクトのObjectId値のために、いくつかの DB テーブルに追加のフィールドを追加しています。

現時点では、正常に動作する varchar(24) latin1_general_ci として保存しています。

ただし、効率的なストレージ/インデックス作成のために、おそらく 12 バイトのバイナリ値に戻す必要があります。残念ながら、MySQL は 8 バイトまでのネイティブの整数しかサポートしていないようです。別のオプションはありますか - おそらくバイナリですか?

更新: MySQL から移行していますが、現時点では特定のテーブルのみです。そのため、最初に特定のテーブルの Mongo でオブジェクトの複製を作成します。次に、古い MySQL テーブル ID への外部キー参照を持つ MySQL に残っている他のテーブルに戻り、Mongo オブジェクトの ID を格納する新しい参照フィールドを追加します。次に、元の参照フィールド BIGINT を削除します。

更新 2:これを取り上げる理由は、この他のデータを移動するまでに 12 か月以上かかる可能性があるため (または移動しない可能性があるため)、それまではライブ Web アプリケーションのパフォーマンスに影響を与える可能性があるためです。

4

1 に答える 1

5

12 バイトの unsigned int の範囲は0..79228162514264337593543950335(最大 29 桁) です。ドキュメント(あなたが引用したのと同じURL)によると、DECIMAL/NUMERIC列はbase10の9桁の各グループを4バイトにパックし(floor(29 / 9) * 4 = 3 * 4 = 12最初の27桁のバイトを合計します)、残りの2桁は追加のバイトを取り、最大13バイトになりますDECIMAL(29)列のストレージの。

または、として保存することもできますBINARY(12)

于 2012-06-11T11:52:33.317 に答える