Web アプリケーションの開発に伴い、データ処理の複雑さはますます高まっています。より優れたスケーラビリティとパフォーマンスを提供するために、多くのアプリケーションは NoSQL データベースを採用しています。 Memcached は、データの高可用性を提供しながら、Web アプリケーションの応答時間を大幅に改善できる人気の NoSQL インメモリ キャッシュです。
ただし、アプリケーションが成長するにつれて、Memcached の 1 つのインスタンスのストレージ容量が限界に達する可能性があります。この場合、Memcached データベース シャーディング テクノロジを使用して、データを複数のサーバーに分散する必要があります。この記事では、PHP を使用して Memcached データベース シャーディングを実装する方法を学びます。
Memcached サーバーのシャーディング
Memcached では、ハッシュ関数を使用してデータのキーを特定のサーバーにマッピングします。ハッシュ関数には MD5、CRC32 などが使用できます。データが追加または更新されると、Memcached はハッシュ関数を使用してキーを計算し、どのサーバーを使用するかを決定します。 Memcached データベース シャーディングを使用する場合、ハッシュ関数と同じ方法を使用してキーを特定のサーバーにマップする必要があります。これは、次の手順で実行できます。
$servers = array(
'192.168.1.101:11211', // Server 1 '192.168.1.102:11211', // Server 2 '192.168.1.103:11211' // Server 3
);
$hash = md5('mykey');
次のコードを使用して実装します。
$hash = md5('mykey');
$hash_number = intval("0x".substr( $hash, 0, 8));
$server_index = $hash_number % count($servers);
$server = $servers[$server_index];
この例では、最初に次を使用します。 MD5 ハッシュ ハッシュは、「mykey」をハッシュ値にマップします。次に、32 ビットの符号なし整数値を計算し、サーバー配列の長さを使用してその値の係数を計算します。これによりサーバー インデックスが得られ、そのインデックスを使用してサーバー リストから正しいサーバー IP アドレスとポート番号を取得できます。
$memcached = new Memcached();
$memcached->addServers($servers);
$hash = md5('mykey');
$hash_number = intval("0x".substr($hash, 0, 8));
$server_index = $hash_number % count($servers);
$server = $servers[$server_index] ;
$memcached->setByKey($server, 'mykey', 'data', 60);
この例では、まず、次のメソッドを使用して Memcached クラスの addServers() を呼び出します。サーバー配列 使用するサーバーのリストを指定するメソッド。次に、ハッシュとサーバーを使用して setByKey() メソッドを呼び出し、データを正しいサーバーに保存します。有効期限 (60 秒) も提供します。
$hash = md5('mykey');
$hash_number = intval("0x".substr($hash, 0, 8));
$server_index = $hash_number % count($servers);
$server = $servers[$server_index];
$data = $memcached->getByKey($server, 'mykey');
この例では、ハッシュ値とサーバーを使用して getByKey() メソッドを呼び出し、正しいサーバーからデータを取得します。キーが存在しない場合は null を返します。
概要
Memcached を使用する場合、シャーディング テクノロジを使用して複数のサーバーにデータを保存できます。 PHP を使用すると、Memcached 拡張ライブラリの Memcached クラスを使用できます。このクラスは、サーバーの追加、セットアップ、データの取得のためのさまざまなメソッドを提供します。ハッシュ関数を使用すると、キーのハッシュを計算し、それを正しいサーバーにマッピングできます。ハッシュ関数と間隔の割り当ての選択は、データのバランスとパフォーマンスに直接影響することに注意してください。
以上がPHP で Memcached データベース シャーディングを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。