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.
--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é.
ʻunicode`` de python doit être encodée en binaire avec
val.encode ('utf-8')
etc.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 ''.
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.
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.
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.
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 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'))
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.
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.
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.
Recommended Posts