Apache Ignite缓存到SQL,反之亦然

时间:2019-04-16 14:27:47

标签: ignite

我正在使用一个系统,该系统将从服务中获取数据并将响应的一部分放入缓存和/或SQL表中。

其他Java服务直接需要使用缓存。这些服务需要比SQL抽象更直接的连接,因此我们需要直接连接到缓存。

该表对于与外部SQL客户端的JDBC SQL连接是必需的,例如SQL Workbench,DBeaver,Tableau,第三方系统。

我的问题是Ignite如何处理缓存与表。我知道它以类似于其他IMDG的地图形式存储其缓存。我想我不明白的是如何将其转换为表格,或者可以在两者之间设置/获取哪些API。

问题是,我如何从JDBC / SQL端获取INSERT并通过缓存查询它?我该如何add()进入缓存并从JDBC / SQL端SELECT?如果我有一个名为“ foo”的表,那还会创建一个名为“ foo”的缓存吗?

还是我应该使用其中一种而不在两者之间流血?我还没有找到很多很好的例子,所以似乎是使用缓存还是使用表。

在两者之间建立桥梁将是非常有利的。我们正在从H2实施迁移到Ignite,在该实施中我们将Hazelcast缓存和H2的SQL融合在一起,并希望在H2之上构建的Ignite已经做了类似的事情。

特别是,我希望使用DataStreamers,但是在它与SQL /表方面的关系方面并没有太多发现。

2 个答案:

答案 0 :(得分:1)

Ignite缓存属于nosql数据库的键值类型。您可以从Java代码中触发类似查询的SQL来点燃缓存,因为它支持它。例如,

SELECT _KEY, _VAL from "foo".val 

在这里,foo是您的缓存名称,val是键值对的值部分。因为这就是全部的NOSQL,所以将它与RDBMS SQL关联起来并不是那么合理,但是我们仍然可以将SQL表中的所有非主列与值对象的字段相关,而将主表与关键部分相关。
因此,在datastreamer中,您可以构造键,值对象的集合并进行流式处理。这内部只调用缓存上的操作。
要在SQL fashon中进行选择,您可以触发如下查询-

SqlFieldsQuery query = new SqlFieldsQuery(queryString);
FieldsQueryCursor<List<?>> cursor = cache.query(query);   

有多种方法可以做到这一点,SqlFieldsQuery就是其中一种。

答案 1 :(得分:0)

已经回答了两次,基本上,您需要参考Query Entities, Indexed Typeskey_type/value_type parameters of CREATE TABLE才能使它起作用。即缓存中正确类型的每个条目都会是一行表,反之亦然。