免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 17812 | 回复: 11

分库分表后的统计问题求解 [复制链接]

论坛徽章:
1
戌狗
日期:2013-10-24 17:31:55
发表于 2013-01-18 21:10 |显示全部楼层
20可用积分
本帖最后由 syzxlyx 于 2013-01-19 13:38 编辑

数据库压力增加后,自然而然会进行垂直拆分和水平拆分。但拆分后的join类sql如何处理?比如垂直拆分成用户库、计费库等。如果要统计哪类用户的充值多,这个问题就涉及跨机器跨表统计。
虽然在mysql层面提供了federated表,但效率好像不高;采用临时表的办法,有些维护成本,效率可能也不是很好。

大家是如何完成这类问题的?网上看到一些说法是在程序里边实现join,这种方法具有一定的实用性,在分库分表的情况下可能也是很好的实现方法,但没看到过具体是如何实现的,一直云里雾里的,希望大家能提供些具体思路!

最佳答案

查看完整内容

当如果你是由于业务上的需要分拆数据库的时候,那么就要考虑到分拆后劲量让每个分拆表的分拆ID在where里是等值JOIN,那么可以使得同一项JOIN在同一张表中就可以完成计算。然后将数据汇集起来就行。这样无论是分库还是分表的时候不会影响应用业务逻辑的修改。(解决设计上问题)楼主应该有两种数据计算方式,OLAP,OLTP,一种在线的一种离线的,如果是需要统计报表的话,还是需要OLAP离线处理的,可使用RDBMS或Hive等解决方案。当然 ...

论坛徽章:
0
发表于 2013-01-18 21:10 |显示全部楼层
当如果你是由于业务上的需要分拆数据库的时候,那么就要考虑到分拆后劲量让每个分拆表的分拆ID在where里是等值JOIN,那么可以使得同一项JOIN在同一张表中就可以完成计算。然后将数据汇集起来就行。这样无论是分库还是分表的时候不会影响应用业务逻辑的修改。(解决设计上问题)

楼主应该有两种数据计算方式,OLAP,OLTP,一种在线的一种离线的,如果是需要统计报表的话,还是需要OLAP离线处理的,可使用RDBMS或Hive等解决方案。当然这种是非实时的。使用ETL工具抽取的。

如果楼主需要实时性比较高的分析统计的结果的话,可使用类似于物化视图之类的解决方案,当然如果是mysql的话,可使用程序来统计并实时更新来实现mysql的物化视图。

如果又要实时性比较高,数据量又特别大的时候,推荐使用storm 等流式计算框架来实现维表产出。

当然希望简单,使用编程式的方式来实现跨库的JOIN的时候,TAOBAO有TDDL会适合你。

论坛徽章:
1
戌狗
日期:2013-10-24 17:31:55
发表于 2013-01-19 13:38 |显示全部楼层
加分了!!
走过路过,留下你的思路

论坛徽章:
1
戌狗
日期:2013-10-24 17:31:55
发表于 2013-01-19 14:04 |显示全部楼层
kimnin 发表于 2013-01-19 13:51
当如果你是由于业务上的需要分拆数据库的时候,那么就要考虑到分拆后劲量让每个分拆表的分拆ID在where里是等 ...


我觉得淘宝tddl主要解决的问题是分库分表后,访问数据库的路由问题。从计算统计角度来说,可能不是很有用,或许我了解的不够。

论坛徽章:
0
发表于 2013-01-19 16:25 |显示全部楼层
回复 4# syzxlyx


    TDDL实现了跨库的JOIN,不过是在程序里实现的。

论坛徽章:
1
戌狗
日期:2013-10-24 17:31:55
发表于 2013-01-21 14:15 |显示全部楼层
kimnin 发表于 2013-01-19 16:25
回复 4# syzxlyx


阿里Cobar技术文档中说的:
1.产品约束
不支持跨库情况下的join、分页、排序、子查询操作。
SET语句执行会被忽略,事务和字符集设置除外。
分库情况下,insert语句必须包含拆分字段列名。
分库情况下,update语句不能更新拆分字段的值。
不支持SAVEPOINT操作。
暂时只支持MySQL数据节点。
使用JDBC时,不支持rewriteBatchedStatements=true参数设置(默认为false)。
使用JDBC时,不支持useServerPrepStmts=true参数设置(默认为false)。
使用JDBC时,BLOB, BINARY, VARBINARY字段不能使用setBlob()或setBinaryStream()方法设置参数。

论坛徽章:
0
发表于 2013-01-24 17:44 |显示全部楼层
回复 6# syzxlyx


    cobar 是另一套分库分表的中间件

论坛徽章:
8
CU大牛徽章
日期:2013-09-18 15:20:48CU大牛徽章
日期:2013-09-18 15:20:58CU大牛徽章
日期:2013-09-18 15:21:06CU大牛徽章
日期:2013-09-18 15:21:12CU大牛徽章
日期:2013-09-18 15:21:17天秤座
日期:2013-10-30 14:01:03摩羯座
日期:2013-11-29 18:02:31luobin
日期:2016-06-17 17:46:36
发表于 2013-01-28 09:19 |显示全部楼层
@syzxlyx
如果你是vertical split,那么业务和程序需要解耦,不同DB之间通过程序走接口。
如果你是horizontal split,那么就需要类似cobar之类的一些中间件来实现一些中间的算法,你是统计类型的,不需要事物可以考虑amoeba,限制少一点。

论坛徽章:
0
发表于 2013-01-29 19:05 |显示全部楼层
对mysql做了这种sharing之后,跨节点的join一直就是个很麻烦的事情。 我所知道的都是在中间层完成的,中间层对应用时透明的, 它只要发出SQL语句就行了

论坛徽章:
0
发表于 2013-01-29 19:06 |显示全部楼层
chinafenghao 发表于 2013-01-28 09:19
@syzxlyx
如果你是vertical split,那么业务和程序需要解耦,不同DB之间通过程序走接口。
如果你是horizont ...


你有amoeba的线上使用经验吗? 据我了解这个proxy已经几年没更新了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP