1.   分库分表维度的问题

假如用户评论了某个视频,需要将评论记录保存取来,如果按照用户的纬度分表,则每个用户的评论记录都保存在同一表中,所以很快很方便的查找到某用户的评论情况,但是某视频被评论的情况则很有可能分布在多张表中,查找起来比较麻烦。反之,按照视频ID维度分表,可以很方便的查找到此视频的评论情况,但要查找到某人的评论记录比较麻烦。

所以常见的解决方式有:

    a.通过扫表的方式解决,此方法基本不可能,效率太低了。

    b.记录两份数据,一份按照用户纬度分表,一份按照视频ID维度分表。

    c.通过搜索引擎解决,但如果实时性要求很高,又得关系到实时搜索。

    我们采用的是记录双份:有一个userId--belongId-commentId三个int类型的表。这个基于userId取模。而Comment基于belongId(通常是videoId)取模

2.   联合查询的问题

联合查询基本不可能,因为关联的表有可能不在同一数据库中。

3.   避免跨库事务

避免在一个事务中修改db0中的表的时候同时修改db1中的表,一个是操作起来更复杂,效率也会有一定影响。

4.   尽量把同一组数据放到同一DB服务器上

     例如网站评论,视频评论uid 取摸和comment取摸一致的数据库放在一起,这样,用户的评论和某些视频的评论都放在一起;

例如将卖家a的商品和交易信息都放到db0中,当db1挂了的时候,卖家a相关的东西可以正常使用。也就是说避免数据库中的数据依赖另一数据库中的数据。