Archives du blog

Les bases de données NoSQL

Dans cet article, je vais vous parler des bases de données NoSQL. Vous allez me dire mais qu’est-ce que c’est que ce truc ? Si je traduis littéralement NoSQL nous pourrions croire  que cela signifie « Non SQL » mais ne vous y trompez pas NoSQL signifie « Not only SQL », en français « pas seulement SQL ».

Dans le développement d’applications web comportant une base de données, il est souvent utilisé un système de gestion de base de données relationnelle (SGBDR). Les SGBDR possèdent des mécanismes permettant notamment de garantir la cohérence des données, la concurrence d’accès, la reprise sur panne. Ils utilisent le SQL qui permet d’assurer l’intégrité des données, de réaliser des requêtes complexes pouvant faire intervenir plusieurs tables par l’intermédiaire des jointures, et l’implémentation des transactions, qui permet de gérer les propriétés ACID (Atomicité, Cohérence, Isolation, Durabilité).

Dans la plupart des cas une base de données relationnelle avec un schéma relationnel correctement fait suffira pour répondre à vos besoins. Maintenant s’il faut stocker un énorme volume de données (Peta octets), avec beaucoup d’utilisateurs susceptibles de générer un fort trafic, une architecture distribuée devient nécessaire.

Pour faire simple, une architecture distribuée permet, sur un grand nombre de machines, de répartir les données (scaling des données) et également de distribuer les traitements (scaling des traitements). L’ajout de machines supplémentaires (scalabilité horizontale) est également plus simple.

Dans les environnements distribués est appliqué le théorème CAP (Eric BREWER, 2000) :

  • Consistency (cohérence) : tous les nœuds du système voient exactement les mêmes données au même moment
  • Availability (disponibilité) : la perte de nœuds n’empêche pas les survivants de continuer à fonctionner correctement, les données restent accessibles
  • Partition tolérance (tolérance au partitionnement) : aucune panne moins importante qu’une coupure totale du réseau ne doit empêcher le système de répondre correctement, en cas de partitionnement en sous-réseaux, chacun doit pouvoir fonctionner de manière autonome.

Qui stipule qu’il est impossible d’avoir à un instant T les 3 propriétés, seulement 2 sont possibles :

AC (Availability/Consistency) ou AP (Availability/Partition tolérance) ou CP (Consistency /Partition tolérance).

Les SGBDR sont des systèmes AC. Les mécanismes qu’ils offrent, notamment les propriétés ACID des transactions, les jointures et intégrité référentielle sont difficiles à maintenir tout en conservant des performances correctes.

Pour pallier à ce problème de performance en environnement distribué, entre en jeu les SGBD NoSQL. Ceux sont des systèmes AP ou CP. Ces SGBD font un compromis sur les propriétés ACID des transactions et la notion de schéma relationnel n’existe plus.

Il existe 4 types de base de données NoSQL :

  • Clé/valeur : Les données sont représentées par un couple clé/valeur. La valeur peut être une simple chaine de caractères ou un objet sérialisé. Cette structure très simple à un impact considérable sur les requêtes, toute l’intelligence qu’apporté auparavant les requêtes SQL devra être fait dans l’applicatif qui interroge la base de données.
    Quelques solutions de ce type : Riak, Redis, Voldemort
  • Orienté colonne : c’est le modèle qui se rapproche le plus d’une table du modèle relationnel. La différence est que le nombre de colonne est dynamique, il peut varier d’un enregistrement à un autre ce qui évite d’avoir des colonnes avec valeur NULL.
    Quelques solutions de ce type : Hbase, Cassandra
  • Orienté document : Ce modèle est un dérivé du modèle clé/valeur. La valeur sera un document de type JSON ou XML. L’avantage de ce modèle est de pouvoir récupérer par l’intermédiaire d’une clé une grande quantité d’information structurée de manière hiérarchique.
    Quelques solutions de ce type : MongoDB, CouchDB, RavenDB
  • Orienté graphe : ce modèle se base sur la théorie des graphes, il s’appuie sur les notions de nœuds, de relations et de propriétés qui leur sont rattachées.
    Quelques solutions de ce type : Neo4j, OrientDB

Voilà pour la présentation des bases NoSQL.
Ce type de base est vraiment utilisé dans des cas bien spécifiques, donc avant de vous lancer dans le développement d’une application avec une base NoSQL réfléchissez bien.
Il existe beaucoup d’autres bases NoSQL, vous pourrez en trouver une liste sur le site NoSQL Databases.

