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.

Publicités

Bonne année 2014 !

Il n’est pas encore trop tard pour vous souhaiter à toutes et à tous une excellente année 2014 !

Apache 2.4 sous Windows : Sécurisation du service Apache

En cette période de canicule sur la France, j’en profite pour rédiger cet article qui va vous permettre d’augmenter la sécurité de votre serveur Apache.
Lorsque vous installez le service Apache sous Windows si vous regardez dans l’interface de gestion des services (services.msc) vous remarquerez qu’il fonctionne avec le compte « Système local ». Ce compte possède des droits élevés sur la machine mais aucun privilège sur le réseau. Afin d’éviter qu’un attaquant ne prenne possession de la machine hébergeant le service Apache, il peut etre utile de faire fonctionner ce service avec un compte qui n’a aucun privilège sur cette machine.

Cette configuration n’est pas très compliquée à réaliser et augmente le niveau de sécurité de votre serveur web.

Création du compte utilisateur

Il faut créer un utilisateur qui sera uniquement membre du groupe Utilisateurs.

Cliquez sur Démarrer, tapez lusrmgr.msc dans la barre de recherche
Faire un clic droit sur Utilisateurs puis Nouvel utilisateur…
Remplir le formulaire comme indiqué sur l’image ci-dessous
create_user
Pour le mot de passe, créer un mot de passe assez fort, d’au moins 8 caractères composé de lettre majuscule, minuscule, chiffres et caractères speciaux.
Cliquez sur Créer.

Attribution de droits pour ce compte

Il faut accorder le droit Ouvrir une session en tant que service au compte apache.

Cliquez sur Démarrer, tapez secpol.msc dans la barre de recherche
Aller dans Strategies locales > Attribution des droits utilisateur
Double cliquez sur Ouvrir une session en tant que service
Cliquez sur le bouton Ajouter un utilisateur ou un groupe…
Saisir le nom du compte créé précédemment apache.

Mise en place de droits sur des dossiers et fichiers

Il faut positionner des droits spécifiques sur certains fichiers et dossiers pour le compte apache comme indiqué dans le tableau ci-dessous.

Dossier/fichier Droits
e:\serveur_web\www Lecture
e:\serveur_web\apache24\htdocs Lecture
e:\serveur_web\Apache24\logs Modification
e:\serveur_web\Apache24\bin\httpd.exe Execution

Définition du compte de connexion du service

Il faut définir le compte apache comme compte de connexion du service.

Cliquez sur Démarrer, tapez services.msc dans la barre de recherche
Double cliquez sur le service Apache par défaut il se nomme Apache2.4
Cliquez sur le bouton Arrêter.
Quand le service est arrêté, cliquez sur l’onglet Connexion et renseignez les champs comme sur l’image ci-dessous.
service_connexion
Cliquez sur OK pour valider.
Redémarrer le service.

Si vous avez bien suivi cet article, le service apache doit démarrer sans problème. Si jamais ce n’est pas le cas, relisez l’article ou au pire demandez moi 🙂

Apache 2.4 sous Windows – version 2.4.6 disponible

Depuis le 22 Juillet 2013 la version 2.4.6 d’Apache est disponible.

Les versions 32 bits et 64 bits sont disponibles sur le site Apache lounge :

compilées en VC10 (Visual Studio 2010)
version 32 bits : http://www.apachelounge.com/download/
Pour utiliser cette version vous devez installer Microsoft Visual C++ 2010 SP1 x86

version 64 bits : http://www.apachelounge.com/download/win64/
Pour utiliser cette version vous devez installer Microsoft Visual C++ 2010 SP1 x64

compilées en VC11 (Visual Studio 2012)
version 32 bits : http://www.apachelounge.com/download/VC11/
Pour utiliser cette version vous devez installer la version 32 bits de Visual C++ pour Visual Studio 2012 update 3

version 64 bits : http://www.apachelounge.com/download/VC11/
Pour utiliser cette version vous devez installer la version 64 bits de Visual C++ pour Visual Studio 2012 update 3

PHP sous Windows – Nouvelles versions disponibles

Ca bouge dans le monde du PHP, depuis le 20 juin 2013 une nouvelle branche a vu le jour, il s’agit de la branche 5.5 avec dèjà la release 5.5.1 disponible.

Vous trouverez la liste des changements apportés par cette release ici

Les versions 5.4.17 et 5.3.27 de PHP sont disponibles.

Vous trouverez la liste des changements apportés par ces nouvelles version ci-dessous :
5.3.27
5.4.17

A noter que pour la branche 5.3 la release 27 est la dernière, il n’y aura maintenant plus que des mises à jour de sécurité. Il est vivement recommandé aux utilisateurs de PHP de passer aux branches 5.4 ou 5.5

Pour le téléchargement rendez vous sur http://windows.php.net/download

Apache 2.4 sous Windows – Nouvelle version disponible

Depuis le 25 Février 2013 la version 2.4.4 d’Apache est disponible.

Les versions 32 bits et 64 bits sont disponibles sur le site Apache lounge :
version 32 bits : http://www.apachelounge.com/download/
version 64 bits : http://www.apachelounge.com/download/win64/

Bonne et heureuse année !

Meilleurs voeux pour cette nouvelle année à toutes et à tous !

Nous avons réussi à passer le cap fatidique du 21 décembre 2012, youpi !

2013 nous voila, avec toujours plus d’articles (intéressants) sur mon blog 🙂

Apache 2.4 sous Windows – Configurer plusieurs versions de PHP

Il peut être intéressant de disposer de plusieurs versions de PHP sur un même serveur web que ce soit par exemple pour migrer une application en PHP 5.2.X vers une nouvelle version de PHP ou, d’héberger des applications qui utilisent PHP 5.3.X et d’autres PHP 5.4.X.
Pour réaliser une telle configuration il faut obligatoirement que PHP soit configuré en FastCGI.

Dans cet article je vais réaliser une configuration où les versions 5.2, 5.3 et 5.4 de PHP seront installées sur le même serveur.
Je ne parlerai pas de la configuration de PHP (fichier php.ini).

Pour réaliser cette configuration voici comment seront organisés mes dossiers

Le dossier d’Apache e:\serveur_web\apache24
Le dossier des sites web e:\serveur_web\www
Le dossier de PHP e:\serveur_web\php

Pré-requis : votre serveur apache est installé et opérationnel.

Installation de FastCGI dans Apache

Téléchargez le fichier mod_fcgid-2.3.7-win32.zip sur le site http://www.apachelounge.com/download/
Ouvrez ce zip, allez dans le dossier mod_fcgid puis extraire le fichier mod_fcgid.so dans e:\serveur_web\Apache24\modules.
Ouvrez le fichier e:\serveur_web\apache24\conf\httpd.conf
Dans la partie du fichier où se trouvent tous les loadmodule ajoutez à la fin la ligne

LoadModule fcgid_module modules/mod_fcgid.so

Mise en place de PHP

Téléchargez sur le site http://windows.php.net/download les fichiers zip des versions non thread safe de chacune des branches de PHP (5.2, 5.3, 5.4).
Créez un dossier par version de php dans e:\serveur_web\php puis décompressez les fichiers zip dans ces dossiers comme indiqué ci-dessous

Fichier Répertoire de destination
PHP 5.4.9
(php-5.4.9-nts-Win32-VC9-x86.zip)
e:\serveur_web\php\5_4_9
PHP 5.3.19
(php-5.3.19-nts-Win32-VC9-x86.zip)
e:\serveur_web\php\5_3_19
PHP 5.2.17
(php-5.2.17-nts-Win32-VC6-x86.zip)
e:\serveur_web\php\5_2_17

A la fin de ces 2 opérations, FastCGI est installé dans Apache et 3 versions de PHP sont disponibles.

Maintenant, nous allons voir comment utiliser une version différente de PHP pour chacun de nos serveurs virtuels.

