浏览 8643 次
锁定老帖子 主题:『讨论』大型网站架构问题
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2005-05-17
数据库分割的问题,有没有人给提点建议? 目前要设计一个非常大的网站,对应很多地区频道,想每个地区使用一个单独的数据库,但是用户注册要使用一个单独的数据库,即不管在哪个地区的用户,都注册到同一个表中 比如,有地区数据库A,B,...Z等很多个。还有一个主数据库,负责管理用户的注册信息,账户等 如果某个用户在地区数据库A中发布了一条信息(比如一个论坛),在网页上要显示出用户信息(倪称,等级等),如果在同一个数据库中,可以通过join查询出来,不在一个数据库中,有什么好的办法呢? 我认为使用数字userId作为主健,比用字符串好,因为在存储和查询事都要快,但是,问题是:查询另外一个数据库中用户发布的信息时,如何根据Id获得相应的用户名称(总不能吧一个数字显示给用户吧?) 谁遇到过类似问题,欢迎来讨论,谢谢! 配置文件: 无 错误提示信息: 无 你的分析: 我考虑过吧用户信息动态生成一个图片,或者类似艘房论坛那样下面用一个IFrame取回几个来,都觉得不是很优雅 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2005-05-17
用mysql就可以,如果多台机器采用同步复制user等global表,这样可以线形扩展
我刚搞的donew游戏工会就是这么架构,每个公会一个数据库 |
|
返回顶楼 | |
发表时间:2005-05-18
我没有做过mysql的同步复制,不过觉得按理来说,mysql应该考虑上述问题吧
我现在的做法没有使用主数据库与地区数据库同步复制共享表,因为我觉得如果地区数据库如果多几个,同布复制开销会很昂贵 我把各个数据库完全物理的分离,毫不干系,需要时使用分布试事务处理,这样大多情况是好的,唯有主数据库和地区数据库需要联接查询时,觉得很棘手 |
|
返回顶楼 | |
发表时间:2005-05-18
chy_hs 写道 我没有做过mysql的同步复制,不过觉得按理来说,mysql应该考虑上述问题吧
我现在的做法没有使用主数据库与地区数据库同步复制共享表,因为我觉得如果地区数据库如果多几个,同布复制开销会很昂贵 我把各个数据库完全物理的分离,毫不干系,需要时使用分布试事务处理,这样大多情况是好的,唯有主数据库和地区数据库需要联接查询时,觉得很棘手 如果只是个用户表是共享的,每天你能有多少用户注册? 1万个,那数据量才多少? 联合查询的时候可以这么搞: select a.*,u.name username from database_a.a,database_global.usertable u |
|
返回顶楼 | |
发表时间:2005-05-18
xurwxj 写道 那你如何解决用户冲突问题?即解决用户名可能重复问题,用UUID类似的东西? global内的表,只有主服务器是可以写的,地区服务器都是同步过来的. 有这么多服务器,总要有个地方做单点注册和验证吧,把他也和主服务器放一起 |
|
返回顶楼 | |
发表时间:2005-05-18
谢谢wangzy兄
你说的有道理,我得重新考虑是不是更改我的设计 对于把数据库名字写到sql中,实现联接查询的做法,我知道有这种方法,但是,被联接的2个数据库是物理的分布在2台机器上的,我对其效率没有信心,不知道有没有人做过这种联接查询的性能测试 我现在的做法是,指定web服务器用来生成用户信息,成为静态内容,在每个页面里面加入<script scr="..." />,根据用户的id来获得用户的名称等信息 在生成的js中加入http 过期标志,web服务器压力应该不回很大 请指点,谢谢 对了,不知道腾讯QQ它的数据库是怎么设计的,真想学习一下 |
|
返回顶楼 | |
发表时间:2005-05-18
chy_hs 写道 谢谢wangzy兄
你说的有道理,我得重新考虑是不是更改我的设计 对于把数据库名字写到sql中,实现联接查询的做法,我知道有这种方法,但是,被联接的2个数据库是物理的分布在2台机器上的,我对其效率没有信心,不知道有没有人做过这种联接查询的性能测试 我现在的做法是,指定web服务器用来生成用户信息,成为静态内容,在每个页面里面加入<script scr="..." />,根据用户的id来获得用户的名称等信息 在生成的js中加入http 过期标志,web服务器压力应该不回很大 请指点,谢谢 对了,不知道腾讯QQ它的数据库是怎么设计的,真想学习一下 不会存在在2个机器上进行连接查询的阿,因为用户信息已经同步过来了,所以都是在本地。mysql同步速度还不错,当然你不能把大量的数据都同步。在插入记录的时候,出一个页面告诉用户说已经注册成功了,这个时间足够mysql同步n次了。 另外还有种方式,在a新增记录的时候,直接把用户最基本信息作为字段插入,当然此种情况下,你要保证这些记录是不会被改变的。我们系统也有这种方式,就是为了减少多表连接查询,毕竟我这里的用户名昵称什么的都是唯一的而且不能更改。 |
|
返回顶楼 | |
发表时间:2005-05-18
是的,如果采用共享表同步复制就不需要考虑2个数据库的连接查询的问题了
我的意思是我目前的设计中,不采用同步复制,才考虑2数据库联接查询 我也考虑过直接用昵称作为主键,不过觉得效率会差一些,因为比较字符串要比比较整形慢很多 我现在每个用户有一个系统生成的长整形做为主健,一个不可改变的唯一的字串作为登陆名,还有一个用来显示的昵称(可以重名) |
|
返回顶楼 | |
发表时间:2005-05-19
这种复杂的分布式应用可以考虑使用SSO技术.
|
|
返回顶楼 | |
发表时间:2005-05-19
SSO肯定是要的,不过这儿说的与SSO没什么关系吧
|
|
返回顶楼 | |