У меня есть некоторые панды DataFrames, которые я могу сэкономить на диске с помощью .to_pickle()
. Такой объект составляет 200k-700k.Сколько памяти занимает Python Pickle?
Я вижу от memcache.py in the Python-memcache github project, он разводит объекты и сжимает их перед кешированием.
По умолчанию memcached допускает только значения до 1 МБ. Я считаю, что попытка кэшировать мои 200k DataFrames работает нормально, но 600k не устанавливаются на уровне memcache Python (клиент даже не выдает команду set, если я не использую -I
на memcached и не устанавливаю memcache.SERVER_MAX_VALUE_LENGTH
соответственно для моего Python клиент).
Хранение ~ 100 таких данных для memcache с помощью -I 5m
позволяет им все в порядке и занимает 36 МБ (36212 байт) на диске с записанными файлами pickle. Per Memcached stats
команды, я вижу почти 3x байты были написаны,
STAT bytes_read 89917017
STAT bytes_written 89917211
...
STAT bytes 53022739
Это то странно, что только 53MB хранятся, если 89MB были написаны.
Если я изменить мой memcaching код замариновать в DataFrames первый (т.е. запись в TempFile с .to_pickle()
, прочитал, что временный файл для хранения в кэше), я вижу размеры данных в кэше stats
соответствие, что на диске, когда я хранить те же файлы.
STAT bytes_read 36892901
STAT bytes_written 36893095
...
STAT bytes 36896667
Каково соотношение памяти, используемой для хранения маринованного объекта, по сравнению с его размером на диске? И почему бы не использовать memcache python аналогично эффективную работу по преобразованию DataFrames в меньшие размеры рассола, используя .to_pickle()
?
Рассол не может быть лучшим выбором для хранения DataFrames. Почему бы просто не хранить их как CSV или какой-либо другой более широко используемый формат? – BrenBarn
Я потратил еще некоторое время на изучение. Я отвечу на свой вопрос ниже. Хранение как CSV (как ни странно) почти такое же, как травление в двоичном формате. – hamx0r
Каковы ваши цели/требования к формату экспорта? Если вы хотите, чтобы он был небольшим, вам может быть лучше использовать формат, например msgpack. Основываясь на вашем собственном ответе ниже, мне все еще не ясно, почему вы используете маринование вообще. – BrenBarn