V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
joker2026
V2EX  ›  问与答

saas 是每个用户一个数据库?统一到一个数据库?

  •  
  •   joker2026 · 93 天前 · 1314 次点击
    这是一个创建于 93 天前的主题,其中的信息可能已经有所发展或是发生改变。

    现在有个 saas 项目,就是自助建站,用户组册了可以免费制作一个网站,并且可以发布新闻和产品,也可以自定义栏目,其中涉及到数据的操作,目前面临一个选择就是,是每个用户都生成一个单独的数据库、账号、密码还是大家共用一个数据库。

    每人一个数据库的话,好处是数据隔离,相对安全,但是问题就是操作不方便,不便于统一管理

    共用一个数据库则与上面相反

    不知道各位有什么建议没有?感谢!

    11 条回复    2024-08-09 16:45:25 +08:00
    laobobo
        1
    laobobo  
       93 天前
    作为一个门外汉,不太懂后端,感觉你这如果一个用户一个数据库,少量还行,如果用户几十万个,难道要创建驾几十万的库?
    StinkyTofus
        2
    StinkyTofus  
       93 天前
    肯定不是啊, 用屁股想也知道啊。 用一个租户字段, 所有查询都带上租户字段作为条件不就做到数据隔离了么。
    ck65
        3
    ck65  
       93 天前   ❤️ 1
    以 MVP 阶段考虑,单库+租户标识字段去隔离,ORM 和业务里封装好租户过滤就够了。
    gaobh
        4
    gaobh  
       93 天前 via iPhone
    不就是多租户多角色权限多数据权限吗,跟普通后台没有区别
    darkengine
        5
    darkengine  
       93 天前
    假设你有一万个用户,如果每个用户一个数据库,你是保持一万个数据库连接还是每次请求过来都重连数据库?
    joker2026
        6
    joker2026  
    OP
       93 天前
    @darkengine 这个最终他们的站点都会实现全净态化,只是在操作的时候链接数据库,这个链接也不需要一直保持
    RangerWolf
        7
    RangerWolf  
       92 天前
    我们的 SaaS 最终选择了共用一个库、一个表,用租户字段做区分。
    不然维护起来不是小团队能搞得定的~

    比如需要增加一个字段,如果租户稍多一些,比如 100 个,要对 100 张表做升级,这个难度可想而知

    我不知道大厂咋弄的,反正我们小团队几个人,只有单裤单表这种选择
    yinmin
        8
    yinmin  
       92 天前 via iPhone
    服务大客户,会有定制化开发的,建议一个客户一个数据库。如果不会有客户定制化开发,建议统一放在一个数据库里。
    whp1473
        9
    whp1473  
       92 天前
    客户数量少可以用一个库,租户字段区分。
    客户数量多可以用用户 ID 作分表分库,将相同用户分配到同一个库,然后客户数量上升时按照倍数拓展库,这样可以保持原用户 ID 分配到的库不变,对于特大客户可以按照规则区分单独设库,理论上可以支持无上限的用户数量,不断扩展服务器、数据库就可以。另一个方向是跨库统计分析如何处理,首先从产品上就应确定,每个用户只能看到自己维度的数据,所以这些可以通过简单 JOIN 分析得到,对于更高维度的分析,通过将数据抽取到 Hive 、Flink 、Spark 之类的引擎,然后再回流到 MySQL 或 Redis 对统计结果直接进行查询。还有也要做好冷热数据考虑,比如审计记录表数据很大,可以仅保持 1 年或 1 亿条数据,超过的打包为文件上传到对象存储,如果用户需要检索时再导入创建专门的查询表进行检索。
    crysislinux
        10
    crysislinux  
       92 天前 via Android
    这个业界大厂基本上都是用字段区分的,比如 salesforce ,很少一户一库的。假如你真的想一户一库,可以考虑 postgress 的 schema ,一户一 schema
    chenuu
        11
    chenuu  
       92 天前
    公司项目是字段来分租户,我个人项目倾向于 schema 分租户,通过 flyway 同步 schema 结构差异,通过 hibernate 生成 ddl
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1915 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 16:24 · PVG 00:24 · LAX 08:24 · JFK 11:24
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.