首页新闻找找看学习计划

分布式架构这样设计如何?

0
悬赏园豆:100 [已解决问题] 解决于 2015-02-04 19:46

把每个表都作为一个数据库连接字符串,所谓的分布式表,来设计。如何?

问题补充:

比如商品关联表、用户关联表、订单关联表,分成三个数据库。这样也是无法join的。那如何去设计呢,难道用web api ,wcf这样去写接口吗?

LeeHavin_cnblog的主页 LeeHavin_cnblog | 初学一级 | 园豆:20
提问于:2015-02-02 20:49
< >
分享
最佳答案
0

非常不推荐这种做法.

首先,如果是按业务纵向拆分的话,也是将业务相关的表放在一个单独的库,而不是一个表一个字符串...你这样是没有办法 join查询的.

 

另外,如果这个系统需要用到大量分布式DB的话,不要用关系型DB,很不方便扩展,建议用NoSQL.非常适合海量数据分布式处理的.

收获园豆:25
hexllo | 菜鸟二级 |园豆:405 | 2015-02-03 10:26

如果能join的话呢? 比如商品表放在一个数据库,那用户关联商品,这个如何处理呢?

LeeHavin_cnblog | 园豆:20 (初学一级) | 2015-02-03 11:37

@LeeHavin_cnblog: 就你提到的这个得分三个业务模块,分别对应三个业务库.

用户库

订单库

产品库

用户登录后,能获取到当前的用户ID,用此ID去订单表找对应的商品ID,再用商品ID去找商品,要查三次才能查到.

但是,分库之后,是没法做到join查询的. select * from A join B ON A.ID=B.PID这种是查不到数据的.

如果你又要分库,又要join,那么只好将关键业务的表全放一个库里,如订单表,用户表,商品表.

然后将一些次要的业务表放另一库,如商品评论表,交易记录表等...

hexllo | 园豆:405 (菜鸟二级) | 2015-02-03 11:46

@hexllo: 若按照分库的话,那只能写WCF、webapi、webservice来取数据吗?群求其他的办法。

LeeHavin_cnblog | 园豆:20 (初学一级) | 2015-02-03 11:52

@LeeHavin_cnblog: 除了用webAPI来取,目前没想到更好的方法.

你的服务器在同一机房,用api来取也很快的,如果分布在全国各地,可以让这些服务器走VPN.

hexllo | 园豆:405 (菜鸟二级) | 2015-02-03 11:54

@hexllo: 能留下联系方式交流下吗?企鹅。

LeeHavin_cnblog | 园豆:20 (初学一级) | 2015-02-03 11:56

@LeeHavin_cnblog: 553030761

hexllo | 园豆:405 (菜鸟二级) | 2015-02-03 11:58
其他回答(3)
0

数据库一般有两种切法,纵向切和横向切。纵向是按业务切,横向是切单表,你这种切法类似于纵向切,注意业务分开,可以一试。

收获园豆:25
上帝之城 | 园豆:2452 (老鸟四级) | 2015-02-02 22:28
0

你是要做分布式,还是表拆分哦?把每个表都作为一个连接字符串的做法,比较不合理哇,是有点像纵向拆分。

收获园豆:25
幻天芒 | 园豆:36594 (高人七级) | 2015-02-03 09:09

比如商品关联表、用户关联表、订单关联表,分成三个数据库。这样也是无法join的。那如何去设计呢,难道用web api ,wcf这样去写接口吗?

支持(0) 反对(0) LeeHavin_cnblog | 园豆:20 (初学一级) | 2015-02-03 11:42

@LeeHavin_cnblog: 这三个表为什么要拆分呢?看你的需求,直接按一定的规则(区域,时间等),分库即可。

支持(0) 反对(0) 幻天芒 | 园豆:36594 (高人七级) | 2015-02-03 11:57

@幻天芒: 不好意思,是用户系列表,商品系列的表。能在举个详细的例子吗?

支持(0) 反对(0) LeeHavin_cnblog | 园豆:20 (初学一级) | 2015-02-03 11:59

@LeeHavin_cnblog: 一个地区一个库,这样每个库中表的数据就少了。

支持(0) 反对(0) 幻天芒 | 园豆:36594 (高人七级) | 2015-02-03 12:15
0

如果想通过RDBMS实现分布式数据库效果,按照业务纵向分库还算简单,如果横向分表,给每个拆分的表配置一个独立数据库连接串是可以的,而且这种数据库连接串通常还有一定的命名规律。

收获园豆:25
JeffWong | 园豆:2021 (老鸟四级) | 2015-02-03 10:52

EF中是否可以实现呢?当然我也没这么试过,只是一个构思。把每个表都用数据库字符串连接,这个也有弊端,但是总是感觉这么异样。

支持(0) 反对(0) LeeHavin_cnblog | 园豆:20 (初学一级) | 2015-02-03 11:40
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册