论坛首页 Java企业应用论坛

Spring + iBatis 的多库横向切分简易解决思路

浏览 26869 次
精华帖 (0) :: 良好帖 (12) :: 新手帖 (2) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-10-12  
liuye 写道
linliangyi2007 写道
gh_aiyz 写道
SNS的话,NoSQL才是王道,上面提到Mongo的兄弟说得很好。基于数据库太麻烦了。


针对SNS的一些特性功能,如:新鲜事,通知等,我们使用cassandra来解决的,但是数据库在存储用户信息方面还是有相对的优势的。

一个SNS系统,肯定不是单一K-V数据库,或者单一的RDB能搞定的,本文仅对多数据库应用方面提供一个入门思路。

大家有好想法的,都说出来讨论一下



sns还是用nosql,是王道,试试mongodb吧,查询功能挺强大的


我们使用cassandra啊,几大SNS运营商都在使用啊
0 请登录后投票
   发表时间:2010-10-12  
确实应该考虑日后数据迁移的问题,如果按hash算法切分用户,需要保证切分的稳定性,不能出现日后增加数据库节点的时候造成用户分配的不一致。
和前面一个兄弟说的类似,给数据库编号,然后建立用户-数据库映射表,应该比较灵活,只是会牺牲一点性能,多访问一次数据库。
0 请登录后投票
   发表时间:2010-10-12  
coffeesweet 写道
确实应该考虑日后数据迁移的问题,如果按hash算法切分用户,需要保证切分的稳定性,不能出现日后增加数据库节点的时候造成用户分配的不一致。
和前面一个兄弟说的类似,给数据库编号,然后建立用户-数据库映射表,应该比较灵活,只是会牺牲一点性能,多访问一次数据库。


从设计的角度上看,我绝对赞同楼上两位的观点。

但从工程实现的角度看,我们一个库是500万用户上限,16个库是8000万用户,如果我们的系统真能达到5000万的常规用户时,我想系统是需要重新设计了。因此,目前的设计是根据现实目标考虑的。

0 请登录后投票
   发表时间:2010-10-12  
动不动横切,切坏了怎么办?
0 请登录后投票
   发表时间:2010-10-12  
很有意思,显然很多人都有这样的需求。
用数据库仍然是最成熟,最稳妥,可维护性,扩展性最好的方案。
有兴趣听听楼主对cassandra的使用经验
0 请登录后投票
   发表时间:2010-10-12  
不错的文章,哈哈,还是楼上那位说得好,别切坏了,哈
0 请登录后投票
   发表时间:2010-10-12   最后修改:2010-10-12
其实我感兴趣的是你的UserID的hash生成算法是怎么样的.如何最大可能的保证用户的均匀分布情况.
这个问题以前看过一篇很好的文章,可惜啊,忘了... ...
0 请登录后投票
   发表时间:2010-10-12  
楼主的拆库的思路不错,同时也可以使用在用户少的时候节约服务器,不过500W的用户量系统是否能够承受,当用户量大的时候怎么再次拆分呢?

还有,使用nosql的朋友能否简单说说是怎么设计的呢?
0 请登录后投票
   发表时间:2010-10-13  
unas 写道
楼主的拆库的思路不错,同时也可以使用在用户少的时候节约服务器,不过500W的用户量系统是否能够承受,当用户量大的时候怎么再次拆分呢?

还有,使用nosql的朋友能否简单说说是怎么设计的呢?


目前我们是考虑了4000万用户量,并做了1倍的冗余设计,也就是16台8000万的总量。

实验中500万数据对mysql而言,性能还是可以接受的
0 请登录后投票
   发表时间:2010-10-13  
JE帐号 写道
其实我感兴趣的是你的UserID的hash生成算法是怎么样的.如何最大可能的保证用户的均匀分布情况.
这个问题以前看过一篇很好的文章,可惜啊,忘了... ...


userid对数据库的映射,通常是先取hashcode,这个算法就比较灵活了,目前我们使用java自带的hashcode算法,没有特别设计。然后就是对数据库总数取模,把hashcode隐射到数据库中。

这部分的算法不需要太复杂,关键是每次计算的一致性,不要造成找不到用户信息就好
0 请登录后投票
论坛首页 Java企业应用版

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