Bases de données NoSQL – l’exemple de DynamoDB TLC TP2 11 décembre 2012 Merci de réaliser ce TP en binôme et de retourner la réponse aux questions par email à [email protected]. Des documents complémentaires sont disponibles ici : http://www.globule.org/~gpierre/?page_id=373 Vous y trouverez tous les transparents de cours, cette feuille d’exercise, un lien vers les outils dont vous aurez besoin, etc. Le but de cet exercise est d’explorer la base de données NoSQL DynamoDB chez Amazon. Le modèle de données de DynamoDB est simple. Une base de données contient des tables qui contiennent des enregistrements. Chaque table peut être indexée simplement par clé primaire. Dans ce cas il vous faudra déclarer le nom de l’atribut de clé primaire. Alternativement, une table peut être indexée par une clé primaire et un “range attribute”. Dans ce second cas il sera possible d’accéder aux enregistrements en donnant la valeur de la clé, plus un intervalle de sous-clés. Pour davantage d’information sur le schéma de données de DynamoDB et sur les types de requêtes supportées, lisez la page http://aws.amazon.com/dynamodb/#details 1 Prise en main de DynamoDB Pour ce TP chaque groupe de TP aura son propre compte AWS. Connectez-vous à AWS en utilisant cette URL : https://152828017518.signin.aws.amazon.com/console puis cliquez sur “DynamoDB” (en bas à gauche dans la liste des services). Créez deux tables : l’une indexée uniquement par une clé primaire, l’autre par le système à deux clés. Insérez quelques enregistrements dans chaque table et essayez les différents types de requêtes disponibles sur chaque type de table. Assurez-vous que vous comprenez toutes les possibilités de requêtes offertes par DynamoDB. Attention : la requête “scan” permet de visualiser tous les éléments d’une table. Elle est très utile pour le développement, mais doit être proscrite en exploitation : elle est tellement coûteuse qu’Amazon limite ses réponses à une taille maximum de 1 MB. 2 Restructuration du schéma de données de MediaWiki Nous allons tenter de concevoir une structure de données permettant de stocker la base de données de MediaWiki dans DynamoDB. MediaWiki est l’application qu’utilise Wikipedia. Son schéma SQL complet est documenté ici : http://www.mediawiki.org/wiki/Manual:Database_layout 1 Le schéma de données est évidemment un peu complexe mais nous nous intéresserons uniquement aux tables page, revision, pagelinks et text. Page contient les méta-informations de chaque page. Chaque page possède un certain nombre de Revisions (chaque fois qu’un utilisateur édite une page une nouvelle révision est créée). Chaque révision ne contient une fois encore que des méta-données, le contenu de chaque révision est stocké dans la table Text. Enfin, tous les liens hypertexte entre pages sont décrits dans la table PageLinks. 2 Nous voulons supporter les requêtes suivantes : – Lire la version la plus récente d’une page (c’est-à-dire le texte de la page ainsi que ses méta-données) – Voir la liste de toutes les révisions d’une page – Lire une version spécifique d’une page – Créer une nouvelle page – Créer une nouvelle version d’une page Question 1 : Concevez un schéma de données semblable à celui de MediaWiki mais compatible avec les particularités de DynamoDB. Vous pouvez ommettre la table PageLinks pour l’instant. Créez les tables dans DynamoDB, insérez deux pages avec deux révisions chaque. Assurez-vous que votre schéma de données supporte les cinq types de requêtes listées ci-dessus. Faites des captures d’écran pour montrer votre schéma de données et la façon d’effectuer les cinq requêtes. Question 2 : La raison principale pour laquelle MediaWiki contient la table PageLinks est de permettre de colorier les liens dans les pages. Chaque fois que vous lisez une page, les liens hypertexte sont de couleur bleue si le lien mène à une page existante, ou en rouge sinon. Mettez votre schéma de données DynamoDB à jour pour permettre à MediaWiki de colorier les liens correctement. Attention : l’opération de coloriage des liens est extrêmement fréquente, car effectuée de nombreuses fois pour la lecture de chaque page. N’oubliez pas de détruire toutes vos tables DynamoDB avant de quitter la salle ! — the end — 3