怎样设计多客户使用的数据库?

时间:2022-10-09 19:27:30
现在有一套OA系统,以前是以项目的方式一个客户一个客户实施,每个客户一套,每个客户都按需求修改。

平台需求:
现在需要抽取通用的功能形成一个在线通用产品(比如 1、人事管理 2、日程管理 3、文档管理 4、消息管理 5、系统管理 6、考勤管理),客户只要注册就可以使用,预计一台服务器100个中小客户使用,同时在线人数达2000人以上。

设计时,这里有几个问题:
1.设计时一台服务器上Web 应用程序用一套,但数据库为每个客户建立一个?还是共用一个数据库?如果共用一个数据库,那这样数据库会不断增长导致速度慢。每个客户建一个数据库,那管理维护起来又不方便,这个怎么平衡?

2.由于用户体验要求比较高,大家有没有好的控件推荐,风格统一,比如Grid支持排序,(尝试过EXT.net,但发现加裁速度比较慢)。

3.安全性,由于是在线平台,必须保证客户资料不会盗取,有哪些具体措施。


有相关经验的朋友提供一些建议,谢谢!

13 个解决方案

#1


最好是一个客户一个库
为了维护方便又不影响性能,可以所有客户在一个库,大的表采用分区表

#2


怎样设计多客户使用的数据库?

引用 1 楼 sz_haitao 的回复:
最好是一个客户一个库
为了维护方便又不影响性能,可以所有客户在一个库,大的表采用分区表

#3


如果客户数量很多,可以放在一个库,但是权限控制及事务控制要管理得很好才性。如果数量不多,分开库可以减少很多编程复杂度。安全性也相对高一点。

1、人事管理 2、日程管理 3、文档管理 4、消息管理 5、系统管理 6、考勤管理
这些分模块就可以了。

2.由于用户体验要求比较高,大家有没有好的控件推荐,风格统一,比如Grid支持排序,(尝试过EXT.net,但发现加裁速度比较慢)。
这个要综合优化,既要优化SQLServer,也要优化前端编程,比如不要返回大量数据。
3.安全性,由于是在线平台,必须保证客户资料不会盗取,有哪些具体措施。
这部分要从网络、防火墙、Windows、SQLServer每个层面逐步强化,安全性可以参考:
http://download.csdn.net/detail/dba_huangzj/5395925


#4


关于安全性
1:可参看防止sql注入。http://wenku.baidu.com/view/97b0a200b52acfc789ebc972.html
2:你的客户资料机密信息要进行加密

#5


客户会很多,以前每个客户10G的数据库,如果接入50个客户,那就是500G的SQL数据库。
1. 做成一个数据库的话,一个表中存了不同客户的数据,查询慢,并发高。比如[文档表],有的客户有几十条记录,如果多个客户放在一个表中,这个表可能达上千条记录。

2.为每个客户建一个数据库的话,50个客户就是50个库,升级的时候,加个字段,建个表或存储过程得跑50遍? 另外有的客户注册了基本上没怎么用,如果一注册就建立一个库,那很浪费资源。

从性能考虑或编程复杂度考虑,我个人也倾向于第二种方式。

有没有人实践过的?

#6


还有 200分在另一个贴子,http://bbs.csdn.net/topics/390464173
要分析利弊,分只给最佳方案。

#7


每个客户建立一个独立数据库管理,然后,建立对应的云维护平台包括账号开设,续费,关闭账号,系统升级。。。这样升级就不会麻烦了。。。
如果所有客户在一个数据库会存在严重的性能问题的。。,。

#8


该回复于2013-05-22 14:03:29被管理员删除

#9


说一下个人感觉:
之前在的公司系统改的比较乱,所以对这种有一定感触。

如果客户经常改动比较大,还是分开比较好。
举个例子:
如果有表1和表2为主从表,突然,有一个客户,说是要在中间再加一个表3。也就是改成表1和表3是主从表,表3和表2是主从表。
如果主从表之间的关系是用代码来维护的,那还好,如果是用的数据库中的主外键来维护的,那表结构就有可能会乱掉了。

