RecentChanges
|
FindPage
|
LikePages
|
BackLinks
View Source:
TmeS3
Note:
This page has been locked and cannot be edited.
!!! TME S3 et SimpleDB !! Préparation * Vérifiez votre quota de stokage: il vous faut au moins 50 MO. * Installer le kit [[http://aws.amazon.com/sdkforjava | AWS pour java]] ** Comprendre l'exemple se trouvant dans : aws-java-sdk-1.3.25/samples/~AmazonS3 ** Lire l'[API java|http://docs.amazonwebservices.com/AWSJavaSDK/latest/javadoc/overview-summary.html] de tous les services d'AWS (ou localement dans votre dossier aws-java-sdk-1.3.25/documentation/javadoc/index.html) * Disposer des clés d'accès, envoyées par mail. ** Compléter le fichier ~AwsCredentials.properties avec les clés d'accès * configurer l'accès pour se connecter à AWS en passant par le proxy de l'UFR. ** host="proxy" et port=3128 ** voir l'exemple [[http://www-bd.lip6.fr/ens/abdr2012/extra/aws/S3Sample.java| S3Sample.java]] avec le proxy correctement configuré (lignes 26 puis 63 à 67) * Référencer les librairies jar nécessaires pour exécuter les exemples ** Modifier l'environnement linux: *** copier le fichier [config-java-classpath |http://www-bd.lip6.fr/ens/abdr2012/extra/aws/config-java-classpath.txt] dans le répertoire de travail contenant les exemples. *** source config-java-classpath.txt ** dans Eclipse: aller dans les propriétés du projet, puis ''java build path'', puis ''add external jar''. Ajouter tous les jars se trouvant dans tous les sous-dossiers de third-party ainsi que tous les jars se trouvant dans le dossier lib. !!Exercice 1 (facultatif) * Proposer des éléments de solution pour stocker dans S3 les données suivantes : ** une relation quelconque (l'équivalent d'une table SQL) ** un réseau d'amis ** un flux de données RSS * Illustrer l'utilisation de S3 pour gérer le stock des produits d'un magasin : ** Magasin(magasinID, produitID, quantité) !!Exercice 2 : Cohérence des données avec SimpleDB * Lire l'exemple [[http://www-bd.lip6.fr/ens/abdr2012/extra/aws/SimpleDBSample.java| SimpleDBSample.java]]. Le domaine utilisé est D11. Les droits dont vous disposez vous permettent de manipuler des objects (i.e., créer, modifier et supprimer un item). Par contre, vous n'avez pas les droits pour créer, lister ou supprimer un domaine. * Lire la [[http://aws.amazon.com/articles/1231 | syntaxe des requêtes]] ''SELECT FROM WHERE''. Voir en particulier la fonction __itemName()__ qui peut être utilisée dans une clause ''WHERE''. * Pour lire __un seul__ item, il est possible d'invoquer la méthode getAttributes(~GetAttributesRequest), sans poser de requête ''SELECT''. ** Lire la notice d'utilisation des lectures et écritures cohérentes : [SimpleDB Consistency Enhancements|http://aws.amazon.com/articles/3572] * Mettre en évidence des situations d'accès incohérent aux données, suivantes : ** On considère l'objet nommé NNN contenant les attributs (produit=1, quantite=0). Chaque étudiant choisit un nom NNN d'item différent. ** On considère l'opération Ajout qui consiste à ajouter 1 à la quantité de l'objet NNN. La séquence est : *** lire l'attribut ''quantite'' de l'objet nommé NNN. *** modifier la quantité de l'objet en remplaçant la quantité par la nouvelle valeur. ! 2.1) Lecture d'un état obsolète de la donnée. * Initialement, créer l'objet NNN avec les attribut (produit=1, quantite=0) * Ecrire un programme P1 qui effectue 10 opérations AJOUT successives (boucle for). Quelle est la quantité finale ? * Modifier P1 pour obtenir le programme P2 telle que la quantité finale soit correcte. Voir la méthode setConsistentRead. ! 2.2) Perte d'écriture lorsque 2 utilisateurs modifient la même donnée en même temps. * Initialement, l'objet NNN vaut (produit=1, quantite=0). Rmq: l'item est initialisé avant d'exécuter P2. P2 effectue seulement les 10 ajouts successifs. * Ouvrir 2 terminaux pour exécuter simultanément le programme P2. Quelle est la quantité obtenue ? * Modifier P2 pour obtenir P3 telle que la quantité finale soit bien la somme de tous les ajouts simultanés. ** Voir les classes ~PutAttributesRequest et ~UpdateCondition. ** Quelle condition garantit que la quantité peut être modifiée correctement? ** Préciser la stratégie adoptée lorsque cette condition n'est pas vérifiée. * Proposer une autre solution P4 qui consiste à obtenir un verrou sur l'item avant de lire et modifier la quantité du produit. ** Représenter le verrou par un attribut nommé ''lock'' valant 0 (libre) ou 1 (occupé). ** Peut-on relâcher le verrou en même temps qu'on écrit la nouvelle quantité ? ! 2.3) Compromis performance/cohérence * Chronométrer la durée moyenne pour effectuer une opération AJOUT. * Comparer la durée d'une lecture avec cohérence avec une lecture sans cohérence. Que concluez vous ? * Mesurer le temps de réponse obtenu avec P3, puis avec 2 P3 simultanés, puis avec 3 P3 et ainsi de suite. Que concluez vous ? !!Exercice 3 : Comparaison S3 / SimpleDB Comparer le niveau de cohérence proposé par S3 avec ceux proposés par le SimpleDB. !!Documentation * [Prise en main de SimpleDB |http://docs.amazonwebservices.com/AmazonSimpleDB/latest/GettingStartedGuide/Welcome.html] * [Référence rapide |http://awsdocs.s3.amazonaws.com/SDB/latest/sdb-qrc.pdf] pour SimpleDB. * Le [[http://docs.amazonwebservices.com/AmazonS3/latest/dev/| guide de développement]] pour S3, en anglais * les [[http://docs.amazonwebservices.com/AmazonS3/latest/dev/index.html?Introduction.html#CoreConcepts | concepts principaux]] de S3 * Lecture/modification conditionnelle de données : [SimpleDB Consistency Enhancements|http://aws.amazon.com/articles/3572] * Lire l'[API java|http://docs.amazonwebservices.com/AWSJavaSDK/latest/javadoc/overview-summary.html] de tous les services AWS. ---- retour vers l'[Accueil], LesTme