RecentChanges
|
FindPage
|
LikePages
|
BackLinks
View Source:
TmeKvstore
Note:
This page has been locked and cannot be edited.
!!! TME Oracle KV Store !! Préparation * Vérifier qu'il vous reste au moins 50Mo d'espace disque disponible * Copier et décompresser le logiciel kvstore : ** cd votre_repertoire ** tar zxvf /Infos/bd/kvstore/kv-ce-3.1.7.tar.gz ** seulement si vous ne parvenez pas à le copier, télécharger le logiciel: [oracle kv store | http://download.oracle.com/otn-pub/otn_software/nosql-database/kv-ce-3.1.7.tar.gz] (fichier kv-ce-3.1.17.tar.gz) * Lire la [documentation oracle nosql|http://docs.oracle.com/cd/NOSQL/html/index.html] (en particulier le [quick start | http://docs.oracle.com/cd/NOSQL/html/quickstart.html]) * Lien vers l'[API java |http://docs.oracle.com/cd/NOSQL/html/javadoc/index.html] * Configuration: ** copier le fichier: ** cd kv-3.1.17 ** cp /Infos/bd/kvstore/config-java-classpath-kvlite.txt __.__ ** seulement si vous ne parvenez pas à le copier, télécharger le fichier [config-java-classpath-kvlite.txt | http://www-bd.lip6.fr/ens/abdr2013/extra/kv/config-java-classpath-kvlite.txt] ** source config-java-classpath-kvlite.txt (pour configurer la variable CLASSPATH) * Démarrer le serveur kvlite par la commande : ** java -jar lib/kvstore.jar kvlite __-root__ /tmp/kvroot ** rmq: L'option -root permet de préciser un dossier local à la machine pour que le store stocke les données (éviter de stocker les données sur NFS). *** en cas d'erreur au démarrage de kvlite, supprimer entièrement le dossier kvroot (c'est un sous dossier de kv-3.1.17). ** garder ce terminal ouvert (pour afficher les eventuels messages provenant du serveur kvstore) mais ne plus l'utiliser par la suite pour saisir d'autres commandes. * Préparer l'accès à kvstore ** ouvrir un __deuxième__ terminal ** cd votre répertoire ** cd kv-3.1.17 ** source config-java-classpath-kvlite.txt ** cd examples ** cp /Infos/bd/kvstore/Init.java __.__ ** seulement si vous ne parvenez pas à le copier, télécharger le fichier [Init.java | http://www-bd.lip6.fr/ens/abdr2013/extra/kv/Init.java] ([txt | http://www-bd.lip6.fr/ens/abdr2013/extra/kv/Init.txt] ) ** lire et comprendre l'exemple Init.java qui ajoute l'objet {P1,0} dans la base. ** javac Init.java ** java Init * pour __éteindre__ le serveur, la commande est : ** java -jar lib/kvstore.jar stop -root /tmp/kvroot !! Exercice 1 On considère une base de 100 objets dont la clé est P1 à P100 et la valeur représente une quantité de produit. * Ecrire le programme A1 qui effectue une boucle de 1000 itérations. A chaque itération, ajouter 1 à la quantité du produit P1. Observer les pertes d'écriture lorsque plusieurs programmes A1 s'exécutent simultanément. * A2: utiliser l'écriture conditionnelle pour contrôler l'exécution simultanée de plusieurs programmes. ** voir la methode ''putIfVersion''. La valeur de retour est nulle lorsque l'écriture est refusée. !! Exercice 2 On considère une base de 200 objets classés en 10 catégories C1 à C10. La clé d'un objet est composée de la catégorie suivie du numéro du produit. La catégorie C1 contient les objets P1 à P20, C2 contient les objets P21 à P40 et ainsi de suite. La valeur d'un objet représente une quantité de produit. Initialement tous les produits ont une quantité égale à 1. On considère une transaction qui modifie la quantité de 5 objets d'une certaine catégorie. * Ecrire un programme M1 qui effectue 1000 itérations. A chaque itération, on ajoute 1 à la quantité des produits P1 à P5 de la catégorie C1. * L'exécution simultanée de 2 programmes M1 conserve-t-elle la cohérence des données ? * Ecrire un programme M2 qui effectue 1000 itérations. A chaque itération, on détermine la valeur ''max'' qui est la plus grande quantité parmi les produits P1 à P5 de C1. Puis on affecte la nouvelle quantité = ''(1 + max)'' à tous les produits P1 à P5. * Si au départ la quantité vaut 1 pour tous les produits, quelle quantité obtient-on après avoir exécuté 2 fois le programme M2, en série (i.e., l'une après l'autre) ? * L'exécution simultanée de 2 programmes M2 conserve-t-elle la cohérence des données (la quantité obtenue est-elle la même qu'avec une exécution en série)? ** Proposer une solution pour que M2 conserve la cohérence des données. *** définir une transaction comme étant une liste de 5 opérations d'écritures (un écriture conditionelle pour chaque produit) *** Structurer la clé des produit pour que le préfixe (major component) soit commun à tous les produits modifiés ensemble *** Pour cela obtenir une ~OperationFactory en appellant la méthode getOperationFactory() de KVStore *** Puis créer une liste d'Operation en appelant la méthode ''createPutIfVersion'' de la classe ~OperationFactory avec le paramètre boolean ''abortIfUnsuccessful'' valant ''true''. *** Exécuter la séquence en appelant la méthode execute de KVStore *** Détecter l'abandon éventuel de l'exécution à l'aide de l'exception ~OperationExecutionException !! Questions fréquentes * Erreur de connexion. Vérifier que le serveur kvlite est bien démarré: ** cd kvstore-3.1.17 ** java -jar ../lib/kvstore.jar ping -host localhost -port 5000 ** si le problème persiste: supprimer le dossier kvroot puis relancer le serveur kvlite ** si nécessaire éteindre le serveur kvlite avec les commandes ''ps u '' et ''kill'' * Erreur avec les lettres accentuées pendant la compilation javac ** export LC_CTYPE="fr_FR" ** ou javac -encoding ISO-8859-15 *.java ** ou iconv -t utf8 -f iso8859-15 Fichier.java pour convertir le fichier en utf-8 ---- LesTme