V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zx9481
V2EX  ›  数据库

你们会在数据库字段里存 json 字符串吗

  •  
  •   zx9481 · 14 天前 · 3196 次点击

    当前项目中存在一个包含 7-8 个级联下拉框的查询模块,其中多数控件具有 3-4 级嵌套关系。考虑将所有枚举数据通过 AI 预处理生成结构化 JSON ,采用单字段存储方案,配合 Redis 持久化缓存,最终直接向前端输出完整数据结构。

    大佬们,这种设计是否具备可行性?这种"全家桶"式的处理方式会不会有什么坑?

    30 条回复    2025-04-11 11:45:59 +08:00
    joyhub2140
        1
    joyhub2140  
       14 天前   ❤️ 1
    我也遇到过这种深嵌套的结构,连表能拖死 MySQL ,最后把这部分数据单独扔 mongodb 完事了。
    vincentWdp
        2
    vincentWdp  
       14 天前
    要不要查询, 以及如何查询决定了如何存储.
    lixikei
        3
    lixikei  
       14 天前
    我就把数据 json 字符串存了一个字段
    hkiJava
        4
    hkiJava  
       14 天前   ❤️ 2
    有这种设计方案的,就是修改字段值不大方便,如果读的频率大于写,可以搞
    edward1987
        5
    edward1987  
       14 天前
    看数量级吧,如果一次性返回数据量很大的话,还是分层级缓存好点。
    635925926
        6
    635925926  
       14 天前
    级联应该就是查出来( pid ,level ),后端组合成 tree 。
    lcbp
        7
    lcbp  
       14 天前
    这类数据直接放到 MongoDB 里面
    niubiman
        8
    niubiman  
       14 天前
    我们项目有一些字段就是直接 json 存的, 比如我们有一个场景是订单明细需要多次入库, 这个就是在订单明细上直接用 json 保存入库记录, 单开一张表的话感觉有点脱裤子放屁的感觉, 对了我们用的库是 pg, 目前没有性能上的问题
    pytth
        9
    pytth  
       14 天前
    存过数组['你好','我好','大家好']
    niubiman
        10
    niubiman  
       14 天前
    @hkiJava 对的, 偏日志类的, 并且层级不太深的直接 json 更合理, 在 DDD 中也推荐在一些场景直接使用 json 而不是开表
    kneo
        11
    kneo  
       14 天前 via Android
    如果数据库支持原生 Json 字段就存。不支持的话再考虑考虑。
    moefishtang
        12
    moefishtang  
       14 天前
    用 json 存过订单详情(订购的商品条目之类的),因为不想另外起一个表,觉得关联查询麻烦
    laikick
        13
    laikick  
       14 天前
    postgresql 没问题
    NessajCN
        14
    NessajCN  
       14 天前
    mongodb 了解一下
    neptuno
        15
    neptuno  
       14 天前
    都是些枚举值,而且还有 redis 缓存,怕啥,直接上
    superchijinpeng
        16
    superchijinpeng  
       14 天前
    大量字段全是 JSON ,JSON 中还有大量 Base64
    yhnbgfd
        17
    yhnbgfd  
       14 天前
    没问题, 就是一个{}或者[]的字符串而已.
    rlds
        18
    rlds  
       14 天前
    大量的 json 丢 mongodb 去了。
    sazima
        19
    sazima  
       14 天前
    属于常规操作
    zoharSoul
        20
    zoharSoul  
       14 天前
    存就行了 跟 ai 啥关系
    LASockpuppet
        21
    LASockpuppet  
       14 天前 via iPhone
    级联的一般会扁平化吧
    jqtmviyu
        22
    jqtmviyu  
       14 天前
    见过表单转 json 存 mysql, 然后用在回填上的. 仔细想想, 也没什么其他方法呀.
    KKKKKKKKKKKKKKKK
        23
    KKKKKKKKKKKKKKKK  
       13 天前
    pgsql 没问题,把需要查询的字段拿出来就好了
    lyxxxh2
        24
    lyxxxh2  
       13 天前
    以前存,后面统计/修改 火葬场,后悔死我了。
    spritecn
        25
    spritecn  
       13 天前
    不稳定不索引的和主业务关系不大的数据会存,并且字段名大概率叫 extJson
    tenserG
        26
    tenserG  
       13 天前 via iPhone
    存了 但是数据量不大
    spritecn
        27
    spritecn  
       13 天前
    @lyxxxh2 哈哈哈,只有一个模块这么干过,主数据一个 json,附加数据一个 json,跑倒时没有问题,统计数据那叫一个痛苦,虽然 mysql5.7+的 json 查询还算是比较成熟的,但每次查询都需要复习一下 mysql 的 json 箭头语法
    Hudiebbk
        28
    Hudiebbk  
       13 天前
    这个要看查询的需求,如果查询需求简单没有过多嵌套,当然可以搞,我现在设计很多字段直接 json 存储,而且 mysql8 对 json 支持也还可以,可以建索引如有必要
    volvo007
        29
    volvo007  
       13 天前
    我用 pg ,丝滑~
    PatchouliTC
        30
    PatchouliTC  
       12 天前
    原则上可以,毕竟业务上经常遇到这类单独拉字段用不上/单独拉表关系没用的数据,但是指不定以后业务升级会用到的一堆玩意,基本就是归档一个 json 然后找个字段塞进去美其名曰 snapshotData,只要你确定你没有后端复杂查询过滤部分会涉及到 js 内层级结构就随便搞[如果业务逻辑要求是先获取单条记录再对 js 内数据判断也可以这么玩]
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5596 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 01:54 · PVG 09:54 · LAX 18:54 · JFK 21:54
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.