json 数据的存储, 是放在 redis 还是数据库 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
hyhcoder
V2EX    数据库

json 数据的存储, 是放在 redis 还是数据库

  •  
  •   hyhcoder 2018-02-27 17:20:09 +08:00 3363 次点击
    这是一个创建于 2785 天前的主题,其中的信息可能已经有所发展或是发生改变。

    现在有一批用户设计的数据, 最后前端会用 json 的数据封装, 之前的设计都是直接把这个寸数据库, 导致现在那张表越来越大, text 类型过多会导致臃肿, 那这些数据是要怎么设计处理比较合理呢? 放 redis? 如果数据量一大好像也吃内存什么吧; 还是转对象单独存一张表, 但问题现在的设计数据有好多类型, 并不一致;

    大家有遇到这种的经验吗? 或者让你设计会怎么设计

    32 条回复    2018-02-28 15:10:02 +08:00
    hyhcoder
        1
    hyhcoder  
    OP
       2018-02-27 17:22:49 +08:00
    其实就是数据库大文本, 过多会拖慢数据库, 这样要怎么处理, 放 redis 吗, 还是怎么弄
    cstj0505
        2
    cstj0505  
       2018-02-27 17:23:55 +08:00   1
    放数据库的话可以考虑 postgresql,支持 json 类型,json 索引,函数。

    不过还是建议你们在设计端考虑考虑吧,用 json 存储对象优点偷懒
    jjianwen68
        3
    jjianwen68  
       2018-02-27 17:24:55 +08:00   1
    mysql5.7 原生支持 json,是不是底层对这种情况做了优化?
    lizhenda
        4
    lizhenda  
       2018-02-27 17:26:56 +08:00   1
    mongodb 冗余大数据你值得拥有
    est
        5
    est  
       2018-02-27 17:29:58 +08:00   2
    能问这种问题的,一般 mongodb 能管饱。

    如果 mongodb 不管饱,那么你对你的问题就问得更加有针对性了。
    Immortal
        6
    Immortal  
       2018-02-27 17:31:28 +08:00   1
    mongodb
    solee
        7
    solee  
       2018-02-27 17:56:16 +08:00   1
    不是 mongodb 么
    lcj2class
        8
    lcj2class  
       2018-02-27 17:56:55 +08:00   1
    「用户设计的数据」不需要查找、过滤嘛?如果不需要,感觉可以纵向拆表,把常用的数据与这些数据分开
    maemual
        9
    maemual  
       2018-02-27 17:57:27 +08:00   1
    这个 json 需要查询么?怎么听起来这个 json 只是当成 text 使用呢?
    hyhcoder
        10
    hyhcoder  
    OP
       2018-02-27 17:58:57 +08:00
    @lcj2class 基本不需要查询, 可以说直接取出前端用即可
    hyhcoder
        11
    hyhcoder  
    OP
       2018-02-27 18:00:37 +08:00
    @maemual 现在的确就是当成一个 text 来用, 但表空间增长得恐怖, 现在一个表 250G 了, 但这些数据其实不是查询相关, 感觉不应该直接放数据库的样子
    hyhcoder
        12
    hyhcoder  
    OP
       2018-02-27 18:01:24 +08:00
    @lcj2class 其实就还是存数据库, 就单表单字段关联这样吧
    ray1888
        13
    ray1888  
       2018-02-27 18:04:34 +08:00   1
    是经常需要读的数据吗?还是需要修改的数据?
    swulling     14
    swulling  
       2018-02-27 18:07:01 +08:00 via iPad   1
    @hyhcoder 如果是 11 楼的需求,mongodb 很符合。

    redis 显然不符合。。250G
    hyhcoder
        15
    hyhcoder  
    OP
       2018-02-27 18:08:03 +08:00
    @ray1888 会经常读, 也会修改更新
    ray1888
        16
    ray1888  
       2018-02-27 18:37:18 +08:00 via Android
    250g 的话,感觉 mongo 可能会坑,感觉可以试试 tidb(他们好像挺标榜性能的,看他们的宣传)或者 hbase 感觉也可以
    th00000
        17
    th00000  
       2018-02-27 19:23:39 +08:00
    最近接触了 dynamodb 对 json 的支持比较好 , 不负责任的回答
    wweir
        18
    wweir  
       2018-02-27 19:29:45 +08:00 via Android
    表过大影响速度了吗?
    没影响的话,直接对表分区好了
    CoderGeek
        19
    CoderGeek  
       2018-02-27 19:32:46 +08:00 via iPhone
    数据量太大了 redis 不太合适 小的直接存 json str 到可以
    CoderGeek
        20
    CoderGeek  
       2018-02-27 19:33:10 +08:00 via iPhone
    或者 mysql5.7 可以存 json 支持查询
    qiayue
        21
    qiayue  
    PRO
       2018-02-27 19:36:54 +08:00
    最简单改动最小的就是还用 MySQL,增加一个 json 表(可以单表也可以拆分),这个表存 json 字符串,然后原先的表只存这个表的 ID。用的时候再去 json 表取,再配合一定的缓存( Memcached 或者 Redis ),速度飞快
    prolic
        22
    prolic  
       2018-02-27 19:40:14 +08:00 via Android
    看起来像类似用户词典之类的东西,还是存成静态文件,拿 key 取比较合适
    pathbox
        23
    pathbox  
       2018-02-27 19:41:32 +08:00 via iPhone
    pg 欢迎你,MySQL 其实也没问题
    wizardforcel
        24
    wizardforcel  
       2018-02-27 20:06:23 +08:00
    mongodb

    无论是 redis 还是关系型数据库,都需要整个拿出来再解码才能查询里面的一个属性,开销太大,mongo 就不用。
    puritania
        25
    puritania  
       2018-02-27 21:42:13 +08:00
    将大字段从表中拆出去,单独建库,做好分表策略使得单表数据量足以满足查询速度,可以考虑用 redis 缓存数据,每个 key 设置较短的超时时间,每次 get key 时重置超时时间,让热数据一直在 cache 中,冷数据及时过期。
    xpresslink
        26
    xpresslink  
       2018-02-27 21:42:43 +08:00
    建议用 postgres 9.5+版,已对 json 和 jsonb 支持相对比较完善了,至少没有其它数据库比得上。存取速度和 mongodb 不相上下,所以直接用 pg 吧。250G 对于 pg 来说只是毛毛雨。
    beginor
        27
    beginor  
       2018-02-27 22:44:05 +08:00 via Android
    用 pg 吧,妥妥的
    0915240
        28
    0915240  
       2018-02-28 00:05:59 +08:00
    是单表 250G ???
    killpanda
        29
    killpanda  
       2018-02-28 00:16:11 +08:00 via iPhone
    感觉这种场景可能是设计问题
    Zzde
        30
    Zzde  
       2018-02-28 00:18:08 +08:00 via iPhone
    前段提交的数据不需要过滤拆分吗?需要时候在重新组合返回不行吗?
    changrui0608
        31
    changrui0608  
       2018-02-28 10:21:32 +08:00
    NoSQL 用 MongoDB,RDMS 用 PostgreSQL,这俩对 JSON 的直接支持已经有较久的历史了,速度都很快,最近 MySQL 不太了解
    印象里 redis 这种大多是拿来存逻辑上可以非持久化的数据的,比如配置、session、数据库查询结果缓存之类的
    iceiceice
        32
    iceiceice  
       2018-02-28 15:10:02 +08:00
    我猜你需要 mongodb 真的适合你
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     968 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 22:24 PVG 06:24 LAX 15:24 JFK 18:24
    Do have faith in what you're doing.
    ubao 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