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秒

相关文章
|
7月前
|
Java 数据库连接 数据库
【YashanDB知识库】jdbc查询st_geometry类型的数据时抛出YAS-00101 cannot allocate 0 bytes for anlHeapMalloc异常
【YashanDB知识库】jdbc查询st_geometry类型的数据时抛出YAS-00101 cannot allocate 0 bytes for anlHeapMalloc异常
|
7月前
|
Java 数据库连接 数据库
【YashanDB知识库】WAS配置YashanDB JDBC连接
【YashanDB知识库】WAS配置YashanDB JDBC连接
|
10月前
|
安全 Java 数据库连接
gbase8a JDBC常用特性-Kerberos认证方式连接
JDBC常用特性-Kerberos认证方式连接
|
10月前
|
Java 数据库连接 网络安全
JDBC常用特性-SSH隧道连接
JDBC常用特性-SSH隧道连接
|
7月前
|
SQL druid Java
【YashanDB知识库】YashanDB JDBC驱动查询时抛出io fail:Read timed out异常
【YashanDB知识库】YashanDB JDBC驱动查询时抛出io fail:Read timed out异常
|
7月前
|
SQL druid Java
【YashanDB知识库】YashanDB JDBC查询时抛出YAS-02094
【YashanDB知识库】YashanDB JDBC查询时抛出YAS-02094
|
7月前
|
SQL druid Java
【YashanDB知识库】YashanDB JDBC查询时抛出YAS-02094
【YashanDB知识库】YashanDB JDBC查询时抛出YAS-02094
|
7月前
|
SQL druid Java
【YashanDB知识库】YashanDB JDBC驱动查询时抛出io fail:Read timed out异常
【YashanDB知识库】YashanDB JDBC驱动查询时抛出io fail:Read timed out异常
|
Java 数据库连接
JDBC连接复习
JDBC连接复习
100 1
|
8月前
|
Java 数据库连接 数据库
【YashanDB 知识库】jdbc 查询 st_geometry 类型的数据时抛出 YAS-00101 cannot allocate 0 bytes for anlHeapMalloc 异常
**简介:** 客户在使用 YashanDB JDBC 驱动查询含 st_geometry 列的数据时,遇到 YAS-00101 错误,提示无法分配内存。该问题影响所有版本的 YashanDB,导致业务中断。原因是用户缺少对 st_geometry 类型的 execute 权限。解决方法是为用户赋权:`grant execute any type to &lt;username&gt;;` 以恢复正常运行。