PHP  »  Articoli  »  Programmazione Php 

Utilizzare le operazioni sui bit di PHP per ottimizzare il database

di: Ermanno Ancona     10 Febbraio 2005

Introduzione

In questo articolo vedremo come sia possibile ottimizzare una tabella di database sfruttando, nella gestione dei dati memorizzati, le operazioni tra numeri binari. Per tranquillizzare quanti alle parole "numeri binari" siano tentati di abbandonare queste pagine, anticiperò che la trattazione sarà sia teorica che pratica. Inoltre l'applicazione dei concetti esposti risulterà molto semplice... tanto da poter dimenticare, dopo poco, la teoria su cui si poggia.

Immaginiamo di voler raccogliere le preferenze sportive dei nostri utenti fornendo loro la possibilità di scegliere una o più opzioni tra calcio, basket, tennis, sci e volley. La soluzione più comune consiste nel predisporre una tabella con tanti campi quante sono le possibili scelte. Tali campi funzioneranno da flag, ovvero saranno impostati a vero o falso a seconda che l'utente esprima o meno una preferenza per questa o quella disciplina sportiva. Un simile approccio risulta per alcuni aspetti poco flessibile e difficilmente scalabile. Ogniqualvolta si decida di ampliare il numero di opzioni disponibili si dovrà aggiungere un nuovo campo.

Ma, a pensarci bene, un numero intero non è altro che una serie di bit impostati a 0 o 1, quindi, una perfetta sequenza di flag adatta a memorizzare le informazioni desiderate. Sulla base di quest'idea potremmo sostituire i cinque campi previsti con un unico campo numerico intero. Chiaramente non dovrà risultare eccessivamente complicato manipolare i bit altrimenti pagheremmo l'ottimizzazione del database con un maggior appesantimento del codice PHP.

Le nozioni fondamentali

Per meglio inquadrare il discorso partiamo dalle basi. Come si è detto nel sistema binario un numero intero viene rappresentato mediante una sequenza di cifre (bit) che possono assumere solo i valori 1 o 0. 00000011 è un esempio di numero binario. In questo tipo di notazione la posizione delle cifre viene numerata da destra a sinistra a partire da zero. Il primo bit, quello di posizione zero, viene detto meno significativo mentre l'ultimo, quello più a sinistra, si definisce più significativo. La tabella seguente presenta gli elementi essenziali della rappresentazione binaria.

posizione 7 6 5 4 3 2 1 0
potenza decimale 27 26 25 24 23 22 21 20
valore decimale 128 64 32 16 8 4 2 1

In base allo schema proposto 00000011 corrisponde al numero decimale 3, infatti sono posti a 1 solo i bit di posizione zero e uno, con un semplice calcolo si ottiene (21 + 20) = (2 + 1) = 3; analogamente 00000100 corrisponde a 4 infatti l'unico bit posto a 1 è quello di posizione due, da cui 22= 4 e così via.

Torniamo al nostro esempio e cominciamo con l'assegnare un valore numerico a ciascuna opzione secondo il seguente schema:

calcio:1
basket:2
tennis:4
sci:8
volley:16

che corrisponde in termini di bit a:

calcio:00000001
basket:00000010
tennis:00000100
sci:00001000
volley:00010000

Come si può notare assegnando tali valori impostiamo ad 1 uno solo dei bit della sequenza, ovvero impostiamo il famoso flag. Per quanto riguarda la tabella di database, riferendoci a MySQL, potremo utilizzare un campo tinyint unsigned per memorizzare le preferenze degli utenti. Questo ci garantisce un range di valori da 0 a 255. Se prevedete un numero maggiore di opzioni utilizzate un campo intero più grande.

Per semplicità di esposizione creiamo un array corrispondente alle diverse discipline sportive. In una situazione reale sarà più comune estrarli mediante una query da una tabella del database destinata a contenere tali valori in modo che siano facilmente amministrabili.

<?php
$choice = array(
'calcio' => 1,
'basket' => 2,
'tennis' => 4,
'sci' => 8,
'volley' => 16
);
?>

Vediamo di seguito le principali operazioni con cui dovremo confrontarci adottando una simile soluzione.

Guide PHP

Guida Yii Framework

Come creare applicazioni Web in modo semplice e veloce con il...

Guida Zend Framework

Diventate professionisti dello sviluppo Web. Zend Framework è lo...

Guida Applicazioni Facebook con PHP

Come realizzare un'applicazione per Facebook. Dalle basi della...

Altre guide

Newsletter @PHP

Ogni lunedì, direttamente nella tua e-mail: script, articoli, guide e tutorial su PHP, MySQL e Apache.

Iscriviti alla newsletter

Altre newsletter

Corsi in aula

Corso PHP per Webmaster

11 Giugno 2012 a Milano
Disponibilità: 7 Posti

Corso Google AdWords Base

25 Giugno 2012 a Milano
Disponibilità: 7 Posti

Corso Google AdWords Base

05 Giugno 2012 a Roma
Disponibilità: 7 Posti