现在有个 saas 项目,就是自助建站,用户组册了可以免费制作一个网站,并且可以发布新闻和产品,也可以自定义栏目,其中涉及到数据的操作,目前面临一个选择就是,是每个用户都生成一个单独的数据库、账号、密码还是大家共用一个数据库。
每人一个数据库的话,好处是数据隔离,相对安全,但是问题就是操作不方便,不便于统一管理
共用一个数据库则与上面相反
不知道各位有什么建议没有?感谢!
1
laobobo 135 天前
作为一个门外汉,不太懂后端,感觉你这如果一个用户一个数据库,少量还行,如果用户几十万个,难道要创建驾几十万的库?
|
2
cJ8SxGOWRH0LSelC 135 天前
肯定不是啊, 用屁股想也知道啊。 用一个租户字段, 所有查询都带上租户字段作为条件不就做到数据隔离了么。
|
3
ck65 135 天前 1
以 MVP 阶段考虑,单库+租户标识字段去隔离,ORM 和业务里封装好租户过滤就够了。
|
4
gaobh 135 天前 via iPhone
不就是多租户多角色权限多数据权限吗,跟普通后台没有区别
|
5
darkengine 135 天前
假设你有一万个用户,如果每个用户一个数据库,你是保持一万个数据库连接还是每次请求过来都重连数据库?
|
6
joker2026 OP @darkengine 这个最终他们的站点都会实现全净态化,只是在操作的时候链接数据库,这个链接也不需要一直保持
|
7
RangerWolf 134 天前
我们的 SaaS 最终选择了共用一个库、一个表,用租户字段做区分。
不然维护起来不是小团队能搞得定的~ 比如需要增加一个字段,如果租户稍多一些,比如 100 个,要对 100 张表做升级,这个难度可想而知 我不知道大厂咋弄的,反正我们小团队几个人,只有单裤单表这种选择 |
8
yinmin 134 天前 via iPhone
服务大客户,会有定制化开发的,建议一个客户一个数据库。如果不会有客户定制化开发,建议统一放在一个数据库里。
|
9
whp1473 134 天前
客户数量少可以用一个库,租户字段区分。
客户数量多可以用用户 ID 作分表分库,将相同用户分配到同一个库,然后客户数量上升时按照倍数拓展库,这样可以保持原用户 ID 分配到的库不变,对于特大客户可以按照规则区分单独设库,理论上可以支持无上限的用户数量,不断扩展服务器、数据库就可以。另一个方向是跨库统计分析如何处理,首先从产品上就应确定,每个用户只能看到自己维度的数据,所以这些可以通过简单 JOIN 分析得到,对于更高维度的分析,通过将数据抽取到 Hive 、Flink 、Spark 之类的引擎,然后再回流到 MySQL 或 Redis 对统计结果直接进行查询。还有也要做好冷热数据考虑,比如审计记录表数据很大,可以仅保持 1 年或 1 亿条数据,超过的打包为文件上传到对象存储,如果用户需要检索时再导入创建专门的查询表进行检索。 |
10
crysislinux 134 天前 via Android
这个业界大厂基本上都是用字段区分的,比如 salesforce ,很少一户一库的。假如你真的想一户一库,可以考虑 postgress 的 schema ,一户一 schema
|
11
chenuu 134 天前
公司项目是字段来分租户,我个人项目倾向于 schema 分租户,通过 flyway 同步 schema 结构差异,通过 hibernate 生成 ddl
|