Configuration de FastCGI

La plupart du temps lorsque l’on configure PHP dans Apache on rajoute les lignes dans le fichier httpd.conf qui permettent d’interpréter les fichiers php de n’importe lequel de  nos serveurs virtuels.

Pour pouvoir utiliser plusieurs versions de PHP, il faut procéder différemment.

Créez 3 fichiers conf dans le dossier e:\serveur_web\apache24\conf\extra pour chacune des versions de PHP comme indiqué ci-dessous.

PHP Fichier Contenu du fichier
5.4.9 Php54.conf FcgidInitialEnv PHPRC "E:\serveur_web\php\5_4_9"
<FilesMatch \.php$>
AddHandler fcgid-script .php
FcgidWrapper "e:\serveur_web\php\5_4_9\php-cgi.exe" .php
</FilesMatch>
5.3.19 Php53.conf FcgidInitialEnv PHPRC "E:\serveur_web\php\5_3_19"
<FilesMatch \.php$>
AddHandler fcgid-script .php
FcgidWrapper "E:\serveur_web\php\5_3_19\php-cgi.exe" .php
</FilesMatch>
5.2.17 Php52.conf FcgidInitialEnv PHPRC "E:\serveur_web\php\5_2_17"
<FilesMatch \.php$>
AddHandler fcgid-script .php
FcgidWrapper "E:\serveur_web\php\5_2_17\php-cgi.exe" .php
</FilesMatch>

Il faudra également ajouter ExecCGI à la directive Options pour chacun de vos serveurs virtuels dans le fichier httpd-vhosts.conf.

Tout est en place pour pouvoir utiliser plusieurs versions de PHP.

Réalisation de  la configuration avec plusieurs versions de PHP

Maintenant, je vais réaliser la configuration suivante

Serveur virtuel Version de PHP
http://www.site1.fr/ 5.2.17
http://www.site2.fr/ 5.3.19
http://www.site3.fr/ 5.4.9
http://www.site4.fr/ 5.4.9

En reprenant le fichier httpd-vhosts.conf créé dans l’article 2, ajoutez en début de section virtualhost un Include conf/extra/phpxx.conf suivant la version de PHP que vous souhaitez utiliser; par exemple, pour utiliser la version 5.2.17 pour le site1 ajoutez Include conf/extra/php52.conf dans la section virtualhost correspondant au site1.

N’oubliez pas également d’ajouter ExecCGI si vous ne l’avez pas fait auparavant.

Voici le contenu de ce fichier

<VirtualHost *:80>
Include conf/extra/php52.conf
ServerName www.site1.fr
DocumentRoot "E:/serveur_web/www/site1"
<Directory "E:/serveur_web/www/site1">
Options Indexes FollowSymLinks ExecCGI
AllowOverride All
Require all granted
</Directory>
CustomLog "logs/site1/site1-access.log" common
ErrorLog "logs/site1/site1-error.log"
</VirtualHost>
<VirtualHost *:80>
Include conf/extra/php53.conf
ServerName www.site2.fr
DocumentRoot "E:/serveur_web/www/site2"
<Directory "E:/serveur_web/www/site2">
Options Indexes FollowSymLinks ExecCGI
AllowOverride All
Require all granted
</Directory>
CustomLog "logs/site2/site2-access.log" common
ErrorLog "logs/site2/site2-error.log"
</VirtualHost>
<VirtualHost *:80>
Include conf/extra/php54.conf
ServerName www.site3.fr
DocumentRoot "E:/serveur_web/www/site3"
<Directory "E:/serveur_web/www/site3">
Options Indexes FollowSymLinks ExecCGI
AllowOverride All
Require all granted
</Directory>
CustomLog "logs/site3/site3-access.log" common
ErrorLog "logs/site3/site3-error.log"
</VirtualHost>
<VirtualHost *:80>
ServerName www.site4.fr
DocumentRoot "E:/serveur_web/www/site4"
<Directory "E:/serveur_web/www/site4">
Options Indexes FollowSymLinks ExecCGI
AllowOverride All
Require all granted
</Directory>
CustomLog "logs/site4/site4-access.log" common
ErrorLog "logs/site4/site4-error.log"
</VirtualHost>

