Я пробовал мариновать против json против msgpack против маршала.
Рассол намного медленнее, чем JSON.
И msgpack как минимум в 4 раза быстрее, чем JSON.
MsgPack выглядит как лучший вариант, который у вас есть.
Edit:
Пробовал и маршал тоже. Маршал быстрее, чем JSON, но медленнее, чем msgpack.
Время истекло : рассол> JSON> Маршал> MsgPack
Занятое место : маршал> Пикл> Джсон> MsgPack
import time
import json
import pickle
import msgpack
import marshal
import sys
array = [1]*10000
start_time = time.time()
json_array = json.dumps(array)
print "JSON dumps: ", time.time() - start_time
print "JSON size: ", sys.getsizeof(json_array)
start_time = time.time()
_ = json.loads(json_array)
print "JSON loads: ", time.time() - start_time
# --------------
start_time = time.time()
pickled_object = pickle.dumps(array)
print "Pickle dumps: ", time.time() - start_time
print "Pickle size: ", sys.getsizeof(pickled_object)
start_time = time.time()
_ = pickle.loads(pickled_object)
print "Pickle loads: ", time.time() - start_time
# --------------
start_time = time.time()
package = msgpack.dumps(array)
print "Msg Pack dumps: ", time.time() - start_time
print "MsgPack size: ", sys.getsizeof(package)
start_time = time.time()
_ = msgpack.loads(package)
print "Msg Pack loads: ", time.time() - start_time
# --------------
start_time = time.time()
m_package = marshal.dumps(array)
print "Marshal dumps: ", time.time() - start_time
print "Marshal size: ", sys.getsizeof(m_package)
start_time = time.time()
_ = marshal.loads(m_package)
print "Marshal loads: ", time.time() - start_time
Результат:
JSON dumps: 0.000760078430176
JSON size: 30037
JSON loads: 0.000488042831421
Pickle dumps: 0.0108790397644
Pickle size: 40043
Pickle loads: 0.0100247859955
Msg Pack dumps: 0.000202894210815
MsgPack size: 10040
Msg Pack loads: 7.58171081543e-05
Marshal dumps: 0.000118017196655
Marshal size: 50042
Marshal loads: 0.000118970870972