多租户系统,采用 PostgreSQL 好还是 Mysql 好

2021-05-11 15:10:26 +08:00
 lostSoul

saas 类型的系统,目前是采用了最 low 的行级多租户,也就是每个表加一个 tenantId,然后用代码逻辑隔离,现在随着系统的用户增长,很多问题随着出现了,维护麻烦,性能低效,代码逻辑复杂混乱
于是决定重构,打算采用多租户的另外一套方案,单库多 schema,但查阅了资料,发现 mysql 根本没有真正意义上的 schema,或者说 schema 就是 database
再后来了解到 PostgreSql,感觉国内资料挺少的,用的也很少,但看到一些比较资料发现他比 mysql 好太多了,但又怕上了踩坑,而且还要数据迁移之类的,有没有大佬给个方案

7776 次点击
所在节点    MySQL
38 条回复
miao1007
2021-05-11 19:54:10 +08:00
万事不绝,ELK 包治百病,用 ELK 索引作为二级主键
zzl22100048
2021-05-11 20:06:36 +08:00
元数据驱动模式做 saas 不是更好么
zieglar
2021-05-11 20:07:13 +08:00
PostgreSQL 做错了什么要把矛头指向它(
joesonw
2021-05-11 20:18:04 +08:00
其实这种场合 sqlite 很合适.
AngryPanda
2021-05-11 20:21:36 +08:00
我们 mongodb 分 db 方案
xuanbg
2021-05-11 21:45:14 +08:00
第三种增加据的维护难度和让代码变得异常复杂???我怎么一点感觉都无?哦哦,我是手写 SQL,无非就是查询条件增加一个 tenantId = #{tenantId}的条件而已。没事了没事了。
kaneg
2021-05-12 01:45:06 +08:00
table 加 tennat id 如果能在框架层面做还好。否则纯手动维护,如果碰到粗心的程序员在某些语句中忘了加 tenant id,那后果就不可设想了。在某个项目中碰到过这样的案例:开发在本地测试的时候只有一个 tenant,没有测出这个问题。结果在项目上线后被客户发现看到了其他公司的数据。。。
zzlhr
2021-05-12 08:45:17 +08:00
我们系统用 sqlserver 五年了快,就是 low3 方案,加了个 compid
securityCoding
2021-05-12 10:54:21 +08:00
tennat id 不是挺好的吗?
HashV2
2021-05-12 11:30:35 +08:00
哪有什么 low 不 low 的 只看使用场景和需求 能满足的需求的设计就是好设计
ccppgo
2021-05-12 11:40:56 +08:00
什么意思, 如果有上万个用户就有上万个库吗,,,
notejava
2021-05-12 12:16:35 +08:00
通过租户 ID 进行数据隔离才是最简单,最好扩展的方案。我目前项目也遇到一模一样的场景。
lostSoul
2021-05-12 16:12:52 +08:00
1.租户处于爆发式增长应该越倾向于共享,因为一旦租户多了起来,不管是单库还是单表多 schema,维护的成本都是巨大的,涉及后期迭代的时间成本也会随即累加(场景:一些对外开放的 Saas 系统,支持用户自主注册使用,而非人工开通或付费开通)
lostSoul
2021-05-12 16:23:09 +08:00
2.租户数量平稳同时租户数据多应该倾向于隔离,使用隔离级别高的有利于对每个租户进行定制化开发而不会影响到其他租户
lostSoul
2021-05-12 16:23:41 +08:00
因为我是新号回复受限只能回复在评论里
oneforallsoft
2021-05-12 18:46:36 +08:00
@lostSoul
而且如果租户有各种各样的需求 每个租户都不一样 就应该一个租户一个数据库 一个租户一套代码
不会互相影响 尤其是在没有足够测试人员的情况下
solos
2021-05-12 22:18:52 +08:00
这不是很正常,现在有 tidb / cockroach 这些支持水平扩展的分布式数据库了,更不是问题了
ccde8259
2021-05-12 23:25:24 +08:00
MySQL 有分区表……
直接拿 tenantId 做 Column Partition 就避免发生新租户上来就在查百万表的情况……
同时 5.7 开始支持索引条件下推……

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

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

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

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

© 2021 V2EX