#python #database #dictionary
#python #База данных #словарь
Вопрос:
У меня есть пары ключ-значение на миллиард уровней, и мне нужно создать для них справочную таблицу. В настоящее время я использую родной python dict
, однако, похоже, он работает очень медленно при добавлении пар в dict и потребляет много оперативной памяти (несколько сотен ГБ). Мне нужно 1) добавить каждую пару в dict и 2) выполнить поиск несколько миллионов раз. Есть ли какие-либо рекомендуемые способы, которые я должен предпринять для удовлетворения этого требования? У меня есть машина с памятью в несколько сотен гигабайт (но ее недостаточно для хранения всего в памяти) и большим количеством ядер процессора.
Комментарии:
1. Что именно вы подразумеваете под «медленным»? Как вы это измерили? Сколько именно «много» оперативной памяти?
2. Учитывайте размер вашей оперативной памяти и размер ваших дисков. Вот почему база данных записывает на дисковые блоки и использует BTree для доступа к тому, что вам нужно, при запросе. Вам нужна база данных
3. Вам нужно будет предоставить более подробную информацию о вашем варианте использования, если вам нужен какой-либо полезный совет.
4. по крайней мере, скажите нам, какова схема использования этого dict: какие данные вы ищете? как часто и т. Д…
5. Необходимость использования базы данных верна, но даже при этом объем данных в ней должен будет искать вещи по частям, а не все сразу.
Ответ №1:
Если эти данные не используются совместно между машинами (и если они находятся в памяти с a dict
, я не думаю, что это так), я бы рекомендовал использовать локальную базу данных SQLite.
Python имеет внутреннюю библиотеку для взаимодействия с SQLite, которая работает быстро (написана на C), сохраняет данные на диск (для экономии оперативной памяти) и доступна практически везде.