跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 这种情况用 jsonb 保存好还是用表保存好呢
未分類
17 11 月 2020

这种情况用 jsonb 保存好还是用表保存好呢

这种情况用 jsonb 保存好还是用表保存好呢

資深大佬 : FightPig 6

一个表是 table1,另一个表是 table2, table1:

id:int name: varchar 

table2

id:int table1_id:int content: varchar 

如有一条 table1 记录,可能下面有几千条 table2 记录,当 table1 表不停增加,我发现 table2 表数据最后能达到几亿条,然后如果把 table1 改成

talbe1: id: int name: varchar items: jsonb

比如这样保存, table1 中把关联保存成这样

items: [{content: "content1"}, {content: 'content2'}.....] 

这样,如果 table1 有 100 万条,不用生成 table2 的 100 万*几千条,不知道这样行不行?这样 table2 不会出现几亿甚至几十亿条数据,主要我是担心这个上几亿速度会变很慢。

大佬有話說 (10)

  • 資深大佬 : echowuhao

    不可取。1. 肯定会更慢,取决于你查询的内容。
    2. 仅 content 一个词,一亿条记录就增加了快 650M 的空间占用。

    你可以弄个几万条记录测试一下,我只是猜想。

  • 資深大佬 : echowuhao

    查了一下,jsonb 也有 size limit,which is 255 MB.

    https://stackoverflow.com/questions/12632871/

    如果内容比较多,不能用。

  • 主 資深大佬 : FightPig

    @echowuhao 谢谢,上面说的有点错,现在 table1 这个表不停增长,大约后期有 100w 条多,一个 table1 最多关联 2000 多条 table2 数据吧,这样一算,table2 这数据量有点太大,如果保存成 jsonb,那这样也就只有 100w 多条 table1,感觉查询应该比查询 100w*2000 这样的数量好查询,主要是 table2 这个表不断膨胀,如果保存成 jsonb 形式的,没有 1 亿条了,只有 table1 的条数 100w 多吧。

  • 資深大佬 : echowuhao

    你实际测一下。表虽然 row size 多了一点,但是 postgres 可以有更多信息优化,你堆到 jsonb 里面,postgres 能知道的信息更少,查询的时候就要麻烦了。

    我个人没有做过那么大的表,所以只能理论说一下。

  • 資深大佬 : echowuhao

    @FightPig 没有一亿条了,但是 content 字符出现的次数不是 table1 row size 而是 table 2 的。你之前只寸这个字符一次,就是列名,但是你存到 jsonb 里面不是一百万次,而是一亿次。只一亿次是凭空多出来的存储空间。

  • 資深大佬 : emeab

    先确定 table2 需不需要单独查询 如果不需要可以用 jsonb
    json 存储起来占用的空间会比较大

  • 資深大佬 : sjzzz

    这种最终还是要看 后续的业务逻辑 光分析表结构意义不大。

  • 主 資深大佬 : FightPig

    @echowuhao 嗯,我单独插入 1 亿条试了下,在加了外键索引下,查询 还行,毕竟一条记录只关联 2000 多条 table2,
    @emeab table2 要更新,比如要改下{content1: ‘content1’, content2: ‘content2’}更新成{content1: ‘content1111’, content2: ‘content2’},查询的话,只是要取出 这个 jsonb 的 key 成一个数组 [‘content1′,’content2’] ,然后用这个数组去查另一张表里的数据 。

  • 資深大佬 : liprais

    肯定分开啊,不然你 update 别的字段的时候 jsonb 也被读了一遍

  • 主 資深大佬 : FightPig

    @liprais
    @sjzzz 放弃 jsonb 了,在我这两天测试,加入 2000 项后, 查询表时慢的不行,google 看了下好像是 pg 的 jsonb 用了 TOAST,换成了 mongodb 了

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具