2013-05-18 4 views
0

Я написал программу python, которая обрабатывает большое количество текста и помещает данные в многоуровневый словарь. В результате словарь становится действительно большим (2 ГБ или более), поглощает память и приводит к ошибке/ошибке памяти.Использование Python с sqlite3

Так что я ищу использовать sqlite3 вместо того, чтобы помещать данные в python dict.

Но подумайте об этом, весь db от sqlite3 должен быть доступен во время работы программы. Итак, в конце концов, не приведет ли это к тому же результату, когда память будет съедена большими db?

Извините, что мое понимание памяти немного неуклюжие. Я хочу, чтобы все было ясно, прежде чем я потрудился переносить свою программу на использование db.

Заранее спасибо.

+0

Вы единственный, кто мог бы знать, поскольку это зависит от логики вашего приложения. Но в большинстве случаев достаточно сохранить индекс (ы) в памяти. –

+0

@DekDekku Это обрабатывается автоматически модулем db или мне нужно указывать, чтобы сохранить только индексы? – ytrewq

+0

Не знаю, SQLite, вы должны проверить документы, но он должен быть автоматическим: это так, как обычно работает. Индексы бесполезны, если они находятся на диске, в то время как данные обычно слишком велики, чтобы их можно было хранить в памяти целиком. –

ответ

1

SQLite создает temporary files при необходимости для хранения данных, еще не привязанных к базе данных. Он сделает это даже для in-memory databases.

Таким образом, 2 ГБ данных не будут потреблять всю память при хранении в базе данных SQLite.

+0

@MartjinPieters спасибо. Будет ли в порядке, например, десятки гигабайт? – ytrewq

+0

@CosmicRabbitMediaInc: Как заметил еще один комментарий; объекты python имеют больше накладных расходов, чем данные, хранящиеся в структурах C, я ожидаю, что данные, хранящиеся в SQLite, будут более компактными. SQLite может обрабатывать [140 терабайтов данных] (http://www.sqlite.org/limits.html). –

Смежные вопросы