Essayez d'utiliser LevelDB avec Python (plyvel)

Qu'est-ce que LevelDB?

C'est un magasin clé-valeur du type qui enregistre dans un fichier, et c'est une bibliothèque créée par Google qui peut lire et écrire l'association clé => valeur à grande vitesse. Ici, en Python, je vais présenter un tutoriel pour essayer d'utiliser LevelDB avec python en utilisant une bibliothèque appelée plyvel. (Bien qu'il existe une bibliothèque LevelDB pour Python autre que plyvel, il semble que le plyvel ait l'air bien après son utilisation.)

Berkeley DB est célèbre pour ce genre de chose dans l'ancien temps, et Kyoto Cabinet créé par M. Hirabayashi du Japon pour le moderne. Il y a memcached et Redis dans le type de serveur, mais LevelDB n'est pas un type de serveur mais une bibliothèque qui gère des fichiers locaux. Si vous souhaitez partager et enregistrer des données clé-valeur de nombreux processus serveur, Memcached, Kyoto Tycoon, Redis, etc. sera plus approprié.

Python a `` dict '' comme structure de données qui gère les clés en les associant à des valeurs, mais c'est une bibliothèque pratique lorsque vous souhaitez gérer une grande quantité de données qui ne peuvent pas être stockées en mémoire.

Connaissance préalable

--LevelDB est un magasin clé-valeur qui gère une clé, qui est une chaîne d'octets, en l'associant à une valeur, qui est une chaîne d'octets. Vous pouvez rechercher rapidement la valeur de la clé.

Installation (1/2)

Tout d'abord, nous avons besoin de la bibliothèque native de leveldb, alors installez-la. Si vous utilisez Homebrew sur votre Mac, il est plus facile d'utiliser Brew.

$ brew install leveldb

Il semble y avoir un Makefile '' sur d'autres plates-formes, donc je pense que vous pouvez l'installer avec make '' et `` sudo make install ''.

Installation (2/2)

Installons `` plyvel ''. Je ne sais pas pourquoi c'est orthographié comme ça, mais c'est quand même plyvel.

$ pip install plyvel

Si Python.h n'est pas dans le chemin d'inclusion du système, la bibliothèque d'extension ne peut pas être compilée et une erreur peut se produire. Pour Linux, c'est une bonne idée de vérifier si un paquet tel que python-devel est inclus.

Essayez d'ouvrir et de fermer la base de données

Notez que la base de données LevelDB est un répertoire.

import plyvel
my_db = plyvel.DB('/tmp/test.ldb', create_if_missing=True)  #Sinon, faites
my_db.close()

Si `` create_if_missing = False '', une exception se produira si le fichier DB n'existe pas.

Register key => valeur

LevelDB peut uniquement associer une chaîne d'octets à une chaîne d'octets, les bases sont donc les suivantes.

my_db.put('key1', 'value1')
my_db.put(u'Hoge'.encode('utf-8'), u'Hogeバリュー'.encode('utf-8'))  #Lorsque vous utilisez unicode, faites-en une chaîne d'octets

Si vous souhaitez lier une structure de données complexe à une clé et l'enregistrer, essayez d'utiliser le pickle ou MessagePack ci-dessous.

Extraire la valeur de la clé

Faites simplement `` obtenir ''.

