【问题标题】:Hazelcast Jet with Named Jdbc Query or ResultSet?带有命名 Jdbc 查询或结果集的 Hazelcast Jet?
【发布时间】:2021-05-08 12:55:28
【问题描述】:

我是 Hazelcast Jet 的新手,我正在使用 Spring JdbcTemplate 执行我的查询,该查询在查询中使用命名参数,但我不确定如何将它与 Hazelcast Jet 一起使用。

例如Hazelcast 的工作方式如下:

Pipeline p = Pipeline.create();
p.readFrom(Sources.jdbc(
    () -> DriverManager.getConnection("jdbc:mysql://localhost:3306/mysql"),
    (con, parallelism, index) -> {
        PreparedStatement stmt = con.prepareStatement(
              "SELECT * FROM person WHERE MOD(id, ?) = ?)");
        stmt.setInt(1, parallelism);
        stmt.setInt(2, index);
        return stmt.executeQuery();
    },
    resultSet -> new Person(resultSet.getInt(1), resultSet.getString(2))
)).writeTo(Sinks.logger());

但是,我想使用 SELECT * FROM person WHERE MOD(id, :id) = :id) 之类的命名查询,而不是 ?。 Hazelcast 是否支持命名查询或 Spring JdbcTemplate

同样在Sources,我们可以直接传递ResultSet作为源吗?有很多来源,但我没有找到“ResultSet”的任何来源。

例如

p.readFrom(Sources.resultSet(<Resultset Object>) //something like this

如果可能的话,请帮我解决这个问题。

【问题讨论】:

  • 您能否澄清一下您的意思:“[...] 我们可以将结果集直接作为源传递吗?” ?你想达到什么目的?
  • 在我的应用程序中,我使用的是 Spring JdbcTemplate,它返回了我的结果集,我想使用 hazelcast jet 管道对其进行一些过滤、聚合和分组,那么我怎样才能像 Hazelcast jet 那样直接实现它不支持将结果集作为源或命名参数。
  • 没有用于此的 API。主要原因:整个结果集必须在提交管道作业的实例的内存中实现。通常 ResultSet 连接到底层数据库。您可以创建一个不连贯的表示:它称为 RowSet。但是您必须在内存中具体化整个数据集。这可能适用于玩具示例,但对于任何有意义的数据大小来说并不实用。
  • 您使用 JdbcTemplate 的动机是什么?您想要/需要使用命名参数吗?还是Spring管理的连接池?我们目前正在研究如何改进我们的 Spring 集成,您的示例可以帮助您更好地理解问题。
  • 是的,我们的连接池由 spring 管理,我们的整个应用程序建立在 JDBCTemaple 作为数据库连接,查询和参数一切都是动态的,将由用户编写(因此用户不必再次编写参数或数一下),因为查询也可以是 200、300 或更多行,这就像创建动态数据集(BI 报告),我可以从 JDBCTemplate 实现 List(可以与 Hazelcast Sources 一起使用),但它会也存储在内存中,这不是一个好主意。

标签: java hazelcast hazelcast-jet


【解决方案1】:

我假设“命名 JDBC 查询”是指“命名参数”。

它不是 JDBC API 的标准特性,它是 Spring Framework 提供的一种便利。 Hazelcast Jet 不支持它。我们目前正在研究如何在 Hazelcast Jet 和 Spring 之间提供更好的集成,这是我们关注的事情之一。

【讨论】:

    【解决方案2】:

    我将回答问题的另一部分:从技术上讲,创建ResultSet 源是不可能的。查询必须在集群上执行,您不能在客户端上执行查询并将其发送到集群以获取行。这就是为什么 JDBC 源要求您提供 SQL 语句和 lambda 来创建连接,但连接将在集群中创建并用于执行查询。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-23
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 2011-01-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多