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

104 天前
 joker2026

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

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

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

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

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

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

我不知道大厂咋弄的,反正我们小团队几个人,只有单裤单表这种选择
yinmin
104 天前
服务大客户,会有定制化开发的,建议一个客户一个数据库。如果不会有客户定制化开发,建议统一放在一个数据库里。
whp1473
104 天前
客户数量少可以用一个库,租户字段区分。
客户数量多可以用用户 ID 作分表分库,将相同用户分配到同一个库,然后客户数量上升时按照倍数拓展库,这样可以保持原用户 ID 分配到的库不变,对于特大客户可以按照规则区分单独设库,理论上可以支持无上限的用户数量,不断扩展服务器、数据库就可以。另一个方向是跨库统计分析如何处理,首先从产品上就应确定,每个用户只能看到自己维度的数据,所以这些可以通过简单 JOIN 分析得到,对于更高维度的分析,通过将数据抽取到 Hive 、Flink 、Spark 之类的引擎,然后再回流到 MySQL 或 Redis 对统计结果直接进行查询。还有也要做好冷热数据考虑,比如审计记录表数据很大,可以仅保持 1 年或 1 亿条数据,超过的打包为文件上传到对象存储,如果用户需要检索时再导入创建专门的查询表进行检索。
crysislinux
104 天前
这个业界大厂基本上都是用字段区分的,比如 salesforce ,很少一户一库的。假如你真的想一户一库,可以考虑 postgress 的 schema ,一户一 schema
chenuu
104 天前
公司项目是字段来分租户,我个人项目倾向于 schema 分租户,通过 flyway 同步 schema 结构差异,通过 hibernate 生成 ddl

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1063602

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX