Как сэкономить оперативную память при работе с очень большим python dict?

#python #database #dictionary

#python #База данных #словарь

Вопрос:

У меня есть пары ключ-значение на миллиард уровней, и мне нужно создать для них справочную таблицу. В настоящее время я использую родной python dict , однако, похоже, он работает очень медленно при добавлении пар в dict и потребляет много оперативной памяти (несколько сотен ГБ). Мне нужно 1) добавить каждую пару в dict и 2) выполнить поиск несколько миллионов раз. Есть ли какие-либо рекомендуемые способы, которые я должен предпринять для удовлетворения этого требования? У меня есть машина с памятью в несколько сотен гигабайт (но ее недостаточно для хранения всего в памяти) и большим количеством ядер процессора.

Комментарии:

1. Что именно вы подразумеваете под «медленным»? Как вы это измерили? Сколько именно «много» оперативной памяти?

2. Учитывайте размер вашей оперативной памяти и размер ваших дисков. Вот почему база данных записывает на дисковые блоки и использует BTree для доступа к тому, что вам нужно, при запросе. Вам нужна база данных

3. Вам нужно будет предоставить более подробную информацию о вашем варианте использования, если вам нужен какой-либо полезный совет.

4. по крайней мере, скажите нам, какова схема использования этого dict: какие данные вы ищете? как часто и т. Д…

5. Необходимость использования базы данных верна, но даже при этом объем данных в ней должен будет искать вещи по частям, а не все сразу.

Ответ №1:

Если эти данные не используются совместно между машинами (и если они находятся в памяти с a dict , я не думаю, что это так), я бы рекомендовал использовать локальную базу данных SQLite.

Python имеет внутреннюю библиотеку для взаимодействия с SQLite, которая работает быстро (написана на C), сохраняет данные на диск (для экономии оперативной памяти) и доступна практически везде.