Вы спрашиваете в комментарии о возможных альтернативных механизмах хранения. Если данные, которые вы храните, составляют пятую часть доступной оперативной памяти, я бы сказал, что вам нужно очень осторожно управлять памятью, поскольку вы не можете скопировать данные до того, как закончите их использовать; и в любом случае вы будете убивать производительность. Возможно, вам удастся добиться того, чтобы sqlite правильно делал с вами BLOB-объекты, поскольку они могут быть большими.
Похоже, вы используете sqlite в качестве простого хранилища ключей / значений. Вы рассматривали возможность использования плоских файлов? Если вам нужен ATOMicity, вы все равно можете использовать базу данных sqlite, чтобы определить, какие файлы в вашем хранилище простых файлов являются действительными. Вы можете безопасно сделать это, фиксируя данные в БД только после чистой записи всех простых файлов, и удаляя плоские файлы только после фиксации соответствующего удаления в БД.
Чтобы это работало, вам понадобится механизм для сериализации dataObject
в объект типа файла в Python. Pickle может сделать это для вас, если вы передадите ему объект типа файла, но я подозреваю, что он все равно будет весьма неэффективным.
Вы говорите, что делаете численное моделирование; Вы знаете о NumPy? numpy массивы поддерживают функцию tofile
, которая будет более эффективной, чем травление, и вы можете получить значительное повышение производительности в своих симуляциях, если вы еще не используете ее.