1

私はこれが何度も議論されたことを知っています.私は私の特定のケースについてアドバイスを得ることを望んでいます.

私はソーシャルネットワーキングサイトに取り組んでいます.理論的には、mysqlデータベースに何十億もの写真を記録できるはずです.

レコードの一意の BIGINT ID を「oij43oj54oi52j43i」のような文字列 ID に置き換えるのは良い考えかどうか疑問に思っていました。

利点は次のとおりです。

  1. 挿入時に待機してmysqlから次の行番号を取得する必要があるBIGINT IDとは異なり、複数のサーバーに分散された複数のデータベースに写真レコードを挿入できました。

  2. /avatars/oij43oj54oi52j43i.jpg の場合、/avatars/120.jpg のように整数を入力して、ユーザーが画像にランダムにアクセスできる可能性は低くなります。この 2 番目の部分は URL の書き換えでも実行できることはわかっていますが、CPU/メモリをいくらか使用します。

「photo_comments」などの他のテーブルも、写真を参照するときに同じ文字列 ID を使用できます。

これらを念頭に置いて、文字列 ID を使用するのは悪い考えですか? 特に私が言及した最初の利点について、それは有効なポイント/利点/プラクティスですか?

ありがとうございました。

編集: 文字列が一意であることを確認するには、ユーザー ID を文字列に追加します。タイムスタンプ マイクロ秒を使用する php uniqid()を使用することもできます。

4

1 に答える 1

3

このようなものを構築している場合は、Instagram からページを取得し、連続した ID の代わりに UUID を使用する必要があります。これらには多くの利点がありますが、最大の利点は、スケーラブルでシャーディング可能であることです。

ほとんどの言語には単純な UUID ライブラリがあり、MySQL にも最後の手段として使用できる UUID ジェネレーターがあります。

Instagram のバージョンは純粋な UUID ではなく、十分に類似したものの 64 ビット バージョンです。

基本的に、インスピレーションを得るには、Instagram のシャーディングと ID に関するこの記事を読む必要があります。

于 2012-07-30T17:54:50.273 に答える