分库后的计算不能直接使用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

带有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查询_分库数据如何查询统计相关推荐

  1. Elasticsearch解决只能查询10000条数据以及查询的total为10000条的解决方案

    Elasticsearch官方默认限制索引查询最多只能查询10000条数据,查询第10001条数据开始就会报错: Result window is too large, from + size mus ...

  2. mysql忽略大小写jpa解决_春数据JPA查询生成忽略大小写,以避免列数据

    我使用的是春天的数据JPA获取使用ignoreCase属性数据为大写:春数据JPA查询生成忽略大小写,以避免列数据 Employee类: import javax.persistence.Entity ...

  3. oracle锁表查询_专业解决 MySQL 查询速度慢与性能差

    Java识堂,一个高原创,高收藏,有干货的微信公众号,一起成长,一起进步,欢迎关注 什么影响了数据库查询速度 1.1 影响数据库查询速度的四个因素 1.2 风险分析 QPS: QueriesPerSe ...

  4. mysql语句查询今天的数据_mysql查询当天所有数据sql语句

    mysql查询当天的所有信息: select * from test where year(regdate)=year(now()) and month(regdate)=month(now()) a ...

  5. sharding子查询_分页及子查询

    分页及子查询 Sharding-JDBC完全支持MySQL.PostgreSQL和Oracle的分页查询,SQLServer由于分页查询较为复杂,仅部分支持. 分页性能 性能瓶颈 查询偏移量过大的分页 ...

  6. 使用python对学生表的查询_多表组合查询——Python操作Mysql数据库

    前面我们介绍了单张表的查询,包括模糊查询.分组.排序.各种筛选条件等等操作,在实际应用中,查询的数据往往不止局限在一张表里,通常需要多张表在一起进行组合查询,今天我们将会对Mysql当中的多张有关联的 ...

  7. 外键查询_传统关系型数据库查询性能提高思路

    相信现阶段依然有许多的企业信息化项目依然采用单体架构,其数据存储主要方式依然以关系型数据库为主,比如oracle.mysql.postgresql等.企业初期,各种原因导致研发人员身兼数职,都是全栈的 ...

  8. .net函数查询_数据分析-SQL-复杂查询

    内容简介: 视图 子查询 标量子查询 关联子查询 各种函数 练习题 总结 一.视图 1.1 视图是什么? 数据库里面有很多表,表里放的是实际数据,视图中存放的是SQL查询语句,当我们用客户端(例如na ...

  9. order by 子查询_视图,子查询,标量子查询,关联子查询

    视图 子查询 标量子查询 关联子查询 如何用SQL解决业务问题 各种函数 1. 视图 视图内存放SQL查询语句,运行时运行该语句.查出的数据为临时数据 创建视图 create view as 视图名称 ...

最新文章

  1. 删除某个文件夹下的所有文件
  2. 蛋白质折叠的霰弹枪方法
  3. Gitee X Serverless Devs 邀你来“领赏”啦!
  4. java 动态代理 阿bin_Android WebView 的方法只能在 UI 线程中运行
  5. javascript核心_只需几分钟即可学习这些核心JavaScript概念
  6. R语言的高质量图形渲染库Cairo
  7. 工作后,成长速度是如何产生差异的?
  8. 简单解说思科命令大全
  9. 郭天祥的10天学会51单片机_第二节
  10. linux传输系统架构,Linux后端程序成长关键技术——底层体系结构
  11. pet-shop Dapp开发(下)
  12. Android测试能不能用monk,Android之monkey Test
  13. pandas相关性分析的三种方法
  14. 分享一下自己做电影解说的步骤流程和经验,小白必看!
  15. 几种网站开发模型- Model1、Model2、三层
  16. 升级mysql数据库版本时,对应配置文件的一些变化
  17. 与计算机网络相比不属于云计算特征的是,与网络计算机相比,云计算的特征不包括:( )...
  18. 鱼刺 winhttp
  19. RuntimeError: ONNX export failed: Couldn‘t export operator aten::upsample_bilinear2d
  20. Appium-实现手势密码登陆

热门文章

  1. 超简单:解析 yml 类型(application.yml)配置文件 、springboot 工程读取 yml 文件中的值
  2. Linux whoami命令、Linux su命令、Linux w命令
  3. FreeSql (十七)联表查询
  4. AutoHotkey调用VBA实现批量精确筛选数据透视表某字段内容。
  5. ThreadLocal的练习代码
  6. Oracle学习之merge
  7. Remove Duplicates from Sorted Array II leetcode java
  8. Window7无法访问 Window server 2008 R2文件服务器的共享
  9. Flex builder3与eclipse整合 转载
  10. C++没有调用析构函数