dblink查询_分库数据如何查询统计
分库后的计算不能直接使用SQL;异构库 SQL 函数不尽相同;JAVA 硬编码实施难度大;即使借助透明网关访问远程数据库,分库性能优化也是头疼问题。
一般常规办法:
方法1:java硬编码
简单的跨库count运算,Java部分代码大概要写成这样:
…
public Connection getConnection(String drivername,String url, String username, String password) {
try {
Class.forName(drivername);
conn = DriverManager.getConnection(url, username, password);
} catch (Exception e) {
System.out.println("DBUtils.getConnection_FAILED!");
e.printStackTrace();
}
return conn;
}
…
…
Connection conn1 = DBUtils.getConnection(URL1, USER1, PASSWORD1);
Connection conn2 = DBUtils.getConnection(URL2, USER2, PASSWORD2);
…
String sql = "select count(*) c from sales";
PreparedStatement ptmt1 = conn1.prepareStatement(sql);
PreparedStatement ptmt2 = conn1.prepareStatement(sql);
…
ResultSet rs1 = ptmt1.executeQuery();
ResultSet rs2 = ptmt2.executeQuery();
…
return rs1.getInt("c") + rs2.getInt("c");
…
方法2:透明网关
例如oracle的dblink
![](/assets/blank.gif)
带有DBLINK的SQL,优化起来很复杂。可以通过分析执行计划,利用collocated inline view,driving_site hint 等手段,来优化这些带有DBLINK的SQL。但这即使对于一名经验丰富的DBA来说,也是件很头疼、很费劲的事。
这种情况下,如果有集算器就简单很多,看下面这个例子:
n个库的count运算。该运算需要在各分库中分别进行 count,对各分库的结果,在汇总阶段要用sum求和,集算器(SPL)仅4行就可以搞定了。
AB1=n.(connect("mysql"+string(~)))//获取n个分库的连接2=SQL="select count(*) c from sales"//需要在分库中执行的SQL3=A1.(~.cursor(SQL))//在n个分库中执行 SQL4=A3.conjx().total(sum(c))//将各分库算出的count值进行汇总
即使分库数据库为异构的情况,集算器也可以通过SQL翻译功能方便地进行SQL转化,为不同数据库提供可执行的SQL。
利用集算器还可根据数据特征,轻松写出具有针对性的高性能代码,无需大量硬编码,即可实现高效的算法 。诸如排序、top、分组、去重、连接等各类分库运算,都可以轻松实现,感兴趣可以参考:分库后的查询统计
集算器还很容易嵌入到Java应用程序中,Java如何调用SPL脚本有使用和获得它的方法。
关于集算器安装使用、获得免费授权和相关技术资料,可以参见如何使用集算器。
dblink查询_分库数据如何查询统计相关推荐
- Elasticsearch解决只能查询10000条数据以及查询的total为10000条的解决方案
Elasticsearch官方默认限制索引查询最多只能查询10000条数据,查询第10001条数据开始就会报错: Result window is too large, from + size mus ...
- mysql忽略大小写jpa解决_春数据JPA查询生成忽略大小写,以避免列数据
我使用的是春天的数据JPA获取使用ignoreCase属性数据为大写:春数据JPA查询生成忽略大小写,以避免列数据 Employee类: import javax.persistence.Entity ...
- oracle锁表查询_专业解决 MySQL 查询速度慢与性能差
Java识堂,一个高原创,高收藏,有干货的微信公众号,一起成长,一起进步,欢迎关注 什么影响了数据库查询速度 1.1 影响数据库查询速度的四个因素 1.2 风险分析 QPS: QueriesPerSe ...
- mysql语句查询今天的数据_mysql查询当天所有数据sql语句
mysql查询当天的所有信息: select * from test where year(regdate)=year(now()) and month(regdate)=month(now()) a ...
- sharding子查询_分页及子查询
分页及子查询 Sharding-JDBC完全支持MySQL.PostgreSQL和Oracle的分页查询,SQLServer由于分页查询较为复杂,仅部分支持. 分页性能 性能瓶颈 查询偏移量过大的分页 ...
- 使用python对学生表的查询_多表组合查询——Python操作Mysql数据库
前面我们介绍了单张表的查询,包括模糊查询.分组.排序.各种筛选条件等等操作,在实际应用中,查询的数据往往不止局限在一张表里,通常需要多张表在一起进行组合查询,今天我们将会对Mysql当中的多张有关联的 ...
- 外键查询_传统关系型数据库查询性能提高思路
相信现阶段依然有许多的企业信息化项目依然采用单体架构,其数据存储主要方式依然以关系型数据库为主,比如oracle.mysql.postgresql等.企业初期,各种原因导致研发人员身兼数职,都是全栈的 ...
- .net函数查询_数据分析-SQL-复杂查询
内容简介: 视图 子查询 标量子查询 关联子查询 各种函数 练习题 总结 一.视图 1.1 视图是什么? 数据库里面有很多表,表里放的是实际数据,视图中存放的是SQL查询语句,当我们用客户端(例如na ...
- order by 子查询_视图,子查询,标量子查询,关联子查询
视图 子查询 标量子查询 关联子查询 如何用SQL解决业务问题 各种函数 1. 视图 视图内存放SQL查询语句,运行时运行该语句.查出的数据为临时数据 创建视图 create view as 视图名称 ...
最新文章
- 删除某个文件夹下的所有文件
- 蛋白质折叠的霰弹枪方法
- Gitee X Serverless Devs 邀你来“领赏”啦!
- java 动态代理 阿bin_Android WebView 的方法只能在 UI 线程中运行
- javascript核心_只需几分钟即可学习这些核心JavaScript概念
- R语言的高质量图形渲染库Cairo
- 工作后,成长速度是如何产生差异的?
- 简单解说思科命令大全
- 郭天祥的10天学会51单片机_第二节
- linux传输系统架构,Linux后端程序成长关键技术——底层体系结构
- pet-shop Dapp开发(下)
- Android测试能不能用monk,Android之monkey Test
- pandas相关性分析的三种方法
- 分享一下自己做电影解说的步骤流程和经验,小白必看!
- 几种网站开发模型- Model1、Model2、三层
- 升级mysql数据库版本时,对应配置文件的一些变化
- 与计算机网络相比不属于云计算特征的是,与网络计算机相比,云计算的特征不包括:( )...
- 鱼刺 winhttp
- RuntimeError: ONNX export failed: Couldn‘t export operator aten::upsample_bilinear2d
- Appium-实现手势密码登陆
热门文章
- 超简单:解析 yml 类型(application.yml)配置文件 、springboot 工程读取 yml 文件中的值
- Linux whoami命令、Linux su命令、Linux w命令
- FreeSql (十七)联表查询
- AutoHotkey调用VBA实现批量精确筛选数据透视表某字段内容。
- ThreadLocal的练习代码
- Oracle学习之merge
- Remove Duplicates from Sorted Array II leetcode java
- Window7无法访问 Window server 2008 R2文件服务器的共享
- Flex builder3与eclipse整合 转载
- C++没有调用析构函数