一 、 基本思想 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 来 进 行 关 联 ,,通 过 模 块 之 间 的 接口实现不会带来 太多麻烦。 2. 相册模 块 仅仅与用 户 模 块 存 在 通 过 用 户 的 关 联 。这两个模 块 之 间 的 关 联基本就有通 过 用 户 id 关 联 的 内容,简单清晰,接口明确。 3. 事 件 模 块 与各个模 块 可能都有关 联 ,但是 都只关 注其各个模 块 中对象的信 息 ID,同样可以做到很容易分拆。 所以,我们第一步可以将数据库按照功能模 块 相关 的 表 进 行 一次垂直拆分,每个模 块 涉及的 表 单独到一个数据库中,模 块 与模 块 之 间 的 表 关 联 都在 应用 系统端通 过 接口来 处理。 如下图所示: 通 过 这 样 的 垂 直 切 分 之 后 , 之 前 只 能 通 过 一 个 数 据 库 来 提 供 的 服 务...