分库分表产生的问题,及注意事项

简介:

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相关的东西可以正常使用。也就是说避免数据库中的数据依赖另一数据库中的数据。






本文转自 位鹏飞 51CTO博客,原文链接:http://blog.51cto.com/weipengfei/1333870,如需转载请自行联系原作者

目录
相关文章
|
SQL 数据库
SQL使用视图的优缺点
SQL使用视图的优缺点
166 0
|
存储 关系型数据库 MySQL
【MYSQL】金额(金钱)相关的数据存储类型
int 对于游戏币等代币,一般存储为int类型是可行的。 问题在于越界,int类型长度为11位。 在存储人民币相关的金额的时候,则只能存储到9长度的人民币,也就是说,最大只能存储999999999,不到10亿的数值,如果业务增长很快的话,就会给自己留下隐患。
5107 0
|
编解码 开发工具 C#
[大牛直播SDK]Windows平台RTMP直播推送模块功能设计
大牛直播SDK采用全自研框架,具备高度可扩展性与自适应算法,显著降低延迟并提高采集编码效率。SDK以模块化设计,支持RTMP推流及多种音视频编码格式(如AAC、SPEEX、H.264、H.265),并能与播放器SDK组合实现丰富功能,包括流媒体转发、内置RTSP服务等。提供了详尽的参数配置选项,支持多摄像头、屏幕采集与水印叠加,并兼容Windows 7及以上操作系统。该SDK以C++/C#双接口形式提供,集成简便,同时包含调试与发布版本库,便于开发者快速上手。此外,支持断网重连、实时预览及多种编码前后的数据对接需求。
335 0
|
JSON 小程序 搜索推荐
微信小程序如何自定义tabbar
微信小程序如何自定义tabbar
355 3
|
SQL 数据库
MyBatisPlus之逻辑删除、MyBatisPlus解决并发问题的乐观锁机制
MyBatisPlus之逻辑删除、MyBatisPlus解决并发问题的乐观锁机制
393 2
|
编解码 缓存 UED
【Uniapp 专栏】Uniapp 开发实战:打造高效页面布局技巧
【5月更文挑战第12天】在 Uniapp 开发中,高效页面布局关乎用户体验和应用性能。关键技巧包括:规划清晰的页面结构,利用 Flex 布局组件,精确控制元素尺寸和位置,实现响应式设计,保持布局简洁,优化加载性能,恰当运用色彩和字体,添加交互性动画,以及组织良好代码结构。通过不断学习和实践,开发者能创建出美观且高性能的页面,提升应用的整体质量。
613 5
|
IDE Java Maven
IDEA 一键生成 Maven 依赖关系图,太强大了。。
IDEA 一键生成 Maven 依赖关系图,太强大了。。
847 0
IDEA 一键生成 Maven 依赖关系图,太强大了。。
|
网络协议 JavaScript 前端开发
WebSocket介绍及部署
WebSocket介绍及部署
447 0
|
消息中间件 前端开发 Java
Springboot+WebSocket 实现IM及时通讯
项目中碰到需要及时通讯的场景,使用springboot集成websocket,即可实现简单的及时通讯。本文介绍springboot如何集成websocket、IM及时通讯需要哪些模块、开发和部署过程中遇到的问题、以及实现小型IM及时通讯的代码。
|
开发框架 Java Spring
Service有多个实现类,它怎么知道该注入哪个ServiceImpl类?
@Service注解,其实做了两件事情: @Autowired注解的意思就是: @Autowired和@Resource两个注解的区别:
下一篇
开通oss服务