一 、 基本思想 Sharding 的基本思想就要把一个数据库切分成多个部分放到不同的数据库(server)上,从而缓解单一数据库的性能问题
对于海量数据的数据库,如果是因为表多而数据多,这时候适合使用垂直切分,即把关系紧密(比如同一模块)的表切分出来放在一个服务器上
如果表并不多,但每张表的数据非常多,这时候适合水平切分,即把表的数据按某种规则(比如按 ID 散列)切分到多个数据库(server)上
根据实际情况做出选择,也可能会综合使用垂直与水平切分
1、 垂直切分 数据的垂直切分,也可以称之为纵向切分
将数据库想象成为由很多个一大块一大块的“数据块”(表)组成,我们垂直的将这些数据块切开,然后将他们分散到多台数据库主机上面,这样的切分方法就是一个垂直(纵向)的数据切分
系统功能可以基本分为以下四个功能模块:用户、群组消息、相册以及事件,分别对应为如下这些表: 1
用 户 模 块 表 user 、 user_profile 、 user_group 、user_photo_album 2
群组讨论表 groups、group_message 、group_message_content 、top_message 3
相册相关表 photo、photo_album、photo_album_relation、photo_comment 4
事 件 信 息 表 event 模 块 之 间 的 关 系 : 1
群 组 讨 论 模 块 和 用 户 模 块 之 间 主 要 存 在 通 过 用 户 或 者 是 群 组 关 系 来 进 行关 联
一般关 联 的 时候都会是 通 过 用 户 id 或 者 nick_name 以及 group的 id 来 进 行 关 联 ,,通 过 模 块 之 间 的 接口实现不会带来 太多麻烦
相册模 块 仅仅与用 户 模 块 存