关于租用模式的架构及数据库设计讨论

ksy 2010-06-08 11:11:16
加精
像XTOOLS、友商网、伟库网等这种租用模式的在线软件,能支持多客户、多业态并允许不同客户存在部分差异,单台服务器能容纳大量客户,在用户量大时也可以方便的通过增加服务器横向扩展。
1.采用何种数据库?
2.数据库如何设计,按客户划分还是按业务划分,多客户同一数据库还是每个客户一个数据库?
3.如果多客户共享同一数据库,如何有效隔离客户数据,避免超越边界访问其它客户数据?
4.如果多客户共享同一数据库,如何实现按客户数据备份、还原、分离?
5.采用何种WEB开发框架?
6.采用何种策略保证不影响系统稳定的情况下满足客制化?
在此抛砖引玉,欢迎讨论。
...全文
1768 75 打赏 收藏 转发到动态 举报
写回复
用AI写文章
75 条回复
切换为时间正序
请发表友善的回复…
发表回复
ksy 2010-07-12
  • 打赏
  • 举报
回复
[Quote=引用 74 楼 sjt000 的回复:]

我开发过一款SaaS的产品,是仿salesforce.com的CRM,简化版本,
关于实现,MS有一个小示例程序Crab,你可以参考下其中的一些实现。
这个一时半会说不清楚,我们20个人的团队做了两年
[/Quote]
开发过程中一定遇到不少问题吧,有空和大家分享一下。
sjt000 2010-07-08
  • 打赏
  • 举报
回复
我开发过一款SaaS的产品,是仿salesforce.com的CRM,简化版本,
关于实现,MS有一个小示例程序Crab,你可以参考下其中的一些实现。
这个一时半会说不清楚,我们20个人的团队做了两年
ksy 2010-07-07
  • 打赏
  • 举报
回复
期待更多参与。
devillicheng 2010-07-01
  • 打赏
  • 举报
回复
关注中。。。
dongdeaiziji 2010-06-30
  • 打赏
  • 举报
回复
学习,谢谢,对我有些帮助
ksy 2010-06-28
  • 打赏
  • 举报
回复
客制化就是允许适当的客户定制。
xinyu207 2010-06-25
  • 打赏
  • 举报
回复
xinyu207的胡言乱语:

1.采用何种数据库?
数据库产品本身不是问题,现在主流数据库都可以,有预算oralce 没预算mysql 逻辑设计上JiuchunYoung给出了很好的答案

2.数据库如何设计,按客户划分还是按业务划分,多客户同一数据库还是每个客户一个数据库?
zzxap说的不错 表分区 (参考Myspace的架构升级之路 http://tieba.baidu.com/f?kz=184775532)

3.如果多客户共享同一数据库,如何有效隔离客户数据,避免超越边界访问其它客户数据?
Schema
4.如果多客户共享同一数据库,如何实现按客户数据备份、还原、分离?
需要自己开发了
5.采用何种WEB开发框架?
下面是道听途说的..
选择前端负载服务器(nginx) 独立的静态资源服务器(lighttpd 处理js,img,html) 引入缓存服务器减少网络消耗(Memcache)应用服务器使用Apache 开发语言Php python


6.采用何种策略保证不影响系统稳定的情况下满足客制化?
客制化?

ksy 2010-06-23
  • 打赏
  • 举报
回复
欢迎继续讨论...
ksy 2010-06-18
  • 打赏
  • 举报
回复
[Quote=引用 66 楼 hustsay23 的回复:]

同一个版本的MSSQL在同一个操作系统上可以多实例吗?

我个人觉得一般情况下客户的数据是分开存储好一些,如果都存储在同一张表,通过编码来实现数据呈现,
会涉及到权限问题。另外最主要从安全上考虑,并不能绝对保证编码不出错,而这种错误一旦出了是很严重的!
所以建议一个客户一个数据库,当然缺点就是代码更新维护起来麻烦一点,但是相对来说编个维护更新工具应该不难

至于多个客户数据的统计问……
[/Quote]
你所指出的权限问题,正是最难解决的客户之间数据隔离问题,因为同库很难保证一个客户操作时发生异常而不影响其它客户,但单台服务器分库很难容纳数以千计的客户。
sai1314520 2010-06-17
  • 打赏
  • 举报
回复
好,实在太好了
yh4748522 2010-06-17
  • 打赏
  • 举报
回复
454545
ksy 2010-06-17
  • 打赏
  • 举报
回复
[Quote=引用 60 楼 fonmy 的回复:]

http://www.blogjava.net/BlueDavy/archive/2009/07/24/288055.html
可以参考一下ebay对于网站架构的设计,很多方面都又典型性
[/Quote]
很多有用的资料,谢谢!
ksy 2010-06-17
  • 打赏
  • 举报
回复
[Quote=引用 53 楼 lhsxsh 的回复:]

楼上的观点觉个觉的不是很好。
baidu 下Shard架构
[/Quote]
不错、Hibernate Shard中提及的水平分区方法值得借鉴。
Freedom5820823 2010-06-17
  • 打赏
  • 举报
回复
不错,学习中!
hustsay23 2010-06-17
  • 打赏
  • 举报
回复
同一个版本的MSSQL在同一个操作系统上可以多实例吗?

我个人觉得一般情况下客户的数据是分开存储好一些,如果都存储在同一张表,通过编码来实现数据呈现,
会涉及到权限问题。另外最主要从安全上考虑,并不能绝对保证编码不出错,而这种错误一旦出了是很严重的!
所以建议一个客户一个数据库,当然缺点就是代码更新维护起来麻烦一点,但是相对来说编个维护更新工具应该不难

至于多个客户数据的统计问题,这个一般可以考虑建一个统计数据库(数据仓库我不懂)
先汇总各个客户数据库数据到这个数据库,再做二次统计,或者直接写复杂SQL实现

[Quote=引用 34 楼 microtry 的回复:]
引用 12 楼 ksy 的回复:
多实例的开销似乎更大。

有时候,只有你实际参与大量客户的DBMS的设计的时候,你才会发现,有些平时想当然的结论其实是恰恰相反的,
比如:在每个单方面上,有特殊要求的用户总是少数,
设计通用的DB的开销远远大于拆分设计,
而增加一个实例的开销是很低的,就连我的笔记本(赛扬1.6G/2G内存)还能顺畅的跑3个实例超过30个数据库,
还有一点,我说的并不……
[/Quote]
skyaspnet 2010-06-16
  • 打赏
  • 举报
回复
学习。。。
fonmy 2010-06-16
  • 打赏
  • 举报
回复
http://www.blogjava.net/BlueDavy/archive/2009/07/24/288055.html
可以参考一下ebay对于网站架构的设计,很多方面都又典型性
whoismickey 2010-06-16
  • 打赏
  • 举报
回复
fdsafda
Miller31ymm 2010-06-15
  • 打赏
  • 举报
回复
不懂 我觉得你说得好像不太对
mochw2008 2010-06-15
  • 打赏
  • 举报
回复
谢谢,很好东西,一直在找呢
加载更多回复(51)

13,190

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 分析与设计
社区管理员
  • 分析与设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