Differences between current version and previous revision of TmeKvstore.
Other diffs: Previous Major Revision, Previous Author
Newer page: | version 24 | Last edited on December 9, 2016 12:24 am | by abdr | |
Older page: | version 23 | Last edited on December 9, 2016 12:22 am | by abdr | Revert |
current version
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 (fichier kv-ce-3.1.17.tar.gz)
- Lire la documentation oracle nosql (en particulier le quick start)
- Lien vers l'API java
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
- 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 (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