TME S3 et SimpleDB
Préparation
- Vérifiez votre quota de stokage: il vous faut au moins 50 MO.
Installer le kit AWS pour java
- Comprendre l'exemple se trouvant dans : aws-java-sdk-1.3.25/samples/AmazonS3
- Lire l'API java 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 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 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 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 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
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
- Référence rapide pour SimpleDB.
- Le guide de développement pour S3, en anglais
- les concepts principaux de S3
- Lecture/modification conditionnelle de données : SimpleDB Consistency Enhancements
- Lire l'API java de tous les services AWS.