我正在使用一个系统,该系统将从服务中获取数据并将响应的一部分放入缓存和/或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 /表方面的关系方面并没有太多发现。
答案 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 Types或key_type/value_type parameters of CREATE TABLE才能使它起作用。即缓存中正确类型的每个条目都会是一行表,反之亦然。