value1 = my_db.get('key1')
value2 = my_db.get(u'La clé Unicode est codée sous forme de chaîne d'octets'.encode('utf-8'))

Supprimer la clé

Supprimer avec la méthode `` supprimer ''.

my_db.delete('key1')
my_db.delete(u'La clé Unicode est codée sous forme de chaîne d'octets'.encode('utf-8'))

Mettre en italique les éléments enregistrés

Il y a des moments où vous souhaitez enregistrer un grand nombre de clés et de valeurs et enfin les mettre toutes en CSV. Bien entendu, LevelDB peut également récupérer les clés et valeurs stockées avec un itérateur.

my_db.put('key1', '1')
my_db.put('key2', '1')
my_db.put('key3', '3')

for key, value in my_db:
	print '%s => %s' % (key, value)

#production:
# key1 => 1
# key2 => 2
# key3 => 3

Il semble que vous puissiez également spécifier la plage de clés ou spécifier le préfixe de la clé pour la récupérer. Voir la section itérateurs de la documentation des plyvel (https://plyvel.readthedocs.org/en/latest/user.html#iterators) pour plus d'informations.

Essayez d'enregistrer une valeur structurée: pickle

Comme je l'ai écrit au début, la valeur doit être une chaîne d'octets, donc si vous souhaitez associer des données structurées telles que dict et list / with key et les enregistrer dans LevelDB, vous devez les sérialiser. Python a une bibliothèque standard pour la sérialisation appelée pickle, donc facile à utiliser. Pickle est très puissant car il peut sérialiser non seulement des types de données de base, mais également des fonctions et des objets. Cependant, il est difficile de désérialiser les données pickle (revenir à la structure de données d'origine) dans des langages autres que Python, donc si vous souhaitez détourner les données vers d'autres langages, il est préférable de les sérialiser au format Message Pack décrit plus loin.

fukuzatsu1 = dict(a=10, b=20, c=[123, 234, 456])
my_db.put('key1', fukuzatsu1)  #Obtenez une erreur

import pickle
serialized1 = pickle.dumps(fukuzatsu1)
my_db.put('key1', serialized1)  # OK 

#Lors de l'utilisation de la valeur
serialized1 = my_db.get('key1')
fukuzatsu1 = pickle.loads(serialized1)
print fukuzatsu1['a']  # => 10

Pour plus de détails sur l'utilisation de pickle, reportez-vous à la documentation pickle.

Essayez d'enregistrer une valeur structurée: msgpack

En plus de pickle, nous recommandons MessagePack, un format de sérialisation du Japon. MessagePack se caractérise par sa sérialisation compacte et rapide des données. Lorsque vous utilisez MessagePack avec Python, installez un package appelé msgpack-python.


$ pip install msgpack-python

msgpack utilise packb / ʻunpackb`` au lieu des dumps`` / `charges`` de pickle.

fukuzatsu1 = dict(a=10, b=20, c=[123, 234, 456])

import msgpack
serialized1 = msgpack.packb(fukuzatsu1, encoding='utf-8')
my_db.put('key1', serialized1)

#Lors de l'utilisation de la valeur
serialized1 = my_db.get('key1')
fukuzatsu1 = msgpack.unpackb(serialized1, encoding='utf-8')
print fukuzatsu1['a']  # => 10

Consultez la documentation API msgpack-python pour plus d'informations.

Lien de référence

Recommended Posts

Essayez d'utiliser LevelDB avec Python (plyvel)
Essayez d'utiliser LeapMotion avec Python
Essayez d'utiliser l'API Wunderlist en Python
Essayez d'utiliser l'API Kraken avec Python
Essayez gRPC en Python
Essayez 9 tranches en Python
Essayez d'utiliser Tweepy [Python2.7]
Essayez d'utiliser l'API BitFlyer Ligntning en Python
Essayez d'utiliser l'API ChatWork et l'API Qiita en Python
Essayez d'utiliser l'API DropBox Core avec Python
[Python] Essayez d'utiliser le canevas de Tkinter
Essayez d'utiliser Kubernetes Client -Python-
Essayez LINE Notify avec Python
Implémentons Yuma dans Python 3
Traduit à l'aide de googletrans en Python
Utilisation du mode Python dans le traitement
Essayez de le faire avec GUI, PyQt en Python
Essayez d'utiliser Spyder inclus dans Anaconda
Programmation GUI en Python avec Appjar
Précautions lors de l'utilisation de Pit avec Python
Essayez d'utiliser l'API de Pleasant (python / FastAPI)
Essayons Fizz Buzz avec Python
Essayez de calculer Trace en Python
Essayez l'accès au registre PLC en Python
Utilisation de variables globales dans les fonctions python
Essayez de créer un réseau de neurones en Python sans utiliser de bibliothèque
Voyons voir l'utilisation de l'entrée en python
Puissance totale en Python (en utilisant functools)
Essayez d'utiliser l'API d'action de Python argparse
Essayez d'utiliser le module Python Cmd
Essayez d'exécuter une fonction écrite en Python à l'aide de Fn Project
Reconnaissance de caractères manuscrits à l'aide de KNN en Python
Recherche de priorité de profondeur à l'aide de la pile en Python
Lors de l'utilisation d'expressions régulières en Python
Essayez d'utiliser Amazon DynamoDB à partir de Python
Création d'interface graphique en python avec tkinter 2
Créez et essayez un environnement OpenCV et Python en quelques minutes à l'aide de Docker
Essayez de vous connecter automatiquement à Netflix en utilisant python sur votre PC
Essayez d'utiliser FireBase Cloud Firestore avec Python pour le moment
Fonctionnement de la souris à l'aide de l'API Windows en Python
Notes utilisant cChardet et python3-chardet dans Python 3.3.1.
Essayez de vous connecter à qiita avec Python
Création d'interface graphique en python à l'aide de tkinter partie 1
Obtenir l'équilibre Suica en Python (en utilisant libpafe)
Essayez une formule utilisant Σ avec python
Hachez lentement les mots de passe en utilisant bcrypt en Python
Utilisation de venv dans un environnement Windows + Docker [Python]
Essayez d'utiliser la bande HL dans l'ordre
Essayez de travailler avec des données binaires en Python
Essayez de dessiner une animation simple en Python
Dialogflow (anciennement: API.AI) Essayez d'utiliser le SDK Python #dialogflow
Tweet à l'aide de l'API Twitter en Python
[Python] [Windows] Communication série en Python à l'aide de DLL
Essayez d'utiliser Python avec Google Cloud Functions
J'ai essayé d'utiliser l'optimisation bayésienne de Python
Essayez d'utiliser le script de validation Python # 2 On-box de Junos
Connectez-vous à Slack à l'aide de requêtes en Python
Obtenez des données Youtube en Python à l'aide de l'API Youtube Data