Chinaunix

标题: 分库分表后的统计问题求解 [打印本页]

作者: syzxlyx    时间: 2013-01-18 21:10
标题: 分库分表后的统计问题求解
本帖最后由 syzxlyx 于 2013-01-19 13:38 编辑

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

大家是如何完成这类问题的?网上看到一些说法是在程序里边实现join,这种方法具有一定的实用性,在分库分表的情况下可能也是很好的实现方法,但没看到过具体是如何实现的,一直云里雾里的,希望大家能提供些具体思路!
作者: kimnin    时间: 2013-01-18 21:10
当如果你是由于业务上的需要分拆数据库的时候,那么就要考虑到分拆后劲量让每个分拆表的分拆ID在where里是等值JOIN,那么可以使得同一项JOIN在同一张表中就可以完成计算。然后将数据汇集起来就行。这样无论是分库还是分表的时候不会影响应用业务逻辑的修改。(解决设计上问题)

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

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

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

当然希望简单,使用编程式的方式来实现跨库的JOIN的时候,TAOBAO有TDDL会适合你。
作者: syzxlyx    时间: 2013-01-19 13:38
加分了!!
走过路过,留下你的思路
作者: syzxlyx    时间: 2013-01-19 14:04
kimnin 发表于 2013-01-19 13:51
当如果你是由于业务上的需要分拆数据库的时候,那么就要考虑到分拆后劲量让每个分拆表的分拆ID在where里是等 ...


我觉得淘宝tddl主要解决的问题是分库分表后,访问数据库的路由问题。从计算统计角度来说,可能不是很有用,或许我了解的不够。
作者: kimnin    时间: 2013-01-19 16:25
回复 4# syzxlyx


    TDDL实现了跨库的JOIN,不过是在程序里实现的。
作者: syzxlyx    时间: 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()方法设置参数。
作者: kimnin    时间: 2013-01-24 17:44
回复 6# syzxlyx


    cobar 是另一套分库分表的中间件
作者: chinafenghao    时间: 2013-01-28 09:19
@syzxlyx
如果你是vertical split,那么业务和程序需要解耦,不同DB之间通过程序走接口。
如果你是horizontal split,那么就需要类似cobar之类的一些中间件来实现一些中间的算法,你是统计类型的,不需要事物可以考虑amoeba,限制少一点。
作者: icer_repls    时间: 2013-01-29 19:05
对mysql做了这种sharing之后,跨节点的join一直就是个很麻烦的事情。 我所知道的都是在中间层完成的,中间层对应用时透明的, 它只要发出SQL语句就行了
作者: icer_repls    时间: 2013-01-29 19:06
chinafenghao 发表于 2013-01-28 09:19
@syzxlyx
如果你是vertical split,那么业务和程序需要解耦,不同DB之间通过程序走接口。
如果你是horizont ...


你有amoeba的线上使用经验吗? 据我了解这个proxy已经几年没更新了。
作者: chinafenghao    时间: 2013-01-31 10:58
@icer_repls
amoeba不支持事物,你们业务允许么?
作者: icer_repls    时间: 2013-01-31 17:24
chinafenghao 发表于 2013-01-31 10:58
@icer_repls
amoeba不支持事物,你们业务允许么?


我们没用啊,看到有人在用才问问,呵呵




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2