这篇文章主要介绍“怎么用Java设计实现多实例多库查询”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么用Java设计实现多实例多库查询”文章能帮助大家解决问题。大数据层取数统一实现入口(数据源的路由,ADB/CK/HBASE… 大数据操作层数据源的路由)支持多实例、多库、多表的异构数据查询通过 查询 语义分析+元信息解析,拆解 查询输入 中的异构数据源处理,所有异构数据处理采用异步 Callback 方式多个数据来源写入到不同实例、不同库中,并且一个圈选可以支持圈多个实例(不同库)中的标签、事件数据单表数据量过大,目前只能通过压缩保留时间解决,需要可以进行按时间段拆表分表查询数据单实例配置上限问题,实例升级配置是有上限的成本也很高,支持多实例后就可以使用多实例中等配置无限扩展同一个圈选不支持跨不同类型数据库混用,类似一个圈选包含了ADB+CK两种类型数据库的配置创建库表的时候,需要有原则:不同实例的库、表名字如果完全一样,默认他们代表的业务语意也是一致的,如果不一致会出现问题场景描述:传统数据库中间件的几种模式:种类优势缺点JAR方式嵌入到应用端接入简单,无需单独部署独立服务小数据量场景下速度很快,比原先直连JDBC性能损失很低调试使用简单与应用资源公用,互相影响大数量场景下会有很多连带问题对应用端代码有一定的入侵性扩展性差中间件方式存在,伪装数据库代理层对应用代码无入侵,只需要修改配置层资源独立,不会有捆绑风险可以分层独立扩展,可扩展性强适合大数据量的场景中让应用层基本无感知中间件的存在开发维护成本高中间件编码复杂,需要对接开源数据库的各种代理协议以及字节码转换逻辑小数据量的请求场景中性能比直连的性能损耗严重30%~40%在JDBC上面无法再次扩展,传输协议和模型固定中间件方式存在,不伪装数据库代理层中间件开发简单,无需对接各种开源数据库的代理转换协议资源独立,不会有捆绑风险可以分层独立扩展,可扩展性强适合大数据量的场景中脱离应用端到中间件的JDBC协议,扩展性自由应用接入层会有感知,配置层缺失了原先的JDBC配置,SQL操作也无法使用原先的数据库框架而是要将SQL通过Dubbo方式交互小数据量的请求场景中性能比直连的性能损耗严重30%~40%模块说明:模块名执行边界输入描述输出描述代理模块模型接入请求模型结果模型运行模式模块执行线程池处理在线模式/离线模式执行线程池计划模块离线模式和在线模式都需要创建入口执行计划和执行日志离线异构取数场景,每一层内嵌取数都是单独计划和执行日志,完成后上推执行计划计划存在父子计划任务创建计划查询可执行计划任务数据更新计划状态可执行的计划任务解析模块解析查询请求的参数,转换成 AST 语法树查询语句,可以是 SQL,可以是 JSON也可以是规则XMLAST语法树对象、核心解析模型权限校验模块判断token是否有使用的实例、库、表权限根据token,库,表查询到有权限的实例信息是否有权限,以及有权限的实例信息路由模块获取有权限且最优的实例请求来源的系统,请求来源的库,请求来源的表符合权限校验的实例 ID+库信息连接池管理模块管理各种数据源的连接池库元信息连接池连接数据执行模块取数执行逻辑,根据改写后的SQL进行分实例分库分表查询,最终汇总到临时表,在进行完整原始SQL改写的执行大数据量临时表通过生成SQL执行语句导入到OSS取数语句分析拆分后的执行语句异构数据的话返回实例名+库名+表名非异构数据返回数据结果集计费模块根据临时表数据量,跨库+跨表数量进行公式化计费AST语法树对象、SQL最终成本费用复用模块数据复用的逻辑判断执行语句,间隔时间是否复用模型熔断模块对执行中的计划进行强制熔断,没有任何业务逻辑,只是提供熔断标示计划ID是否熔断项目模块依赖描述:(开发分之:multiple-instances)(项目名:datacenter-night-watchman)支持单实例多库查询支持多实例多库查询支持单实例单库查询异构数据统一异步汇总临时表,非异构数据默认实时传输返回在线模式(只支持非异构取数),先落地实时计划表,然后实时交互查询数据,返回数据离线模式(支持异构和非异构取数),先实时创建父子计划,然后返回父计划ID,异步调度执行计划进行取数,接入方通过计划ID查询计划状态和异构存储表每一个计划都对应一个取数任务计划表结构:(Mysql-watchman库)解析模块使用shardingjdbc5内部的sql解析引擎,druid很久不更新了,很多新的语法支持不好解析模块代码写到底层工具包,包含SQL、JSON解析Sharding5 的解析引擎已经支持多种数据库包含各种数据库新增的函数语法解析,主要是Mysql、Pg、Sqlserver、OracleClickhouse和ADB目前都是支持原生mysql协议的,那么进入的数据库解析方言使用mysql引擎即可ShardingSphere解析引擎模块代码示例:解析模块注意点:解析引擎只做原始解析,然后封装到输出模型中解析输出模型需要考虑嵌套SQL的模型存在以及同层级union的模型存在解析输出模型聚合根已经调整好,缺失的字段或者模型在进行微调有了圈选解析模型,已经获取到使用的实例、库、表相关所有信息了根据入参token判断实例和库的权限情况表结构需要有,数据需要按照规范填入,后期做代码逻辑实现暂时无实现,所以默认所有实例都可用,全部返回到模型负责将可能涉及到多实例、多库、多表的联合查询拆分拆分过程中需要考虑联合查询的where条件、group by 条件、order by 条件如果解析模型传递过来的数据中,不存在跨库场景,那么改写引擎不进行任何操作逻辑改写案例描述:将复合嵌免费云主机域名套的SQL平铺,按照库为单位,最内层开始为最小粒度每一层都会同时存在4中类型改写语句取数语句替换符语句聚合语句
建表语句改写模型描述:通过权限模型中返回的有权限的实例,判断最优的CPU实例根据实例+库名去连接池模块中获取相应的连接池信息分库分表逻辑后续实现,暂不做设计需要支持通配符方式的连接配置,案例:链接池内部使用druid框架,没有单独对数据源进行druid参数配置的话全部采用守夜人默认提供的运行参数,如果需要单独对不同数据源进行配置,那么原先druid的配置加上对应的后缀关于“怎么用Java设计实现多实例多库查询”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注百云主机行业资讯频道,小编每天都会为大家更新不同的知识点。
本篇内容主要讲解“Java中归并排序算法的原理是什么几怎么实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java中归并排序算法的原理是什么几怎么实现”吧!归并排序是建立在归并操作上的一种有效的排序算法。该算法是…
免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。