black11black
V2EX  ›  问与答

Python 快速进行大量序列化的最佳选择是什么? Pickle? json?

  •  
  •   black11black · Jan 13, 2021 · 3053 views
    This topic created in 2121 days ago, the information mentioned may be changed or developed.

    如题,现有一需求,需要夸空间、时间地共享内存状态,意思是多进程互相调用,且比如在今天有可能调用历史上某一次执行结果的状态。

    想了想,似乎还是序列化以后存数据库里最好。

    需要序列化的数据假定为长度十万的数组,内部只存字符串和浮点数两种数据,在这种情况下,Python 序列化最快的方案是什么呢?

    除了使用 cpython 解释器,其他协议等等均不限,不与前端通信,仅在后端之间交换。除了量特别大(比如每天要进行一千万次序列化与反序列化)

    18 replies  •  2021-01-13 16:29:51 +08:00
    helloworld000
    helloworld000
    Jan 13, 2021
    1
    SD10
    SD10
    Jan 13, 2021 via iPhone
    2
    100 多 QPS 很高了
    sunhk25
    sunhk25
    Jan 13, 2021 via Android
    3
    从数据库拿出来再到反序列化会花掉不少时间,直接存数据库呗
    black11black
    black11black
    OP
    Jan 13, 2021
    4
    @sunhk25 你有 py 对象要入库,无论如何还是得序列化和反序列化啊
    Wincer
    Wincer
    Jan 13, 2021 via Android
    5
    pickle 在 3.8 版本比 json 快很多
    sunhk25
    sunhk25
    Jan 13, 2021 via Android
    6
    @black11black 不是简单的数据库查询和计算而是需要整个对象的话,那还是 pickle 。
    php8
    php8
    Jan 13, 2021 via Android
    7
    读写量级: 10M * 100K * 100,100TB 每天
    IO 速率: 100TB / 86400,1.2GB 每秒

    10G 网卡带宽打满,不优化设计?
    xchaoinfo
    xchaoinfo
    Jan 13, 2021 via Android
    8
    我之前做过低频次百万级别数据的序列化,用的 pickle,是 pandas 处理后的数据。
    序列化直接存储文件,数据库记录文件位置和一些属性信息。
    black11black
    black11black
    OP
    Jan 13, 2021
    9
    @php8 不是很理解这个算式,10M*100k 以后为什么要乘 100 呢,10M*100k 才 1T,没感觉有什么问题
    GoLand
    GoLand
    Jan 13, 2021
    10
    用 protobuf 的序列化,还能跨语言。pickle 不能跨语言吧?
    seven123
    seven123
    Jan 13, 2021
    11
    我用 msgpack
    php8
    php8
    Jan 13, 2021 via Android
    12
    @black11black 浮点数 8 字节,字符串平均几十字节,按 100 字节做估算
    tmackan
    tmackan
    Jan 13, 2021
    13
    @seven123 只支持 py
    tmackan
    tmackan
    Jan 13, 2021
    14
    可以参考下 https://github.com/jvanasco/dogpile_backend_redis_advanced
    这里有有个测试数据
    tmackan
    tmackan
    Jan 13, 2021
    15
    跨语言的话,还是用 json 吧一般,pickcle 不跨语言,之前研究过 dogpile 的缓存框架,默认是 pickle 。。。
    ruanimal
    ruanimal
    Jan 13, 2021
    16
    msgpack 试试看
    tabris17
    tabris17
    Jan 13, 2021
    17
    encode 是 cPickle 快,decode 是 msgpack 快,看应用场景了
    lizytalk
    lizytalk
    Jan 13, 2021
    18
    pickle 快。json 可读性强,而且大部分语言都支持。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2428 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 59ms · UTC 15:39 · PVG 23:39 · LAX 07:39 · JFK 10:39
    ♥ Do have faith in what you're doing.