- ache,
Bonjour,
J’ai un très gros dictionnaire (map, key/value, clé de type str
et valeur une structure quelquonque), je voudrais faire des accès très rapidement sans avoir besoin de charger l’ensemble du dictionnaire.
Pour l’instant, c’est un fichier au format msgpkg de 450MB. Sauf que lorsque je le charge avec Python, il prend 4G de RAM et surtout 25s à se charger.
Mon but, c’est d’optimiser le bousin pour que ça prenne max 500ms de checker une entrée. L’idée c’est d’avoir un exécutable indépendant qui charge les données, pas un service qui tourne en tâche de fond.
Pour l’instant j’ai ça :
# To load with python interpreter
import msgpack
import ui
with open('result.pack', 'rb') as f:
r = f.read()
d = msgpack.unpackb(r, raw=False)
del r
def give_entry(w):
ui.show_terminal(d[w])
Que je lance avec python -i bigdict.py
, ça charge 25s et ensuite j’appele give_entry('entrée')
.
Ce que je voudrais à la fin c’est juste faire bigdict entrée
et avoir mon entrée bien affichée rapidement.
Vous auriez une idée de comment je peux faire ça ?
J’ai pensé à sqlite mais ça m’obligerait à formaliser mes données dans des tables, c’est un peu dur à faire, j’ai pas envie de tester juste pour tester. Si c’est là bonne solution, je le ferais mais comme j’ai des doûtes, je demande avant.