postgresql 同一张表里多个字段都是 json 或 jsonb 的设计合理吗 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
imherer
V2EX    PostgreSQL

postgresql 同一张表里多个字段都是 json 或 jsonb 的设计合理吗

  •  
  •   imherer 2018-10-30 15:34:34 +08:00 3239 次点击
    这是一个创建于 2621 天前的主题,其中的信息可能已经有所发展或是发生改变。

    假如有一张表有如下字段: c1,c2,c3 这 3 个字段,其中 c3 类型为 json,假如 c3 里只有部分 key 会频繁的更新,但我看更新的时候好像必须得 update 整个 c3 字段,我是不是可以把 c3 里经常更新的 key 再拆为多个 column,单独更新他们,但是不知道同一张表里 json 字段太多了会不会有什么性能上的问题

    主要是考虑性能方面的问题,这种设计有没有什么问题

    12 条回复    2018-11-19 17:14:33 +08:00
    xyjincan
        1
    xyjincan  
       2018-10-30 16:37:13 +08:00
    m
    lorazepam
        2
    lorazepam  
       2018-10-30 17:20:28 +08:00
    ```
    jsonb_set('[{"f1":1,"f2":null},2,null,3]', '{0,f1}','[2,3,4]', false)

    [{"f1":[2,3,4],"f2":null},2,null,3]
    ```
    怎么会 update 整个字段?
    imherer
        3
    imherer  
    OP
       2018-10-30 17:43:17 +08:00
    @lorazepam 刚接触 postgresql,请教下
    ````
    {
    "guid": "9c36adc1-7fb5-4d5b-83b4-90356a46061a",
    "name": "Angela Barton",
    "is_active": true,
    "company": "Magnafone",
    "address": "178 Howard Place, Gulf, Washington, 702",
    "registered": "2009-11-07T08:53:22 +08:00",
    "latitude": 19.793713,
    "longitude": 86.513373,
    "tags": [
    "enim",
    "aliquip",
    "qui"
    ]}
    ````
    假如这一的 json,我只更新 tags 的话 sql 应该怎么写呢?条件是 guid
    EchoUtopia
        4
    EchoUtopia  
       2018-10-30 17:52:04 +08:00 via Android
    @lorazepam jsonb_set 完了不是还要赋值回去么?
    imherer
        5
    imherer  
    OP
       2018-10-30 18:04:55 +08:00
    @EchoUtopia
    @lorazepam
    好像是啊,我看了文档里 jsonb_set 只是改变当前 json 的值,我是要把这个改变更新到库里去
    只能整个字段更新吧好像?
    xyjincan
        6
    xyjincan  
       2018-10-30 18:13:22 +08:00 via Android
    把变动少的,不变的属性拿出来
    n2ex2
        7
    n2ex2  
       2018-10-30 18:17:41 +08:00 via iPhone
    肯定不是更新整个字段,不然就不需要 json 类型,用字符串就完了。
    n2ex2
        8
    n2ex2  
       2018-10-30 18:18:54 +08:00 via iPhone
    json 操作以前看过有些复杂,如果你的 json 不长的话其实可以不用。
    imherer
        9
    imherer  
    OP
       2018-10-31 09:27:57 +08:00
    @xyjincan 嗯,我也是想按更新频繁度拆分字段。 就是不知道一张表里 json 类型的字段太多会不会有什么性能上的问题
    imherer
        10
    imherer  
    OP
       2018-10-31 09:29:47 +08:00
    @n2ex2 那你倒是说说部分更新怎么实现啊?
    注意是更新入库,不是在 RAM 里的操作
    reus
        12
    reus  
       2018-11-19 17:14:33 +08:00
    pg 更新一行,是一整行创建一个 tuple 的,所以没有必要分开。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2360 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 05:20 PVG 13:20 LAX 21:20 JFK 00:20
    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