Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk melaksanakan pembahagian pangkalan data Memcached dalam PHP

Bagaimana untuk melaksanakan pembahagian pangkalan data Memcached dalam PHP

王林
王林asal
2023-05-16 09:40:35982semak imbas

Dengan pembangunan aplikasi web, kerumitan pemprosesan data semakin tinggi. Untuk menyediakan kebolehskalaan dan prestasi yang lebih baik, banyak aplikasi telah menggunakan pangkalan data NoSQL. Memcached ialah cache dalam memori NoSQL yang popular yang boleh meningkatkan masa tindak balas aplikasi web dengan ketara sambil turut menyediakan ketersediaan data yang tinggi.

Walau bagaimanapun, apabila aplikasi anda berkembang, kapasiti storan satu contoh Memcached mungkin mencapai hadnya. Dalam kes ini, teknologi pembahagian pangkalan data Memcached perlu digunakan untuk menyebarkan data merentasi berbilang pelayan. Dalam artikel ini, kita akan belajar bagaimana untuk melaksanakan pembahagian pangkalan data Memcached menggunakan PHP.

Sharding pelayan Memcached

Dalam Memcached, fungsi cincang digunakan untuk memetakan kunci data ke pelayan tertentu. Fungsi hash boleh menjadi MD5, CRC32, dsb. Apabila data ditambah atau dikemas kini, Memcached menggunakan fungsi cincang untuk mengira kunci dan menentukan pelayan yang hendak digunakan. Apabila menggunakan pembahagian pangkalan data Memcached, kita perlu memetakan kunci ke pelayan tertentu menggunakan kaedah yang sama seperti fungsi cincang. Ini boleh dilakukan dengan mengikut langkah:

  1. Tentukan senarai pelayan
    Dalam pembahagian Memcached, data perlu disimpan dalam berbilang pelayan. Kita boleh menentukan tatasusunan yang mengandungi alamat IP dan nombor port pelayan. Contohnya:

$servers = array(

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

);

  1. Kira nilai cincang
    Untuk mencincang data, anda perlu menggunakan fungsi cincang A. Memcached menyediakan beberapa fungsi cincang terbina dalam, termasuk MD5 dan CRC32. Kita boleh menggunakan mana-mana daripadanya untuk mengira nilai cincang. Contohnya menggunakan fungsi cincang MD5:

$hash = md5('mykey');

  1. Pilih pelayan
    Nilai cincang yang dikira menggunakan fungsi cincang harus Peta ke pelayan Memcached sebenar. Ini boleh dilakukan dengan membahagikan nilai cincang ke dalam selang waktu. Contohnya, jika terdapat tiga pelayan, kami memetakan cincangan kepada julat 0-32, 33-64 dan 65-96. Ini boleh dilakukan dengan langkah berikut:
  • Kira cincang bagi integer 32-bit tidak bertanda
  • Bahagikan integer itu kepada selang
  • Petakan selang Ke pelayan

gunakan kod berikut untuk melaksanakan:

$hash = md5('mykey');
$hash_number = intval("0x".substr( $hash, 0, 8));
$server_index = $hash_number % count($servers);
$server = $servers[$server_index];

Dalam contoh ini, kita mula-mula menggunakan MD5 hash Hash memetakan "mykey" kepada nilai hash. Kami kemudian mengira nilai integer tidak bertanda 32-bit dan mengira modulus nilai itu menggunakan panjang tatasusunan pelayan. Ini akan memberi kami indeks pelayan dan kami boleh menggunakan indeks itu untuk mendapatkan alamat IP pelayan dan nombor port yang betul daripada senarai pelayan.

  1. Simpan data
    Dalam langkah ini, kami menyimpan data pada pelayan Memcached. Dalam kes menggunakan senarai pelayan, kita perlu menggunakan kelas Memcached daripada perpustakaan sambungan Memcached dan menyerahkan senarai pelayan kepada mereka. Pada masa yang sama, kita juga perlu menggunakan nilai hash dan pelayan dari langkah sebelumnya untuk menentukan pelayan sebenar tempat data disimpan. Contohnya:

$memcached = Memcached baharu();
$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);

Dalam contoh ini, kami mula-mula memanggil addServers() kelas Memcached menggunakan tatasusunan pelayan Kaedah yang menentukan senarai pelayan untuk digunakan. Kami kemudian menggunakan cincang dan pelayan untuk memanggil kaedah setByKey() untuk menyimpan data ke dalam pelayan yang betul. Kami juga menyediakan masa tamat tempoh (60 saat).

  1. Mendapatkan data
    Dalam kes sharding, anda perlu menggunakan kaedah getByKey() untuk mendapatkan semula data daripada pelayan yang betul. Contohnya:

$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');

Dalam contoh ini, kami menggunakan nilai cincang dan pelayan untuk memanggil kaedah getByKey() untuk mendapatkan semula data daripada pelayan yang betul. Jika kunci tidak wujud, mengembalikan null.

Ringkasan

Apabila menggunakan Memcached, anda boleh menggunakan teknologi sharding untuk menyimpan data pada berbilang pelayan. Menggunakan PHP, kita boleh menggunakan kelas Memcached dalam perpustakaan sambungan Memcached, yang menyediakan pelbagai kaedah untuk menambah pelayan, menyediakan dan mendapatkan data. Menggunakan fungsi cincang, kami boleh mengira cincang kunci dan memetakannya ke pelayan yang betul. Ingat, pilihan fungsi cincang dan peruntukan selang akan secara langsung mempengaruhi keseimbangan dan prestasi data.

Atas ialah kandungan terperinci Bagaimana untuk melaksanakan pembahagian pangkalan data Memcached dalam PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn