Ignite对sql查询的支持程度?
@李玉珏 你好,想跟你请教个问题:目前在使用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;
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
忘了说明了上面的sql是在单节点setDistributedJoins(true)的情况下查询的
建议你注意一下,尽量把相关的数据并置在一台机器上,尽量不要用分布式关联,这样影响性能。 在H2的控制台上能执行,只是说SQL是对的,但是结果不一定是你想要的。 我不了解你具体的业务,虽然Ignite可以作为分布式数据库用,但是还是不建议你执行很复杂的SQL,可能产生各种各样的问题,后续不好处理。
回复
我们现在还没使用SQL查询的功能,主要应用了计算、消息、服务,缓存主要是常规的用法,就是KV的,SQL上还要观察,比较慎重,我个人觉得现在的版本并不成熟。
目前测试数据量只有1万,上面的语法没有错误,这已经是最简化的了,再简化就只能拆开查询了,上面的sql在h2 ConsoleWeb客户端可以查出结果,但是在Ignite中用cache.query就无法查出结果,通过debug发现在GridH2IndexBase中的1214行函数awaitForResponse中一直在死循环,如果将上面的sql语句中的子查询中的right out join 改为left out join在h2 Web客户端和用cache.query都可以查出来
我从这个论坛上看见你们已经使用Ignite开发开应用了,能简单讲述一下你们开发的应用中都用到了Ignite中的那些东西,以及是如何用的吗?你们目前大概的数据量是多少,以及当前部署的节点有多少,还有到目前你们开发过程中都遇到了什么问题?
1.你数据量多大?
2.你这个SQL应该是写复杂了,我觉得应该能简化。
3.只要不报错,说明你这个语法是支持的。
4.虽然可以将Ignite作为分布式内存数据库用,但是显然有很多的条件,否则要么得不到正确的结果,要么性能很差。