У меня есть действительно большой словарь с 4 миллионами ключей, которые я получаю после чтения в большом текстовом файле. Мне нужно, чтобы мой скрипт работал быстрее, и теперь я ищу подходящий способ сделать это. Я пытаюсь сохранить словарь где-нибудь, чтобы получить более быстрый доступ к нему, но использование pickle фактически снижает мою скорость до 150 секунд для простое чтение! Чтение в текстовом файле происходит намного быстрее, что кажется действительно странным. Я также попытался сохранить его в базе данных с помощью sqlite, но это тоже заняло слишком много времени. Как обычно такая проблема решена?Самый быстрый способ загрузки в словаре
1
A
ответ
0
Если вы используете python2, я рекомендую использовать wiredtiger в качестве быстрого хранилища ключей/значений. Я рекомендую использовать ветку wiredtiger. При условии, вы swig3 и python2-DEV установлен на вашей системе, можно сделать следующие установки wiredtiger:
git clone https://github.com/wiredtiger/wiredtiger --branch=develop
cd wiredtiger
./autogen.sh && ./configure --enable-python && make && make install
Вот немного класс базы данных, что позволяет получить и установить строковые ключи со строковыми значениями:
from wiredtiger import wiredtiger_open
WT_NOT_FOUND = -31803
class KV(object):
def __init__(self, path):
# init wiredtiger
self._wiredtiger = wiredtiger_open(path, 'create')
self.session = self._wiredtiger.open_session()
# create key/value table
self.session.create('table:kv', 'key_format=S,value_format=S')
self.kv = self.session.open_cursor('table:kv')
def close(self):
self._wiredtiger.close()
def __setitem__(self, key, value):
self.kv.set_key(key)
self.kv.set_value(value)
self.kv.insert()
def __getitem__(self, key):
self.kv.set_key(key)
if self.kv.search() == WT_NOT_FOUND:
msg = "key '%s' not found" % key
raise KeyError(msg)
else:
return self.kv.get_value()
kv = KV('./data')
kv['foo'] = 'bar'
assert kv['foo'] == 'bar'
Если использование wiredtiger затруднительно, вы можете попробовать leveldb с помощью plyvel bindings. API очень прост, но он намного медленнее.
Использование plyvel вы можете сделать следующее:
import plyvel
db = plyvel.DB('/tmp/testdb/', create_if_missing=True)
db.put('key', 'value')
# later
assert db.get('key') == 'value'
В противном случае, если вы используете python2 есть builtin shelve module.
Смежные вопросы
- 1. Самый быстрый способ загрузки нескольких URL-адресов
- 2. android: самый быстрый способ отображения экрана загрузки
- 3. Самый быстрый способ загрузки из Интернета
- 4. Самый быстрый способ получить похожие значения в словаре C#
- 5. Самый быстрый способ предварительной загрузки/загрузки больших изображений
- 6. Самый быстрый способ импорта?
- 7. Самый быстрый способ взять
- 8. Самый быстрый способ Алгоритм
- 9. Самый быстрый способ сопоставить аббревиатуру со словарем
- 10. Каков самый быстрый способ загрузки файлов в Akamai?
- 11. Каков самый быстрый способ загрузки сериализованного хэш-файла в Java?
- 12. Каков самый быстрый способ загрузки файла из Интернета в .Net?
- 13. Самый быстрый и надежный способ загрузки контактов в Codename один
- 14. Каков самый быстрый способ загрузки данных в новый экземпляр CitusDB?
- 15. Каков самый быстрый способ загрузки большого набора данных в GridView?
- 16. Самый быстрый способ загрузки нескольких изображений в android
- 17. Самый быстрый способ отображения данных
- 18. Самый быстрый способ поиска строки в javascript
- 19. Самый быстрый/самый простой способ обновить datagridview?
- 20. быстрый способ загрузки json
- 21. Каков самый быстрый способ загрузки и повторной калибровки изображения?
- 22. Самый быстрый способ загрузки или кэширования из чрезвычайно медленного API?
- 23. Самый быстрый способ запустить javascript после загрузки изображения?
- 24. Самый быстрый и оптимизированный способ загрузки async-результата
- 25. Самый быстрый способ загрузки CSS - inline vs HEAD
- 26. Самый быстрый способ реализовать спрайт
- 27. Самый быстрый способ чтения файла
- 28. Что самый быстрый способ загрузки пользовательских шрифтов с помощью Css
- 29. Самый быстрый способ сохранения изменений
- 30. Каков самый быстрый способ загрузки изображений с помощью javascript?
Как вы загружаете его сейчас? Как словарь хранится в файле? Если это действительный JSON, то использование json.load python, вероятно, будет самым быстрым, что вы можете это сделать ... Также обратите внимание, что другие форматы, такие как 'msgpack', также могут быть хорошим кандидатом ... – mgilson
сейчас я просто получил текстовый файл с парами ключ-значение, разделенный пробелами в каждой строке. – EliteKaffee
Обычно вы не загрузите весь словарь, если сможете это сделать. Храните данные в базе данных, индексируйте соответствующие столбцы и используйте запросы для загрузки только тех частей, которые вам нужны, а не всего. – spectras