mercredi 18 décembre 2013

Couchbase : Comment automatiser la gestion de vos vues (version, creation, update, controle de source ...)


L'interface web sur serveur Couchbase est vraiment d'une grande qualité de part sa simplicité d'utilisation et des fonctionnalités qu'elle procure. C'est un point très différenciant vis à vis de la concurrence.

Si vous lisez cet article c'est que vous vous êtes posé la même question que moi : Créer des vues via l'interface est vraiment efficace mais comment puis-je intégrer cette étape dans mon environnement de développement ? Je travaille en équipe, j'ai donc besoin que les scripts soient sous un VCS et idéalement que la mise à jour des vues sur le serveur soit automatisée.

Je vous propose une solution que j'ai mise en oeuvre avec l'API pour Java.

Les sources sont disponibles sur Github : https://github.com/bewilcox/Couchbase-manage-views

L'organisation des vues

Le vues étant des scripts map/reduce écrits en javascript, mon projet va contenir un ensemble de fichier .js
Plutôt que de faire un fichier par vue, je suis parti du principe de regrouper thématiquement plusieurs vues dans un seul fichier. Par exemple, toutes les vues portant sur un type de document ("Tous les docs Author", "les docs Author par leur nom", "les docs Author par statut etc.)

L'ensemble de ces scripts sous placés sous src\main\resources\couchbase\views :



La structure des fichiers de scripts

Les fichiers js sont structurés pour permettre d'extraire facilement les vues. J'utilise des tags sous forme de commentaires pour cela. 
Chaque vue commence par le commentaire : //startview <nom de la vue>
Et se termine par le commentaire : //endview

Voici un exemple de ficher :

La méthode présentée plus bas se chargera, pour chaque bloc, de créer la vue sur le serveur.


Mise à jour des vues sur le serveur

Voici un extrait du code me permettant de scanner cette arborescence et mettre à jour les vues sur le serveur :


La gestion de la version

La méthode initDatabase() vérifie la version de la base pour déclencher ou non la mise des vues sur le serveur. Il faut savoir que cette mise à jour procède à un annule et remplace ce qui a pour conséquence la réindexation de tous les documents.
Ce fonctionnement est perfectible, il serait plus optimal de gérér une version par vue plutôt qu'une version globale.

La dernière version est celle présente dans le fichier couchbase.properties
couchbase.database.version = 1.0.1 

La version courante de la base est donnée par le document DB_VERSION créé par l'API.
{"major":1,"minor":0,"rev:1} 


Les améliorations possibles

C'est un première ébauche et quelques améliorations sont possibles :
  • Actuellement, toutes les vues ne sont pas créées dans le même document design. Les vues dont le nom commence par "all" sont dans un document design et les autres dans un autre. Il serait mieux par exemple de modifier l'arborescence des fichiers js et de créer un répertoire par document design avec les vues en dessous.
  • La gestion de la version serait plus optimale si elle était au niveau d'une vue et non globale.
  • Actuellement, la création d'une vue par l'API la créée directement avec le statut "Production". Il pourrait être intéressant de pouvoir spécifier le statut cible en fonction de vos contraintes projet. 



Pour finir, un petit mot sur N1QL

Il est répandu de penser que les vues s'apparentent quelque part aux procédures stockées d'une base relationnelle. C'est une erreur. Les vues sont des scripts d'indexation et non des scripts de requêtage. Le serveur Couchbase parse ces scripts ce qui lui permet, pour chaque document, de mettre à jour son arbre d'index. La partie requêtage à proprement parlé est réalisée par l'API client en s'appuyant sur ces vues.

Ce mécanisme fait que le requêtage d'une base Couchbase est moins trivial que sur les autres bases NoSQL et peut s'avérer même complexe dans le cas de requêtes avancées.

C'est ce défaut que sont en train de combler les équipes de Couchbase en créant le langage N1QL (prononcer "niquel"). Il s'apparente fortement à la syntaxe SQL et permettra d'interroger facilement les documents. Nous connaissons tous la syntaxe SQL ce qui va limiter grandement la courbe d'apprentissage.

A la rédaction de cet article, N1QL est en Developer Review 2. Vous pouvez d'ores et déjà l'utiliser pour tester :






Aucun commentaire:

Enregistrer un commentaire