Python 快速进行大量序列化的最佳选择是什么? Pickle? json? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
black11black

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

  •  
  •   black11black 2021 年 1 月 13 日 2579 次点击
    这是一个创建于 1928 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

    10G 网卡带宽打满,不优化设计?
    xchaoinfo
        8
    xchaoinfo  
       2021 年 1 月 13 日 via Android
    我之前做过低频次百万级别数据的序列化,用的 pickle,是 pandas 处理后的数据。
    序列化直接存储文件,数据库记录文件位置和一些属性信息。
    black11black
        9
    black11black  
    OP
       2021 年 1 月 13 日
    @php8 不是很理解这个算式,10M*100k 以后为什么要乘 100 呢,10M*100k 才 1T,没感觉有什么问题
    GoLand
        10
    GoLand  
       2021 年 1 月 13 日
    用 protobuf 的序列化,还能跨语言。pickle 不能跨语言吧?
    seven123
        11
    seven123  
       2021 年 1 月 13 日
    我用 msgpack
    php8
        12
    php8  
       2021 年 1 月 13 日 via Android
    @black11black 浮点数 8 字节,字符串平均几十字节,按 100 字节做估算
    tmackan
        13
    tmackan  
       2021 年 1 月 13 日
    @seven123 只支持 py
    tmackan
        14
    tmackan  
       2021 年 1 月 13 日
    可以参考下 https://github.com/jvanasco/dogpile_backend_redis_advanced
    这里有有个测试数据
    tmackan
        15
    tmackan  
       2021 年 1 月 13 日
    跨语言的话,还是用 json 吧一般,pickcle 不跨语言,之前研究过 dogpile 的缓存框架,默认是 pickle 。。。
    ruanimal
        16
    ruanimal  
       2021 年 1 月 13 日
    msgpack 试试看
    tabris17
        17
    tabris17  
       2021 年 1 月 13 日
    encode 是 cPickle 快,decode 是 msgpack 快,看应用场景了
    lizytalk
        18
    lizytalk  
       2021 年 1 月 13 日
    pickle 快。json 可读性强,而且大部分语言都支持。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2671 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 60ms UTC 04:43 PVG 12:43 LAX 21:43 JFK 00:43
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86