Ignite对sql查询的支持程度?

长青大侠 发布于 2017/04/07 10:12
阅读 681
收藏 0

@李玉珏 你好,想跟你请教个问题:目前在使用Ignite的过程中发现使用Ignite的cache.query中时如果sql语句如下

select p.name, all.java,all.ignite           
from ( select s.pid ida,          
              sum ( case when c.name ='java' then s.score else 0 end)  java,                      
              sum ( case when c.name = 'ignite'  then s.score else 0 end )  ignite 
         from "test".score s , "test".course c              
        where s.cid=c.id              
        group by ida  ) 
all right outer join "test".person p           
on all.ida=p.id 

会发生死循环,无法查询到结果(想类似连接查询存在这种问题),请问你遇到过类似的问题吗,还有您对Ignite支持的sql查询有什么其他深入的了解,比如Ignite对sql的查询支持到什么程度?如果说把所有相关的业务计算逻辑用sql通过ignite的查询来实现,您认为合理吗?还是说复杂的计算逻辑按照mapreduce的方式实现比较好?

上面的sql用到的表结构

public class Person {
    private Integer id;
    private String name;
    private String address;
    private String phone;
    private Integer age;

}

public class Course {
    private Integer id;
    private String name;

}

public class Score {
   private Integer id;
    private Integer pid;
    private Integer cid;
    private Integer score;

}

 

加载中
0
李玉珏
李玉珏

1.你数据量多大?

2.你这个SQL应该是写复杂了,我觉得应该能简化。

3.只要不报错,说明你这个语法是支持的。

4.虽然可以将Ignite作为分布式内存数据库用,但是显然有很多的条件,否则要么得不到正确的结果,要么性能很差。

长青大侠
长青大侠
我从这个论坛上看见你们已经使用Ignite开发开应用了,能简单讲述一下你们开发的应用中都用到了Ignite中的那些东西,以及是如何用的吗?你们目前大概的数据量是多少,以及当前部署的节点有多少,还有到目前你们开发过程中都遇到了什么问题?
0
长青大侠
长青大侠

目前测试数据量只有1万,上面的语法没有错误,这已经是最简化的了,再简化就只能拆开查询了,上面的sql在h2 ConsoleWeb客户端可以查出结果,但是在Ignite中用cache.query就无法查出结果,通过debug发现在GridH2IndexBase中的1214行函数awaitForResponse中一直在死循环,如果将上面的sql语句中的子查询中的right out join 改为left out join在h2 Web客户端和用cache.query都可以查出来

长青大侠
长青大侠
回复 @李玉珏 : 好的,多谢!!!
李玉珏
李玉珏
回复 @长青大侠 : 我们现在还没使用SQL查询的功能,主要应用了计算、消息、服务,缓存主要是常规的用法,就是KV的,SQL上还要观察,比较慎重,我个人觉得现在的版本并不成熟。
长青大侠
长青大侠
回复 @李玉珏 : 目前你们做的项目中是如何用sql查询的,是只用来查询一些简单的sql吗,用到sql查询的地方多吗?
李玉珏
李玉珏
建议你注意一下,尽量把相关的数据并置在一台机器上,尽量不要用分布式关联,这样影响性能。 在H2的控制台上能执行,只是说SQL是对的,但是结果不一定是你想要的。 我不了解你具体的业务,虽然Ignite可以作为分布式数据库用,但是还是不建议你执行很复杂的SQL,可能产生各种各样的问题,后续不好处理。
0
长青大侠
长青大侠

忘了说明了上面的sql是在单节点setDistributedJoins(true)的情况下查询的

返回顶部
顶部