データベース テーブルのルックアップを処理するために、次のコードを数年間使用しています。現在、6 つのホストにわたってテーブルを分割しています。検索コードは次のとおりです。
$db_servers = Array(
'db-1','db-2','db-3'
//you get the idea
);
$full_table = 'mydatabase.mytable'; //just an example...obviously
$hash = sprintf('%u', crc32($full_table));
$host = $db_servers[($hash % $db_server_count)];
この「アルゴリズム」には、高速でかなりランダムであるという利点があります。ただし、クラスターに新しいノードを追加するたびに、別のホストに移動する必要がある不要な量のテーブルがあるように見えるため、リバランスにはかなりの時間がかかります。これは大きな問題ではありません。リバランス スクリプトを作成できたので、リバランス中にダウンタイムが発生することはありません。むしろ、それが完了するまで、わずかなパフォーマンスのペナルティがあります。
私の質問は、新しいホストが追加されたときに大量のリバランスを行わずに、この形式の一貫したハッシュを達成する他のアルゴリズムがあるかどうかです。私はこのトピックの調査を続けていますが、Stack Overflow には、本番環境でうまく機能することがわかっている巧妙なソリューションがあると考えていました。