21MyCat - 分片join(catlet人工智能)
人工智能 Join 分片
2023-09-11 14:15:41 时间
解决跨分片的SQL JOIN的问题,远比想象的复杂,而且往往无法实现高效的处理,既然如此,就依靠人工的智力,去编程解决业务系统中特定几个必须跨分片的SQL的JOIN逻辑,MyCAT提供特定的API供程序员调用,这就是MyCAT创新性的思路——人工智能。
以一个跨节点的SQL为例:
Select a.id,a.name,b.title from a,b where a.id=b.id
其中a在分片1,2,3上,b在4,5,6上,需要把数据全部拉到本地(MyCAT服务器),执行JOIN逻辑,具体过程如下(只是一种可能的执行逻辑):
EngineCtx ctx=new EngineCtx();//包含MyCat.SQLEngine
String sql=,“select a.id ,a.name from a ”;
//在a表所在的所有分片上顺序执行下面的本地SQL
ctx.executeNativeSQLSequnceJob(allAnodes,new DirectDBJoinHandler());
DirectDBJoinHandler类是一个回调类,负责处理SQL执行过程中返回的数据包,这里的这个类,主要目的是用a表返回的ID信息,去b表上查询对应的记录,做实时的关联:
Private HashMap<byte[],byte[]> rows;//Key为id,value为一行记录的Column原始Byte数组,这里是
a.id,a.name,b.title这三个要输出的字段
Public Boolean onHeader(byte[] header)
{
//保存Header信息,用于从Row中获取Field字段值
}
Public Boolean onRowData(byte[] rowData)
{
String id=getColumnAsString(“id”);
//放入结果集,b.title字段未知,所以先空着
rows.put(getColumnRawBytes(“id”),rowData);
//满1000条,发送一个查询请求
String sql=”select b.id, b.name from b where id in (………….)”;
//此SQL在B的所有节点上并发执行,返回的结果直接输出到客户端
ctx.executeNativeSQLParallJob(allBNodes,sql ,new MyRowOutPutDataHandler(rows));
}
Public Boolean onRowFinished()
{
}
Public void onJobFinished()
{
If(ctx.allJobFinished())
{///used total time ….
}
}}
最后,增加一个Job事件监听器,这里是所有Job完成后,往客户端发送RowEnd包,结束整个流程。
ctx.setJobEventListener(new JobEventHandler(){public void onJobFinished(){ client.writeRowEndPackage()}});
以上提供一个SQL执行框架,完全是异步的模式执行,并且以后会提供更多高质量的API,简化分布式数据处理,比如内存结合文件的数据JOIN算法,分组算法,排序算法等等。
相关文章
- 未来物联网、人工智能无法迈过的技术是什么
- Atitit 数据join 的原理与java实现 Atitit join表连接的原理与实现 13、SQL Server 表连接的三种方式 (1) Merge Join (2) Nested
- Paper:《Explainable Artificial Intelligence (XAI): Concepts&可解释的人工智能:负责任人工智能的概念、分类法、机遇和挑战》翻译与解读02
- AI:人工智能技术层企业简介(更新中)
- 整理了46个python人工智能库,详细介绍(含资源),建议收藏
- 人工智能——回归思维导图
- 超级人工智能就此诞生
- 人工智能写散文之躲进你的心里记录温暖的你
- Colocate Join :ClickHouse的一种高性能分布式join查询模型
- 【ChatGPT】万字长文揭秘 GPT 背后:为何“大模型” 就一下子成为了引领人工智能 AI2.0时代热门技术?
- 【人工智能AI】李开复:AI 2.0已至,将诞生新平台并重写所有应用
- #人工智能#万物互联是个基本的趋势
- 人工智能技术入门该读哪些书
- BlockChain:2020年7月10日世界人工智能大会WAIC《链智未来 赋能产业区块链主题论坛演讲集锦》以及《2020全球区块链创新50强》