Si vous avez des questions n’hésitez pas à laisser un commentaire.

Installation Apache 2.4 / PHP 5.4 / SQL Serveur 2008 R2 Express sous Windows 7 64 bits

Dans cet article, je vais vous expliquer comment mettre en place une architecture Apache 2.4.3, PHP 5.4.7 et SQL Serveur 2008 R2 sur Windows 7 64 bits.
Architecture peut être moins répandue qu’Apache/PHP/MySQL, mais que j’ai déjà rencontré donc j’ai décidé de faire cet article.
Il existe plusieurs configurations possibles pour que PHP fonctionne sous Apache, ici je ferai une configuration en tant que module d’Apache.

Les éléments nécessaires

Regardons d’un peu plus près ce dont nous avons besoin pour mettre en place cette architecture.

Apache

Téléchargez les fichiers httpd-2.4.3-win32.zip et php5apache2_4.dll-php-5.4-win32.zip fournis par le site http://www.apachelounge.com/download.
Un pré-requis obligatoire pour faire fonctionner cette version d’apache est d’installer Visual C++ 2010 SP1 Redistributable Package x86.

PHP

Un pré-requis obligatoire pour faire fonctionner PHP est d’installer Package redistribuable Microsoft Visual C++ 2008 (x86).
Sur le site http://windows.php.net/download/, pour sa branche 5.4 PHP fournit 2 versions, thread safe et non thread safe.
Pour une installation en tant que module d’Apache il faut prendre la version thread safe.
Pour une installation en CGI ou FastCGI, prendre la version non thread safe.

SQL Serveur 2008 R2

Téléchargez SQLEXPRWT_x64_FRA.exe  contenant le moteur SQL 2008 R2 et SQL Server Management Studio.
L’extension permettant à PHP de communiquer avec SQL Serveur 2008 n’est plus incluse dans le package PHP mais fournie par Microsoft. Il faut télécharger le pilote SQLSRV30.exe
Enfin, dernier élément à récupérer, le Microsoft® SQL Server® 2012 Native Client 64 bits. Le fichier a télécharger se trouve vers le milieu de page, allez jusqu’à la rubrique COMPOSANTS DE MICROSOFT SQL SERVER CONNECTIVITY FEATURE PACK.

Nous avons tous les éléments nécessaires pour mettre en place notre architecture.
Voici la structure de dossiers que je vais utiliser pour cette installation, vous pouvez bien évidement faire la structure comme bon vous semble.
E:\serveur_web\Apache24 -> contient les fichiers du serveur Apache
E:\serveur_web\php -> contient les fichiers de PHP
E:\serveur_web\mssql -> dossier d’installation de SQL Serveur 2008 R2 Express.

L’installation

Apache 2.4.3

Si nécessaire, installez Visual C++ 2010 SP1 Redistributable Package x86.
Extraire le dossier Apache24 contenu dans httpd-2.4.3-win32.zip vers le dossier e:\serveur_web.
Modifier le fichier e:\serveur_web\Apache24\conf\httpd.conf
Recherchez ServerRoot et mettre ServerRoot "e:\serveur_web\Apache24"
Recherchez DocumentRoot et mettre DocumentRoot "e:\serveur_web\Apache24\htdocs"
Recherchez <Directory> et mettre <Directory "e:\serveur_web\Apache24\htdocs">
Recherchez ServerName et mettre ServerName 127.0.0.1:80
Enregistrer le fichier.
Lancez une invite de commandes exécuter en tant qu’administrateur.
Saisir e:\serveur_web\Apache24\bin\httpd –t pour vérifier la syntaxe du fichier httpd.conf.
Si tout est OK saisir e:\serveur_web\Apache24\bin\httpd –k install pour installer le service Apache.
Saisir la commande sc query apache2.4, si vous obtenez un message de ce type

SERVICE_NAME: apache2.4
TYPE               : 10  WIN32_OWN_PROCESS
STATE              : 1  STOPPED
WIN32_EXIT_CODE    : 0  (0x0)
SERVICE_EXIT_CODE  : 0  (0x0)
CHECKPOINT         : 0x0
WAIT_HINT          : 0x0

c’est que le service est correctement installé.
Il ne reste plus qu’à démarrer le service, saisir sc start apache2.4.
Enfin, depuis votre navigateur préféré allez à l’adresse http://localhost ou http://127.0.0.1, si It works ! apparait alors Apache fonctionne correctement.

PHP 5.4.7 en tant que module d’Apache