Enregistrez le fichier puis redémarrez le serveur Apache.

Créez dans chacun des répertoires de vos serveurs virtuels un fichier index.php contenant

< ?php phpinfo(); ?>

Dans votre navigateur, saisir l’adresse http://www.site1.fr/index.php.
La page de configuration de PHP doit apparaitre et indiquez que vous utilisez la version 5.2.17.
Saisissez l’adresse http://www.site2.fr/index.php.
La page de configuration de PHP doit apparaitre et indiquez que vous utilisez la version 5.3.19.
Enfin saisissez l’adresse http://www.site3.fr/index.php.
La page de configuration de PHP doit apparaitre et vous indiquez que vous utilisez la version 5.4.9.
Vous pouvez remarquer que les 3 sites utilisent une version différente de PHP.
Maintenant si vous saisissez l’adresse http://www.site4.fr/index.php rien ne s’affiche.
C’est tout à fait normal puisqu’aucune configuration de PHP n’est déclarée dans la section du site4 donc Apache va regarder dans son fichier de configuration générale (httpd.conf) et il n’y a pas non plus de configuration de PHP.
Nous allons ajouter Include conf/extra/php54.conf à la fin du fichier httpd.conf.
Enregistrer le fichier puis redémarrer le serveur Apache.
Dans votre navigateur saisissez l’adresse http://www.site4.fr/index.php.
Cette fois ci la page de configuration de PHP doit apparaitre et indiquez que vous utilisez la version 5.4.9. Cela signifie que par défaut PHP 5.4.9 sera utilisé pour vos sites.
Vous pouvez retirer Include conf/extra/php54.conf du fichier httpd-vhosts.conf dans la section correspondant au site3.

Maintenant vous etes capables de faire fonctionner plusieurs versions de PHP sur un meme serveur 🙂
Comme d’habitude, n’hésitez pas à laisser un commentaire pour toutes questions ou autres à propos de cet article.

Apache 2.4 sous Windows – Configuration de PHP

Dans cet article je vais vous parler des configurations de PHP en module et en FastCGI sous Apache 2.4 sous Windows 7. Cette configuration fonctionne également sous Windows 2008 R2.

La configuration en module utilise moins de ressources mémoire, de ressources CPU et est plus rapide que la configuration FastCGI.
Le gros inconvénient du module est que vous ne pouvez pas avoir plusieurs versions de PHP en même temps sur votre serveur Apache alors que FastCGI offre cette possibilité.

