0

私は最初から可能な限り柔軟でスケーラブルになりたいプロジェクトに取り組んでいます。私が懸念している問題は、Founders atWorkのJoshuaSchacterが最もよく説明している問題です。彼は、事前に計画したいと思っていた詳細の1つとしてそれを指摘しました。

1台のマシン、1つのデータベースを超えてスケ​​ーリングすることは、レプリケーションを使用する場合でも非常に困難です。そこにあるツールは完全に正しくありません。

たとえば、テーブルに物を追加して番号を付ける場合、番号が衝突するため、2台目のマシンもそれらに追加することはできません。それで、あなたは何をしますか?あなたはそれをするためにいくつかの完全に異なる方法を考え出さなければなりません。

番号セットを配布する中央サーバーがありますか、それとも番号ではないものを思いつきますか?乱数を使用して、それらが衝突しないことを望みますか?それが何であれ、自動割り当てされたIDは飛ばないだけです。

ここの誰かがこの問題に直面しましたか?自動インクリメントされたIDを超える方法は何ですか、または複数のサーバーでIDを拡張する方法はありますか?

4

2 に答える 2

2

GUID / UUID (グローバル/ユニバーサル一意識別子)を使用します。理論的には、複数のマシンで一意であることが保証されています。

于 2009-09-18T00:56:28.093 に答える
1

GUID、衝突の可能性は天文学的に低いです。

また、GUID 内のタイムスタンプをエンコードできる SmartGUID (通常はCOMB GUIDSと呼ばれます-この分析、特に 7 ページを参照) を使用することもできます。そのため、レコードの作成日情報を「無料で」取得できます。レコード作成日時のタイムスタンプ列を保存します。これにより、32 ビット整数から 128 ビット GUID に移動する際に失ったものの一部が返されます。これらは、クラスター化されたインデックスや並べ替えに役立つ通常の GUID とは異なり、単調であることも保証できます。

また、通常の自動インクリメント ID または自動番号を持つある種のサーバー/データベース ID で複合キーを使用することもできます。

于 2009-09-18T00:56:15.927 に答える