Extraire le contenu du fichier php-5.4.7-Win32-VC9-x86.zip dans e:\serveur_web\php.
Renommer php.ini-developpement en php.ini.
Dans php.ini décommenter extension_dir et mettre extension_dir="e:\serveur_web\php\ext"
Extraire de php5apache2_4.dll-php-5.4-win32.zip la dll du répertoire PHP 5.4.7 dans e:\serveur_web\php.
Modifier le fichier httpd.conf en ajoutant les lignes suivantes en fin de fichier

PHPIniDir "e:\serveur_web\php" (ne pas mettre de \ en fin de chemin)
LoadModule php5_module "e:\serveur_web\php\php5apache2_4.dll"
<FilesMatch \.php$>
SetHandler application/x-httpd-php
</FilesMatch>

et en ajoutant index.php dans DirectoryIndex -> DirectoryIndex index.html index.php
Pour tester le bon fonctionnement de PHP, avec notepad créez un fichier info.php contenant <?php phpinfo(); ?>
Enregistrer ce fichier dans e:\serveur_web\apache24\htdocs
Dans votre navigateur tapez l’adresse http://localhost/info.php, si tout est bien configuré vous devez voir toute la configuration de PHP apparaitre.

SQL Serveur 2008 R2 Express

Exécuter en tant qu’administrateur SQLEXPRWT_x64_FRA.exe.
Le programme d’installation démarre, patientez…
Cliquez sur Nouvelle installation ou ajout de fonctionnalité à une installation existante
Accepter les termes du contrat de licence.
Sélection de fonctionnalités -> il n’y a rien à modifier.
Configuration de l’instance -> vous pouvez donner le nom que vous souhaitez à votre instance, personnellement je conserve le nom proposé SQLExpress et mon répertoire racine de l’instance sera e:\serveur_web\mssql
Configuration du serveur
->  je ne touche à rien.
Configuration du moteur de base de données -> je ne modifie rien, le compte avec lequel est réalisée l’installation sera par défaut administrateur SQL Serveur.
Création de rapports d’erreurs -> je ne modifie rien.
L’installation de SQL Serveur commence… patientez…
Votre serveur SQL Serveur 2008 R2 est installé !

Maintenant démarrons SQL Management Studio (Démarrer > Tous les programmes > Microsoft SQL Server 2008 R2 > SQL Server Management Studio)
Une boite de dialogue Se connecter au serveur s’ouvre.
Dans la zone Nom du serveur saisissez le nom de votre machine.
Pour Authentification laissez Authentification Windows
Cliquez sur le bouton Se conn.
Un message d’erreur peut apparaitre signifiant que SQL Management Studio ne peut pas communiquer avec le moteur de base de données.
Pour résoudre ce problème, il faut lancer le gestionnaire de configuration (Démarrer > Tous les programmes > Microsoft SQL Server 2008 R2 > Outils de configuration > Gestionnaire de configuration SQL Server)
Aller dans Configuration du réseau SQL Server > Protocoles pour SQLEXPRESS
Double cliquez sur TCP/IP et allez sur l’onglet Adresse IP
Allez jusqu’à IPAll et saisir 1433 dans Port TCP
Allez sur l’onglet Protocol et mettre Enabled à Yes
Redémarrer le service SQL Server
Tenter à nouveau une connexion dans SQL Management Server et la connexion doit réussir.

Pilote PHP pour SQL Serveur

Installer Microsoft® SQL Server® 2012 Native Client 64 bits.
Installer SQLSRV30.exe.
Aller dans le dossier d’installation du pilote, ce dossier contient plusieurs fichiers dll et la documentation sur ce pilote.
Copier les fichiers php_sqlsrv_54_ts.dll et php_pdo_sqlsrv_54_ts.dll dans e:\serveur_web\php\ext
Modifier le fichier e:\serveur_web\php\php.ini en ajoutant dans la partie Dynamic Extensions

extension=php_pdo_sqlsrv_54_ts.dll
extension=php_sqlsrv_54_ts.dll

Enregistrer le fichier puis redémarrer le service Apache.
Dans votre navigateur tapez l’adresse http://localhost/info.php, puis faites une recherche sur le mot sqlsrv, vous devez voir pdo_sqlsrv et sqlsrv.

Maintenant vous avez une architecture Apache/PHP/SQL Serveur qui fonctionne, vous n’avez plus qu’à vous lancer dans le développement 🙂

Si vous avez des questions, n’hésitez pas à laisser un commentaire.