论坛首页 Java企业应用论坛

『讨论』大型网站架构问题

浏览 8643 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2005-05-17  
软件环境:
数据库分割的问题,有没有人给提点建议?

目前要设计一个非常大的网站,对应很多地区频道,想每个地区使用一个单独的数据库,但是用户注册要使用一个单独的数据库,即不管在哪个地区的用户,都注册到同一个表中

比如,有地区数据库A,B,...Z等很多个。还有一个主数据库,负责管理用户的注册信息,账户等

如果某个用户在地区数据库A中发布了一条信息(比如一个论坛),在网页上要显示出用户信息(倪称,等级等),如果在同一个数据库中,可以通过join查询出来,不在一个数据库中,有什么好的办法呢?


我认为使用数字userId作为主健,比用字符串好,因为在存储和查询事都要快,但是,问题是:查询另外一个数据库中用户发布的信息时,如何根据Id获得相应的用户名称(总不能吧一个数字显示给用户吧?)

谁遇到过类似问题,欢迎来讨论,谢谢!

配置文件:

错误提示信息:

你的分析:
我考虑过吧用户信息动态生成一个图片,或者类似艘房论坛那样下面用一个IFrame取回几个来,都觉得不是很优雅
   发表时间:2005-05-17  
用mysql就可以,如果多台机器采用同步复制user等global表,这样可以线形扩展

我刚搞的donew游戏工会就是这么架构,每个公会一个数据库
0 请登录后投票
   发表时间:2005-05-18  
我没有做过mysql的同步复制,不过觉得按理来说,mysql应该考虑上述问题吧

我现在的做法没有使用主数据库与地区数据库同步复制共享表,因为我觉得如果地区数据库如果多几个,同布复制开销会很昂贵

我把各个数据库完全物理的分离,毫不干系,需要时使用分布试事务处理,这样大多情况是好的,唯有主数据库和地区数据库需要联接查询时,觉得很棘手
0 请登录后投票
   发表时间:2005-05-18  
chy_hs 写道
我没有做过mysql的同步复制,不过觉得按理来说,mysql应该考虑上述问题吧

我现在的做法没有使用主数据库与地区数据库同步复制共享表,因为我觉得如果地区数据库如果多几个,同布复制开销会很昂贵

我把各个数据库完全物理的分离,毫不干系,需要时使用分布试事务处理,这样大多情况是好的,唯有主数据库和地区数据库需要联接查询时,觉得很棘手


如果只是个用户表是共享的,每天你能有多少用户注册?
1万个,那数据量才多少?

联合查询的时候可以这么搞:
select a.*,u.name username from database_a.a,database_global.usertable u
0 请登录后投票
   发表时间:2005-05-18  
xurwxj 写道


那你如何解决用户冲突问题?即解决用户名可能重复问题,用UUID类似的东西?


global内的表,只有主服务器是可以写的,地区服务器都是同步过来的.

有这么多服务器,总要有个地方做单点注册和验证吧,把他也和主服务器放一起
0 请登录后投票
   发表时间:2005-05-18  
谢谢wangzy兄
你说的有道理,我得重新考虑是不是更改我的设计



对于把数据库名字写到sql中,实现联接查询的做法,我知道有这种方法,但是,被联接的2个数据库是物理的分布在2台机器上的,我对其效率没有信心,不知道有没有人做过这种联接查询的性能测试

我现在的做法是,指定web服务器用来生成用户信息,成为静态内容,在每个页面里面加入<script scr="..." />,根据用户的id来获得用户的名称等信息
在生成的js中加入http 过期标志,web服务器压力应该不回很大

请指点,谢谢

对了,不知道腾讯QQ它的数据库是怎么设计的,真想学习一下
0 请登录后投票
   发表时间:2005-05-18  
chy_hs 写道
谢谢wangzy兄
你说的有道理,我得重新考虑是不是更改我的设计



对于把数据库名字写到sql中,实现联接查询的做法,我知道有这种方法,但是,被联接的2个数据库是物理的分布在2台机器上的,我对其效率没有信心,不知道有没有人做过这种联接查询的性能测试

我现在的做法是,指定web服务器用来生成用户信息,成为静态内容,在每个页面里面加入<script scr="..." />,根据用户的id来获得用户的名称等信息
在生成的js中加入http 过期标志,web服务器压力应该不回很大

请指点,谢谢

对了,不知道腾讯QQ它的数据库是怎么设计的,真想学习一下


不会存在在2个机器上进行连接查询的阿,因为用户信息已经同步过来了,所以都是在本地。mysql同步速度还不错,当然你不能把大量的数据都同步。在插入记录的时候,出一个页面告诉用户说已经注册成功了,这个时间足够mysql同步n次了。
另外还有种方式,在a新增记录的时候,直接把用户最基本信息作为字段插入,当然此种情况下,你要保证这些记录是不会被改变的。我们系统也有这种方式,就是为了减少多表连接查询,毕竟我这里的用户名昵称什么的都是唯一的而且不能更改。
0 请登录后投票
   发表时间:2005-05-18  
是的,如果采用共享表同步复制就不需要考虑2个数据库的连接查询的问题了

我的意思是我目前的设计中,不采用同步复制,才考虑2数据库联接查询

我也考虑过直接用昵称作为主键,不过觉得效率会差一些,因为比较字符串要比比较整形慢很多

我现在每个用户有一个系统生成的长整形做为主健,一个不可改变的唯一的字串作为登陆名,还有一个用来显示的昵称(可以重名)
0 请登录后投票
   发表时间:2005-05-19  
这种复杂的分布式应用可以考虑使用SSO技术.
0 请登录后投票
   发表时间:2005-05-19  
SSO肯定是要的,不过这儿说的与SSO没什么关系吧
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics