Ignite的jdbc与网格的连接方式的查询性能对比

简介: Ignite的jdbc与网格的连接方式的查询性能对比

Ignite的jdbc与网格的连接方式的查询性能对比
环境:
数据量100万
Ignite2.5
Windows10 8g

  1. jdbc方式连接
  2. java.sql.Connection;

import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Arrays;
import java.util.List;

public class IgniteQury {

public static void main(String[] args) throws SQLException, ClassNotFoundException {
    // TODO Auto-generated method stub
    //连接远程单节点ignite
    Class.forName("org.apache.ignite.IgniteJdbcDriver");
    Connection conn = DriverManager.getConnection("jdbc:ignite:thin://ip:10800");        
    PreparedStatement ps = conn.prepareStatement("select s.*,i.* from staff s join internetcafe i on s.ID=i.STAFFID"
            +" union all "
            +"select s.*,p.TrackID,p.STAFFID,concat(concat(p.TAKEOFFNAME,','),p.FALLDOWNNAME) FLIGHTADD,p.FLIGHTDATE from staff s left join plane p on s.ID=p.STAFFID");

// +" union all "
// +"select s.*,t.TrackID,t.STAFFID,concat(concat(t.OUTSETNAME,','),t.TERMINAL) TRIVALADD,t.travelDate from staff s join train t on s.ID=t.STAFFID");

    long t1 = System.currentTimeMillis();
    ResultSet res=ps.executeQuery();
    long t2 = System.currentTimeMillis();
    long t3=t2-t1;
    float s=(float)t3/1000;
    System.out.println("执行时间:"+s+"秒");
}

}
使用jdbc连接,用java程序取数据,合并两个查询子集,查询时间50几秒,合并三个查询子集,拉跨ignite

  1. 网格方式连接
  2. java.util.Arrays;

import java.util.List;

import org.apache.ignite.Ignite;
import org.apache.ignite.IgniteCache;
import org.apache.ignite.Ignition;
import org.apache.ignite.cache.query.QueryCursor;
import org.apache.ignite.cache.query.SqlFieldsQuery;
import org.apache.ignite.configuration.CacheConfiguration;
import org.apache.ignite.configuration.IgniteConfiguration;
import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi;
import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder;

public class IgniteCollocationQuery {

public static void main(String[] args) {
    // TODO Auto-generated method stub
    TcpDiscoverySpi spi = new TcpDiscoverySpi();
    TcpDiscoveryVmIpFinder ipFinder = new TcpDiscoveryVmIpFinder();
    ipFinder.setAddresses(Arrays.asList("192.168.76.95:47500..47509"));

// spi.setJoinTimeout(4000);

    spi.setIpFinder(ipFinder);
    IgniteConfiguration cfg = new IgniteConfiguration();
    cfg.setDiscoverySpi(spi);
    cfg.setClientMode(true);
    Ignition.setClientMode(true);
    Ignite ignite = Ignition.start(cfg);   

// IgniteCache() cache = ignite.cache("SQL_PUBLIC_STAFF");

    CacheConfiguration ccfg = new CacheConfiguration();
    ccfg.setName("SQL_PUBLIC_STAFF");
    IgniteCache cache = ignite.getOrCreateCache(ccfg);

// SqlFieldsQuery query = new SqlFieldsQuery("select * from staff");

    SqlFieldsQuery query = new SqlFieldsQuery("select s.*,i.* from staff s join internetcafe i on s.ID=i.STAFFID"
            +" union all "
            +"select s.*,p.TrackID,p.STAFFID,concat(concat(p.TAKEOFFNAME,','),p.FALLDOWNNAME) FLIGHTADD,p.FLIGHTDATE from staff s left join plane p on s.ID=p.STAFFID"
            +" union all "
            +"select s.*,t.TrackID,t.STAFFID,concat(concat(t.OUTSETNAME,','),t.TERMINAL) TRIVALADD,t.travelDate from staff s join train t on s.ID=t.STAFFID");
    //设置collocation可用
   query.setDistributedJoins(true);
    
    long t1 = System.currentTimeMillis();
    QueryCursor<List<?>> cursor=cache.query(query);
    long t2 = System.currentTimeMillis();
    long t3=t2-t1;
    float s=(float)t3/1000;
    System.out.println("执行时间:"+s+"秒");
}

}
使用网格连接,合并三个查询子集,1.9秒,设置query.setDistributedJoins(true)性能提升10倍,0.19秒

相关文章
|
3月前
|
SQL Java 关系型数据库
JDBC数据库的连接
JDBC数据库的连接
34 0
|
6月前
|
SQL Java 关系型数据库
JDBC Connection详解:连接到数据库的关键
在Java中,要与数据库进行交互,需要使用Java数据库连接(JDBC)。JDBC允许您连接到不同类型的数据库,并执行SQL查询、插入、更新和删除操作。在JDBC中,连接数据库是一个重要的步骤,而Connection对象是实现这一目标的关键。本篇博客将详细解释Connection对象的作用、创建和使用方法,以及与数据库连接相关的注意事项。
83 0
|
3月前
|
SQL Java 关系型数据库
通过JDBC连接MySQL实现表的插入和查看语句
通过JDBC连接MySQL实现表的插入和查看语句
30 0
|
3月前
|
SQL Java 关系型数据库
JDBC技术【SQL注入、JDBC批量添加数据、JDBC事务处理、其他查询方式】(三)-全面详解(学习总结---从入门到深化)
JDBC技术【SQL注入、JDBC批量添加数据、JDBC事务处理、其他查询方式】(三)-全面详解(学习总结---从入门到深化)
33 0
|
8月前
|
Java 数据库连接
Java 中封装JDBC连接到JDBCUtils工具类的详解
Java 中封装JDBC连接到JDBCUtils工具类的详解
41 0
|
9月前
|
SQL Java 关系型数据库
Jmeter 之JDBC连接
Jmeter 之JDBC连接
62 0
|
4月前
|
Java 关系型数据库 MySQL
|
6月前
|
Java 关系型数据库 MySQL
JSP 空教室查询管理系统yeclipse开发mysql数据库bs框架java编程jdbc
JSP 空教室查询管理系统是一套完善的web设计系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,开发环境为TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql5.0,使用java语言开发,系统主要采用B/S模式开发。
264 2
|
6月前
|
Java 关系型数据库 MySQL
【JavaSE专栏90】用最简单的方法,使用 JDBC 连接 MySQL 数据库
【JavaSE专栏90】用最简单的方法,使用 JDBC 连接 MySQL 数据库
|
6月前
|
Oracle 关系型数据库 Java
分享一个 Oracle RAC 模式下客户端建立JDBC初始连接时因ONS造成应用启动时卡顿30秒问题的排查分析案例
分享一个 Oracle RAC 模式下客户端建立JDBC初始连接时因ONS造成应用启动时卡顿30秒问题的排查分析案例