一个 mysql 数据库
同时服务于 1000 家公司
每家公司都是多用户,多权限,但是各家公司数据不相互影响
最初的想法是为每家公司都设置一个 companyID ,这样的话所有数据库的操作都要带上 companyID ,有没有更优的设计?
查过一些资料,貌似还要考虑表锁定、行锁定
请 architecture 高手帮忙指点多谢
1
klesh 2015-12-21 10:38:33 +08:00
各自独立的库
|
2
heaton_nobu 2015-12-21 10:46:24 +08:00
除了账户外其他还有什么数据?需要共用吗?
|
3
wy315700 2015-12-21 10:57:20 +08:00
每个公司一个数据库,
|
4
aisk 2015-12-21 10:58:00 +08:00
每个公司开个新库?
|
5
lynnworld 2015-12-21 11:00:26 +08:00
每个公司一个独立数据库, wordpress.com 就是这样。扩容也方便。统计性的工作通过数据冗余到一个额外独立数据库上。
|
6
wlee1991 OP |
7
loading 2015-12-21 12:36:45 +08:00 via Android
独立数据库
最起码也要表分开,用户名分开,设置好权限。 |
9
loading 2015-12-21 12:37:57 +08:00 via Android
如果访问量不大,写个 api ,方便很多。
|
10
NetCobra 2015-12-21 14:02:30 +08:00
@wlee1991 你要只有几个公司,一个库里面用 ID 区分每个用户没问题;真要到了 1000 家公司,一个数据库是绝对撑不住的。
每个公司一个库,在技术上是更好的方案,但是成本也会是很高的;不过你如果真的有 1000 家公司成为你的客户,这个成本是绝对值得付出的。 所以考虑一下你现在是否真的要为 1000 个公司的时候做准备,屠龙刀很好,但是用来杀鸡实在没有必要。 |
11
billwang 2015-12-22 00:02:16 +08:00
一千家公司?只是网站应用吗?如果是业务应用,劝你还是分库或者用 Oracle 等数据库的好。
|
12
darluc 2015-12-24 22:56:14 +08:00
# 根据数据量大小选择分表或分库。
# 根据公司 ID 进行路由选择。 # 想要把各自的东西分清楚,最简单的方式就是别把它们堆放在一起。 |