前面的文章讲到ignite支持扫描查询和sql查询,其sql查询是ignite产品的一个亮点,那么哪一种的查询更适合我们的产品使用呢,往下看:

  先分别贴一下扫描查询和sql查询两种查询方式的代码,供参考:

  扫描方式:

IgniteCache<Long, Person> cache = ignite.cache("mycache");
// Find only persons earning more than 1,000.
IgniteBiPredicate<Long, Person> filter = new IgniteBiPredicate<>() {
@Override public boolean apply(Long key, Perons p) {
return p.getSalary() > 1000;
}
};
try (QueryCursor cursor = cache.query(new ScanQuery(filter)) {
for (Person p : cursor)
System.out.println(p.toString());
}

sql方式:

    IgniteCache<String, Task>  cache = cache();
SqlQuery sql = new SqlQuery(Task.class,"taskStatus = ? ");
List<CacheEntryImpl> list = cache.query(sql.setArgs(status)).getAll();

  开始实验:

说明

  1.Cache<String,Task>

  2.Task是一个复杂pojo,其中设立索引 taskId和taskTemplateId

3.单节点启动,cache容量为50000

案例:

  1. 查询分四步进行,

    a)         根据模板扫描查询任务(截图中日志未说明按模板查询)

    b)         根据模板sql查询任务

    c)         扫描查询所有任务

    d)         Sql查询所有任务

结果:

   

可以看到查询结果为:

    B优于 a;

    D优于 c;

初步说明用sql查询的方式要优于扫描查询

但是继续运行会发现查询时间越来越短,为了防止ignite自动加载到缓存引起的时间不准确,如图:

   

将查询的顺序调换,方案顺序为(d,c,b,a)重新测试:

结果:

   

重新测试依然发现查询次数越多花的时间越少,得出结论,先执行的查询要花更多的时间,后执行的查询会利用一些本地缓存,但是对比两次的测试结果不妨碍得出结论:

无论是全部扫描还是根据某个属性查询,sql查询的速度都要优于扫描查询的速度

测试二:

在以上环境基础上,验证索引的建立对于查询的意义,保留以上测试的日志留作去掉索引时测试结果的对比

结果:

这个结果比较上一张截图发现,其他查询都没什么变化,但是利用模板索引的查询显然比上面快了不少???这个跟设想完全不同,建立索引反而降低了速度,去掉索引更快.

为了验证是不是哪里出了错误或者看到的结果不够端正,继续查看查询平稳之后的查询速度:

有索引:

  

无索引:

   

观察得出:有索引的查询在稳定后根据模板索引的查询稳定在了0.3秒附近,而没有索引的查询只能稳定在0.4秒附近,得出建立索引确实会让sql的查询变得更快,另外索引的建立会导致扫描方式的查询变得更慢.至于最开始的查询截图得出的相悖结论只是一时情况,与实际生产情况不符,只遵循稳定后的速度.

初步验证就到这里,还有问题后续验证:

  1. 由于ignite机制的存在会导致同一个cache越查越快,但是如果中途加入新的数据,sql查询能否维持0.3秒左右的查询速度,还是会恢复到最开始的0.7秒?
  2. 为什么最开始的时候没有索引的情况下反而速度更快?
  3. 多节点下,查询是否会变得更快还是更慢?

多节点下的查询效率

初步验证:

在上面实验结果的情况下,直接双开节点,获取结果信息

   

对比结果发现:

双节点的情况下,扫描查询的速度会变得更慢,但是sql的查询没有因为网络交互速度变慢,反而速度更快,查询基本低于0.3秒,

初步得出ignite使用结论:

  多节点下使用sql查询并建立索引是最好的查询.

实验:ignite查询效率探究的更多相关文章

  1. PostgreSQL LIKE 查询效率提升实验<转>

    一.未做索引的查询效率 作为对比,先对未索引的查询做测试 EXPLAIN ANALYZE select * from gallery_map where author = '曹志耘'; QUERY P ...

  2. mysql limit查询(分页查询)探究

    MySQL的Limit子句 LIMIT offset,length Limit子句可以被用于强制 SELECT 语句返回指定的记录数.Limit接受一个或两个数字参数.参数必须是一个整数常量.如果给定 ...

  3. 【MySQL】过滤后的结果集较大,用LIMIT查询分页记录,查询效率不理想

    > 参考的优秀文章 优化LIMIT分页--<高性能MySQL>(电子工业出版社) > 场景描述 遇到一个场景:查询排序后的结果集较大,我们采用分页显示,每页显示20条记录,但是 ...

  4. mysql数据库查询过程探究和优化建议

    查询过程探究 我们先看一下向mysql发送一个查询请求时,mysql做了什么? 如上图所示,查询执行的过程大概可分为6个步骤: 客户端向MySQL服务器发送一条查询请求 服务器首先检查查询缓存,如果命 ...

  5. SQL 提高查询效率

    1.关于SQL查询效率,100w数据,查询只要1秒,与您分享: 机器情况p4: 2.4内存: 1 Gos: windows 2003数据库: ms sql server 2000目的: 查询性能测试, ...

  6. 疑难杂症——EF+Automapper引发的查询效率问题解析

    前言:前面总结了一些WebApi里面常见问题的解决方案,本来打算来分享下oData+WebApi的使用方式的,奈何被工作所困,只能将此往后推了.今天先来看看EF和AutoMapper联合使用的一个问题 ...

  7. 【转载】Arcengine效率探究之二——属性的更新

    文转载自hymyjl2010<Arcengine效率探究之二——属性的更新>   修改一批要素的属性有多种方法,当数据量较大时,若选择不当可能会大大影响速度. 一.IRowBuffer 方 ...

  8. mysql 实战 or、in与union all 的查询效率

    OR.in和union all 查询效率到底哪个快. 网上很多的声音都是说union all 快于 or.in,因为or.in会导致全表扫描,他们给出了很多的实例. 但真的union all真的快于o ...

  9. 提高SQL查询效率(SQL优化)

    要提高SQL查询效率where语句条件的先后次序应如何写 http://blog.csdn.net/sforiz/article/details/5345359   我们要做到不但会写SQL,还要做到 ...

随机推荐

  1. 成为一名Java高级工程师你需要学什么

    宏观上: 1.技术广度方面至少要精通多门开源技术吧,研究过struts\spring等的源码.2.项目经验方面从头到尾跟过几个大项目,头是指需求阶段,包括需求调研.尾是指上线交付之后,包括维护阶段.3 ...

  2. 63、django之模版层(template)

    上篇主要介绍了django的MTV模型,主要介绍了视图层之路由配置系统url分发和视图层之视图函数view,本篇主要讲解MTV模型中的模版层template. 模版层(template) 一.模版简介 ...

  3. 【ASP.NET MVC 学习笔记】- 02 Attribute

    本文参考:http://www.cnblogs.com/willick/p/3208427.html 1.特性(Attribute)对程序中的元素进行标注,比如类.字段.方法.属性等. 2.在.NET ...

  4. typeof、constructor和instance

    在JavaScript中,我们经常使用typeof来判断一个变量的类型,使用格式为:typeof(data)或typeof data.typeof返回的数据类型有六种:number.string.bo ...

  5. LeetCode 370. Range Addition (范围加法)$

    Assume you have an array of length n initialized with all 0's and are given k update operations. Eac ...

  6. Windows7 64位环境下Python-igraph环境配置

    本文为作者原创,转载请注明出处(http://www.cnblogs.com/mar-q/)by 负赑屃 其实配置很简单,但是网上的几个都不咋靠谱.而且我本身对这个软件挺感兴趣.igraph是一个网络 ...

  7. [PGM] Bayes Network and Conditional Independence

    2 - 1 - Semantics & Factorization 2 - 2 - Reasoning Patterns 2 - 3 - Flow of Probabilistic Influ ...

  8. Windows搭建golang开发平台

    Golang是谷歌开发的一款开源性语言,暂时比较方便的IDE有Inteillj Idea.LiteIDE.Eclipse(Golipse)等,使用起来比较方便的IDE:LiteIDE和Inteillj ...

  9. iOS 之 runtime --- 集百家之言

    runtime runtime用在什么地方? 说法 在程序运行过程中,动态的创建一个类(比如KVO的底层实现) 在程序运行过程中,动态地为某个类添加属性.方法,修改属性值\方法(method swiz ...

  10. 2017web前端面试总结

    2017web前端面试总结 从今年3月份开始面试笔试找实习找校招到现在也半年多了,拿到了不少offer,也有了自己的一点心得体会,这里写出来分享一下,拙见勿喷. 注意一下,以下的观点仅代表我个人的体会 ...