Une partie de mon application utilise un trie à chunk les mots ensemble. Par exemple, ["Summer", "in", "Los", "Angeles"]
devient ["Summer", "in", "Los Angeles"]
.Sérialisation rapide d'un trie
Maintenant, ce trie est rempli à partir de a large database, stocké localement en tant que SQL, au démarrage de l'application. Cela prend beaucoup de temps, environ 15s. Je voudrais réduire le temps de démarrage de l'application, donc j'ai envisagé de sérialiser le Trie. Malheureusement, pickling est trop lent - plus lent que le chargement de tout de la base de données.
Existe-t-il un moyen plus rapide de sérialiser mon trie?
Voici ce que la classe Trie ressemble:
class Trie:
def __init__(self):
self.values = set()
self.children = dict()
def insert(self, key, value):
"""Insert a (key,value) pair into the trie.
The key should be a list of strings.
The value can be of arbitrary type."""
current_node = self
for key_part in key:
if key_part not in current_node.children:
current_node.children[key_part] = Trie()
current_node = current_node.children[key_part]
current_node.values.add(value)
def retrieve(self, key):
"""Returns either the value stored at the key, or raises KeyError."""
current_node = self
for key_part in key:
current_node = current_node.children[key_part]
return current_node.values
Est-il possible de changer qui rendrait plus sérialisable?
J'avais l'habitude de faire quelque chose comme ceci pour sauver la mémoire (http://stackoverflow.com/questions/2574357/how-to-transform-phrases-and-words-into-md5-hash) mais avec DB optimisé comme mongoDB et l'API d'indexation comme Lucene, j'éviterais de construire une nouvelle structure pour indexer et récupérer des choses. – alvas
+1 pour MongoDB, je pense en fait à m'éloigner de la base de données relationnelle. – misha