Introducere în interfața memcached pentru mysql innodb

phpMySQLInnoDBMemCache

Introducere în interfața memcached pentru mysql innodb

În MySQL 5.6, a fost creat un magazin compatibil memcache-cheie, bazat pe motorul Innodb.

InnoDB Memcache Daemon vă oferă o stabilitate innodb pentru tipurile de date cheie-valoare, acces la care poate fi organizat printr-un protocol memcached mai rapid și optimizat. Dacă utilizați acest protocol, veți trece peste parsarea interogării, optimizarea acestuia și alte părți ale procesării care nu sunt necesare.







Cu mysqlnd_memcache, vă puteți răsfoi în mod transparent cererile la o astfel de interfață compatibilă cu memcache.

Pachetele standard MySQL 5.6 care apar cu Ubuntu (Trusty) nu includ pluginul memcache. Pentru a utiliza acest plugin, trebuie să-l instalați din depozitele oficiale apt-MySQL-I (pentru Debian 7.x Wheezy, Ubuntu 12.04 Precise și Ubuntu 14.04 Trusty).

După ce ați instalat MySQL 5.6 (sau mai mult), trebuie să vă conectați la MySQL sub superuser și să faceți următoarele:

Scriptul innodb_memcached_config.sql face mai multe lucruri, iar primul lucru pe care îl face este să creeze o bază de date innodb_memcache. care conține trei tabele:

  1. cache_policies. Acest tabel stochează regulile pentru modul în care sunt executate comenzile GET. SET. DELETE și FLUSH.
  2. containere. acest tabel conține o listă cu tabelele pe care le puteți accesa folosind memcache
  3. config_options - magazine Acest tabel setări memcache, - și anume, mai multe coloane valori despărțitoare - separator (bara implicit verticală "|") și un separator de tabele de tratament table_map_delimiter (punctul de default "")

Al doilea lucru pe care scriptul îl face este încărcarea plugin-ului în sine și rularea daemonului memcache în interiorul MySQL.

Acum, totul este gata să utilizeze acest plugin.

Crearea unui spațiu de stocare memcache

Deoarece motorul memcache stabilește anumite cerințe de tabelă, nu fiecare tabel innodb poate fi utilizat automat ca un astfel de magazin. Pentru a utiliza, trebuie să creați o așa-numită colecție.

Fiecare colecție are un nume care este folosit pentru a se referi la el prin memcache, și conține, de asemenea, un număr de coloane:

  • nume. nume pentru a accesa colecția prin memcache
  • db_schema. numele bazei de date
  • db_table. nume de tabel
  • key_columns. numele coloanei care conține cheia (nu se confundă cu pluralul, aceasta este o coloană)
  • value_columns. Numele de coloane sunt separate prin virgule, care conțin o valoare. În valoarea memcache, toate valorile acestor coloane vor fi separate de o bară verticală (așa cum este indicat în tabelul config_options)
  • steaguri. care memcache steaguri pentru a instala
  • cas_column. numele coloanei pentru valoarea CAS stabilită de memcache
  • expire_time_column. numele coloanei în care este stocat timpul de "decolorare" (în secunde) sau 0 dacă nu "se estompează" niciodată
  • unique_idx_name_on_key. Numele indexului care impune constrângerea UNIQUE pe coloana cheie. Dacă coloana de chei este o cheie primară, specificați un primar






Pentru a organiza spațiul de stocare, vom crea o nouă bază de date kv_data și tabelul kv_store în el:

Apoi, vom notifica pluginul despre stocarea noastră prin crearea unui container:

După ce faceți acest lucru, trebuie să așteptați un pic pentru ca aceasta să aibă efect sau să reporniți MySQL.

Folosind interfața memcache

Acum, că aveți în sus și să fie difuzate interfață memcache InnoDB, aveți posibilitatea să lipiți (a se insera) datele din baza de date precum și un tabel regulat sau, desigur, prin protocolul memcache - care se poate face folosind telnet-o.

Când se utilizează protocolul memcache - minim implicit și - numărul de operațiuni înainte ca datele vor fi eliminate în InnoDB, 32 este, așa cum este indicat în configurarea daemon_memcached_w_batch_size. Aceasta înseamnă că datele sunt vizibile în MySQL la fiecare 32 de operații. Aceasta este plata pentru productivitate. O excepție de la această regulă este utilizarea replicării binlog, dacă este setată permanent la 1.

