Pandas msgpack vs pickle

msgpack в Pandas предполагается заменить на pickle.

В Pandas docs на msgpack:

Это легкий переносимый двоичный формат, похожий на двоичный JSON, который обладает высокой эффективностью в пространстве и обеспечивает хорошую производительность как на запись (сериализация) и чтение (десериализация).

Я считаю, однако, что его производительность не складывается против рассола.

df = pd.DataFrame(np.random.randn(10000, 100))

>>> %timeit df.to_pickle('test.p')
10 loops, best of 3: 22.4 ms per loop

>>> %timeit df.to_msgpack('test.msg')
10 loops, best of 3: 36.4 ms per loop

>>> %timeit pd.read_pickle('test.p')
100 loops, best of 3: 10.5 ms per loop

>>> %timeit pd.read_msgpack('test.msg')
10 loops, best of 3: 24.6 ms per loop

Вопрос: Пострадавшие от потенциальных проблем безопасности с рассолом, каковы преимущества использования msgpack над рассолом? Является ли рассол еще предпочтительным методом сериализации данных или существуют лучшие альтернативы в настоящее время?

Ответ 1

Pickle лучше для следующего:

  • Числовые данные или все, что использует буферный протокол (массивы numpy) (хотя, только если вы используете несколько недавних protocol=)
  • Конкретные объекты Python, такие как классы, функции и т.д. (хотя здесь вы должны посмотреть cloudpickle)

MsgPack лучше для следующего:

  • Перекрестное взаимодействие между языками. Это альтернатива JSON с некоторыми улучшениями.
  • Производительность по текстовым данным и объектам Python. Это достойный фактор быстрее, чем Pickle при этом при любых настройках.

Как отметил @Jeff этот blogpost может представлять интерес