ホームページ  >  記事  >  バックエンド開発  >  PHP で Memcached データベース シャーディングを実装する方法

PHP で Memcached データベース シャーディングを実装する方法

王林
王林オリジナル
2023-05-16 09:40:351020ブラウズ

Web アプリケーションの開発に伴い、データ処理の複雑さはますます高まっています。より優れたスケーラビリティとパフォーマンスを提供するために、多くのアプリケーションは NoSQL データベースを採用しています。 Memcached は、データの高可用性を提供しながら、Web アプリケーションの応答時間を大幅に改善できる人気の NoSQL インメモリ キャッシュです。

ただし、アプリケーションが成長するにつれて、Memcached の 1 つのインスタンスのストレージ容量が限界に達する可能性があります。この場合、Memcached データベース シャーディング テクノロジを使用して、データを複数のサーバーに分散する必要があります。この記事では、PHP を使用して Memcached データベース シャーディングを実装する方法を学びます。

Memcached サーバーのシャーディング

Memcached では、ハッシュ関数を使用してデータのキーを特定のサーバーにマッピングします。ハッシュ関数には MD5、CRC32 などが使用できます。データが追加または更新されると、Memcached はハッシュ関数を使用してキーを計算し、どのサーバーを使用するかを決定します。 Memcached データベース シャーディングを使用する場合、ハッシュ関数と同じ方法を使用してキーを特定のサーバーにマップする必要があります。これは、次の手順で実行できます。

  1. サーバー リストの定義
    Memcached シャーディングでは、データを複数のサーバーに保存する必要があります。サーバーの IP アドレスとポート番号を含む配列を定義できます。例:

$servers = array(

'192.168.1.101:11211', // Server 1
'192.168.1.102:11211', // Server 2
'192.168.1.103:11211' // Server 3

);

  1. ハッシュ値の計算
    データをハッシュするには、次のものが必要です。ハッシュ関数を使用します。 Memcached は、MD5 や CRC32 など、いくつかの組み込みハッシュ関数を提供します。それらのいずれかを使用してハッシュ値を計算できます。たとえば、MD5 ハッシュ関数を使用します。

$hash = md5('mykey');

  1. サーバーの選択
    ハッシュ関数を使用して計算されたハッシュ値実際の Memcached サーバーにマップされます。これは、ハッシュ値を間隔に分割することで実行できます。たとえば、サーバーが 3 台ある場合、ハッシュを 0 ~ 32、33 ~ 64、および 65 ~ 96 の範囲にマッピングします。これは、次の手順で実行できます。
  • 32 ビット符号なし整数のハッシュを計算します。
  • 整数を間隔に分割します。
  • 間隔サーバーへ

次のコードを使用して実装します。

$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 アドレスとポート番号を取得できます。

  1. データの保存
    このステップでは、Memcached サーバーにデータを保存します。サーバー リストを使用する場合は、Memcached 拡張ライブラリの Memcached クラスを使用し、サーバー リストをそれらに渡す必要があります。同時に、前のステップのハッシュ値とサーバーを使用して、データが保存されている実際のサーバーを決定する必要もあります。例:

$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 秒) も提供します。

  1. データの取得
    シャーディングを使用する場合は、getByKey() メソッドを使用して正しいサーバーからデータを取得する必要があります。例:

$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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。