Pentru ca MySQL să fie accesibil imediat prin memcache, trebuie:

Pentru a utiliza interfața memcache cu telnet, utilizați-o astfel:

Utilizarea mai multor colecții

Implicit, datele sunt stocate fie într-o colecție numită implicită, fie, dacă nu există, în prima colecție din tabelul de colectare.

Pentru a accesa datele dintr-o altă colecție, aveți două opțiuni:

Primul este cel mai apropiat de operatorul MySQL-USE USE. Vă referiți pur și simplu la colecția însăși și apoi orice solicitare operează pe această colecție până când este schimbată în altă colecție.

Înainte de numele colecției, pentru ao deosebi de chei, un prefix este prefixat - două caractere @:

Al doilea este să utilizați numele complet. În acest caz, table_map_delimeter intră doar în joc. prin intermediul căruia am pus înaintea colecției colecția prefix @@ și după table_map_delimeter. Astfel, accesarea test.key devine @@ kv_data.test.key

Vă recomandăm să utilizați întotdeauna această sintaxă, deoarece puteți schimba în mod accidental colecția în unele secțiuni de cod numite fără a reveni la colecția anterioară.

Utilizând pluginul mysqlnd_memcache

Acum, puteți accesa pur și simplu datele dvs. prin interfața memcache, utilizând extensia memcached sau memcache (extensia memcached, extensia Memcache). Inclusiv, puteți configura managerul de sesiuni pentru a utiliza această abordare. De asemenea, puteți utiliza interogări SQL obișnuite. Cu toate acestea, cu pluginul mysqlnd_memcache, puteți redirecționa în mod transparent cererile SQL către interfața memcache atunci când este necesar.

În mod implicit, interogările sunt mapate la expresia obișnuită specificată în constanta MYSQLND_MEMCACHE_DEFAULT_REGEXP:

Dacă interogarea se potrivește, pluginul verifică faptul că în setările de colectare sunt afișate numai câmpurile din tabel și că în secțiunea WHERE există doar o singură condiție cu o simplă comparație cu cheia.

Pentru exemplul nostru, această condiție va corespunde următoarei interogări:

Cu toate acestea, niciuna dintre acestea nu va fi:

Astfel de solicitări pot fi efectuate folosind mecanismele uneia dintre extensiile: mysql, mysqli sau pdo și vor fi interceptate invizibil pentru dvs.

Pluginul mysqlnd_memcache nu procesează cereri de scriere.

În ciuda acestei limitări, utilizarea sa poate îmbunătăți cu siguranță codul dvs. (astfel încât să nu aveți nevoie să implementați un apel pentru memcache / memcached API) și obțineți un câștig de performanță mare cu modificări minore.

Înregistrarea, Replicarea și Pool-ul Memcache

Memcached este cunoscut pentru configurația sa ușoară a bazei memcached pentru echilibrarea încărcării și toleranța la erori, dar ce se întâmplă cu interfața memcache pentru InnoDB? Într-un mod similar cu handler este prezent în replicarea MySQL, faptul că fiecare sclav poate fi folosit ca Memcache, și serverul numai de citit, cu toate acestea, aceleași reguli pentru separarea de citire și scriere sunt utile atunci când se lucrează cu Memcache-mânca.

Trebuie să vă asigurați că utilizați numai plug-in-ul mysqlnd_memcache pentru a accesa piscina dvs. și pentru ao asocia cu plug-in-ul mysqlnd_ms pentru a organiza separarea dintre citire și scriere. Cu toate acestea, acest lucru înseamnă că vă pierdeți ocazia de a profita de interfața Memcache de înaltă performanță de scris.

Deoarece nu există nici o modalitate de a indica memcache (d) extinderea pe care serverele sunt utilizate numai în modul-on-citit, este imposibil să se utilizeze standardul maestru topologie de replicare + sclavi piscină memcached-uri.

concluzie

Interfața Memcached pentru InnoDB este o modalitate mult mai rapidă de a utiliza MySQL pentru magazine simple cu valoare cheie, dar are toate avantajele unui motor InnoDB excelent.

Deși nu este la fel de rapid ca memcached în sine, aceasta vă permite să eliminați "o altă balama" în infrastructura dvs., în timp ce fiind un simplu înlocuitor pentru memcached.

În următorul articol din această serie, vom examina cache-ul interogărilor pentru îmbunătățiri suplimentare de performanță.







Trimiteți-le prietenilor: