扩展MyCat中间件支流式查询
云计算去IOE(ibm,orale ,emc)浪潮中目前多采用sharding proxy数据库sharding中间件代理架构,实现对常见开源数据库如MySQL的横向扩展,现有开源组件主要有MyCat,这种share nothing架构相对简单,主要针对写扩展,即OLTP场景,但同时也需要兼顾少量统计查询类,如select x from tb大数据量查询,如百万,千万级别,现有MyCat对此查询是一边读取后端MySQL数据到其内存缓存,一边缓存被客户端读取,如果某些业务场景处理慢读取记录速度较慢,数据会在代理层中间件内存积压,对代理中间件的内存大小要求较高,也容易导致代理中间件内存溢出,即缺乏流式控制机制。
实用价值:如果能实现流式控制查询,即客户端取走一定结果后,代理层中间再拉取后端数据库的数据到自身内存,确保代理中间件的内存缓存不过大,可有效降低对中间件内存大小要求。
整体要求:对开源MyCat扩展(修改)使其支持流式查询,客户端查询的数据量内存超过中间件堆内内存时,不会出现内存溢出,服务不可用的故障。
基于java 语言,推荐1.8jdk小版本不限定, 提供基于MyCat哪个版本扩展信息,确认基于的版本不支持前面描述的流式查询
1.客户端jdbc模拟查询测试程序(见附件JdbcStream,maven项目),主要消耗CPU,内存64M以上
2.改造后的中间件MyCat进程实例: 启动64M内存 (不限定使用堆内还是堆外内存,限定较小为在较低配置下个人电脑下可开发,加快效果显现,考察流式查询,实际生产内存远大于此)
3.MySQL实例1个 (mysql5.7以上小版本不限制) : innodb_buffer_pool_size 设置为128M内存(可取默认值),创建4个schema作为4个分片),磁盘空间预留 5G(保证能存放测试表sbtest1 50w条记录数据)
附件里有客户端测试代码, 要测试数据请联系我
成果要求:需要Mycat修改的源码,设计思路文档及测试文档
MyCat中文官网:http://www.mycat.org.cn/
测试数据:
表结构采用业界标准sysbench性能测试里表结构
CREATE TABLE `sbtest1` (
`id` int(10) unsigned NOT NULL,
`k` int(10) unsigned NOT NULL DEFAULT '0',
`c` char(120) NOT NULL DEFAULT '',
`pad` char(60) NOT NULL DEFAULT '',
KEY `xid` (`id`),
KEY `k_1` (`k`)
)
建的库,表都是UTF-8编码
按id分片Hash按4取模,分布到4个分片
loaddata 导入附件的50w.sql文件,对mycat或dble执行(文件下载见赛题下方)
load data infile 'E:(w.sql' into table sbtest1 fields terminated by '|' lines terminated by ' '(id,k,c,pad);
导入后检查各分片数据分布,mycat为例
/*!mycat: sql=select * from sbtest1*/
select count(1) from sbtest1;