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

有个关于 mongodb 的问题,求大神来解答一下

  •  
  •   simple233 · 12 小时 52 分钟前 · 510 次点击

    如果我有很多租户,每个租户都可以创建很多自定义表单,每个表单的字段 id 都不一样,租户和表单会持续增长,只考虑数据库优化,怎么解决动态字段存储问题;

    暂时考虑使用分片,按{tenant_id, form_id}进行分片;

    某个动态字段也可能是一个表单 json 应该把动态字段放到一个 json 中,像

    {
      "tenant_id": 1, 
      "form_id": 1, 
      "data": {
        "f1": "f1", 
        "f2": "f2", 
        "f3": {
            "f3-1": "f3-1"
        }
      }
    }
    

    还是动态字段就和 tenant_id 并列在顶级,像

    {
        "tenant_id": 1, 
        "form_id": 1, 
        "f1": "f1", 
        "f2": "f2", 
        "f3": {
            "f3-1": "f3-1"
        }
    }
    

    哪种设计方案比较好?

    4 条回复    2025-09-12 20:29:23 +08:00
    seth19960929
        1
    seth19960929  
       11 小时 30 分钟前
    肯定方案一呀
    donaldturinglee
        2
    donaldturinglee  
       11 小时 9 分钟前
    你对比一下 data["f1"]["1-1"]["xxxx"]和 f1["1-1"]["xxx"]哪个可读性更高就知道了
    crysislinux
        3
    crysislinux  
       10 小时 27 分钟前 via Android
    建议再加个 version 来指明 schema 版本方便后续更新
    clf
        4
    clf  
       10 小时 23 分钟前
    肯定是 1 好。很简单,你表单数据均在 data 里,这样避免了后续扩充字段的时候可能的冲突。
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   959 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 22:52 · PVG 06:52 · LAX 15:52 · JFK 18:52
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.