当然,如果客户很少有大的改动,放在一起也可以。

#10


不建议分库,
500GB大小的数据库只是中等数据库的大小,完全没有必要分库,
你需要考虑详细一点,做好数据库底层的架构,应付500G的数据库是没有问题的。

#11


.不同用户还是分库感觉要安全的多

#12


客户有大有小,大的也有几百人使用。

#13


还是没有一个比较明显的答案,我的系统与"友商网youshang.com" SAAS模式一样。

#1


最好是一个客户一个库
为了维护方便又不影响性能,可以所有客户在一个库,大的表采用分区表

#2


怎样设计多客户使用的数据库?

引用 1 楼 sz_haitao 的回复:
最好是一个客户一个库
为了维护方便又不影响性能,可以所有客户在一个库,大的表采用分区表

#3


如果客户数量很多,可以放在一个库,但是权限控制及事务控制要管理得很好才性。如果数量不多,分开库可以减少很多编程复杂度。安全性也相对高一点。

1、人事管理 2、日程管理 3、文档管理 4、消息管理 5、系统管理 6、考勤管理
这些分模块就可以了。

2.由于用户体验要求比较高,大家有没有好的控件推荐,风格统一,比如Grid支持排序,(尝试过EXT.net,但发现加裁速度比较慢)。
这个要综合优化,既要优化SQLServer,也要优化前端编程,比如不要返回大量数据。
3.安全性,由于是在线平台,必须保证客户资料不会盗取,有哪些具体措施。
这部分要从网络、防火墙、Windows、SQLServer每个层面逐步强化,安全性可以参考:
http://download.csdn.net/detail/dba_huangzj/5395925


#4


关于安全性
1:可参看防止sql注入。http://wenku.baidu.com/view/97b0a200b52acfc789ebc972.html
2:你的客户资料机密信息要进行加密

#5


客户会很多,以前每个客户10G的数据库,如果接入50个客户,那就是500G的SQL数据库。
1. 做成一个数据库的话,一个表中存了不同客户的数据,查询慢,并发高。比如[文档表],有的客户有几十条记录,如果多个客户放在一个表中,这个表可能达上千条记录。

2.为每个客户建一个数据库的话,50个客户就是50个库,升级的时候,加个字段,建个表或存储过程得跑50遍? 另外有的客户注册了基本上没怎么用,如果一注册就建立一个库,那很浪费资源。

从性能考虑或编程复杂度考虑,我个人也倾向于第二种方式。

有没有人实践过的?

#6


还有 200分在另一个贴子,http://bbs.csdn.net/topics/390464173
要分析利弊,分只给最佳方案。

#7


每个客户建立一个独立数据库管理,然后,建立对应的云维护平台包括账号开设,续费,关闭账号,系统升级。。。这样升级就不会麻烦了。。。
如果所有客户在一个数据库会存在严重的性能问题的。。,。

#8


该回复于2013-05-22 14:03:29被管理员删除

#9


说一下个人感觉:
之前在的公司系统改的比较乱,所以对这种有一定感触。

如果客户经常改动比较大,还是分开比较好。
举个例子:
如果有表1和表2为主从表,突然,有一个客户,说是要在中间再加一个表3。也就是改成表1和表3是主从表,表3和表2是主从表。
如果主从表之间的关系是用代码来维护的,那还好,如果是用的数据库中的主外键来维护的,那表结构就有可能会乱掉了。

当然,如果客户很少有大的改动,放在一起也可以。

#10


不建议分库,
500GB大小的数据库只是中等数据库的大小,完全没有必要分库,
你需要考虑详细一点,做好数据库底层的架构,应付500G的数据库是没有问题的。

#11


.不同用户还是分库感觉要安全的多

#12


客户有大有小,大的也有几百人使用。

#13


还是没有一个比较明显的答案,我的系统与"友商网youshang.com" SAAS模式一样。