Je ne reviens pas sur l’installation d’Apache, je pars du principe qu’Apache est installé et fonctionnel ( http://localhost affiche It works !).
J’utilise PHP 5.4.8. Je ne parlerai pas de la configuration de PHP (fichier php.ini).
Si le runtime Microsoft 2008 c++ n’est pas installé n’oubliez pas de le faire sinon PHP 5.4 ne fonctionnera pas.

Ma configuration des dossiers est la suivante :

Le dossier d’Apache e:\serveur_web\apache24
Le dossier du site web e:\serveur_web\apache24\htdocs
Le dossier de PHP e:\serveur_web\php

PHP fournit des versions thread safe et non thread safe pour chacune de ses branches (5.2, 5.3 et 5.4).
Pour une configuration en module il faut prendre une version thread safe de PHP.
Pour une configuration FastCGI il faut prendre une version non thread safe de PHP.

PHP en module d’Apache

Pour installer PHP en tant que module d’Apache il faut télécharger à partir du site http://windows.php.net/download le fichier zip VC9 x86 Thread Safe.
Extraire le contenu de ce fichier dans le dossier e:\serveur_web\php.
Dans ce dossier vous remarquerez qu’il existe les fichiers php5apache2_2.dll et php5apache2_3.dll qui permettent dans les versions Apache 2.2 et Apache 2.3 d’utiliser PHP en tant que module.
Il n’existe pas de fichier php5apache2_4.dll pour Apache 2.4.
Pour obtenir php5apache2_4.dll allez sur le site http://www.apachelounge.com/download/ puis télécharger php5apache2_4.dll-php-5.4-win32.zip.
Ouvrir ce fichier, aller dans le répertoire PHP 5.4.8 puis extraire le fichier php5apache2_4.dll dans le dossier e:\serveur_web\php.
Ouvrir le fichier e:\serveur_web\apache24\conf\httpd.conf puis ajouter les lignes suivantes

PHPIniDir "e:/serveur_web/php"
LoadModule php5_module "e:/serveur_web/php/php5apache2_4.dll"
<FilesMatch \.php$>
SetHandler application/x-httpd-php
</FilesMatch>

Enregistrer le fichier.
Ouvrir une fenêtre de commandes puis exécuter e:\serveur_web\apache24\bin\httpd –t pour vérifier la syntaxe du fichier httpd.conf. Si tout est OK redémarrer le service Apache2.4.
Créer un fichier info.php dans e:\serveur_web\apache24\htdocs contenant < ?php phpinfo() ; ?>
Lancez votre navigateur puis tapez http://localhost/info.php dans la barre d’adresse.
Une page avec toute la configuration PHP doit s’afficher.
En regardant la ligne Server API vous verrez la valeur Apache 2.4 Handler Apache Lounge qui signifie que vous êtes configuré en module.
Regardez également la ligne Loaded Configuration File pour vérifier que le fichier php.ini est bien chargé.

Votre configuration de PHP en module est réussie.

PHP en FastCGI

Pour la configuration en FastCGI il faut récupérer le fichier mod_fcgid-2.3.7-win32.zip sur le site http://www.apachelounge.com/download/
Ouvrez ce zip, aller dans le dossier mod_fcgid puis extraire le fichier mod_fcgid.so dans e:\serveur_web\Apache24\modules.
Ouvrez le fichier e:\serveur_web\apache24\conf\httpd.conf.
Dans la partie du fichier où se trouvent tous les LoadModule ajoutez à la fin la ligne

LoadModule fcgid_module modules/mod_fcgid.so

Aller à la fin du fichier et ajouter les lignes suivantes

FcgidInitialEnv PHPRC "E:\serveur_web\php\"
<FilesMatch \.php$>
AddHandler fcgid-script .php
FcgidWrapper "E:\serveur_web\php\php-cgi.exe" .php
</FilesMatch>

Ces lignes sont le minimum pour faire fonctionner FastCGI pour connaitre toutes les directives de ce module allez sur http://httpd.apache.org/mod_fcgid/mod/mod_fcgid.html
Pour terminer allez dans la section <directory "e:\serveur_web\apache24\htdocs"></directory> vous devez avoir une directive Options, ajouter ExecCGI

Options Indexes FollowSymLinks ExecCGI

Enregistrer le fichier.
Ouvrir une fenêtre de commandes puis exécuter e:\serveur_web\apache24\bin\httpd –t pour vérifier la syntaxe du fichier httpd.conf. Si tout est OK redémarrer le service Apache2.4
Créer un fichier info.php dans e:\serveur_web\apache24\htdocs contenant < ?php phpinfo() ; ?>
Lancez votre navigateur puis tapez http://localhost/info.php dans la barre d’adresse.
Une page avec toute la configuration PHP doit s’afficher.
Cette fois ci en regardant la ligne Server API vous verrez la valeur CGI/FastCGI.

Vous avez réussi votre configuration de PHP en FastCGI.

Pour toutes remarques ou questions n’hésitez pas à laisser un commentaire 🙂

Paris Games Week 2012

Pour tous les fans de jeux vidéo et de sport électronique rendez vous du 31 Octobre 2012 au 4 novembre 2012 au Paris Games Week 2012.

Retrouvez toutes les infos sur le site http://www.parisgamesweek.com/