Apache Ignite 缓存到 SQL,反之亦然

Apache Ignite cache to SQL and vice versa

我正在开发一个系统,该系统将从服务中获取数据并将部分响应放入缓存 and/or 到 SQL table 中。

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

需要 table 才能 JDBC SQL 连接到外部 SQL 客户端,例如SQL Workbench、DBeaver、Tableau、第 3 方系统。

我的问题是 Ignite 如何处理缓存与 tables。我知道它将其缓存存储为类似于其他 IMDG 的地图。我想我不明白的是它是如何变成 table,或者两者之间 set/get 可以使用哪些 API。

所以问题是,如何从 JDBC/SQL 端获取 INSERT 并通过缓存查询它?我怎样才能 add() 进入缓存并从 JDBC/SQL 端 SELECT 它? 如果我有一个名为 "foo" 的 table,那还创建一个名为 "foo"?

的缓存

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

在两者之间架起一座桥梁将是极其有利的。我们正在从 H2 实现迁移到 Ignite,我们将 Hazelcast 缓存和 H2 的 SQL 混合在一起,并希望在 H2 之上构建的 Ignite 已经做了类似的事情。

特别是,我希望使用 DataStreamers,但我没有发现它与事物 SQL/table 方面的关系。

Ignite缓存属于nosql数据库的key-value类型。您可以从 java 代码触发 SQL 之类的查询,以在它支持时激活缓存。例如,

SELECT _KEY, _VAL from "foo".val 

这里,foo 是你的缓存名称,val 是键值对的值部分。由于这都是 NOSQL,将其与 RDBMS SQL 相关联并不是那么合理,我们仍然可以将 SQL table 中的所有非主列与您的字段相关联值对象和主要部分到关键部分。
因此,在 datastreamer 中,您可以构造键、值对象的集合并将其流式传输。这在内部只调用缓存操作。
对于 SQL 时装中的 select,您可以像下面这样触发查询-

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

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

这个问题已经回答过几次了,基本上你需要参考 Query Entities, Indexed Types or key_type/value_type parameters of CREATE TABLE 才能让它发挥作用。 IE。正确类型的缓存中的每个条目都将是一行 table,反之亦然。