【问题标题】:How do you use Java connection pooling for MySQL X DevAPI?您如何为 MySQL X DevAPI 使用 Java 连接池?
【发布时间】:2017-03-04 17:24:29
【问题描述】:

我一直在探索下一个 Spring 版本中对非阻塞异步响应式 Web 应用程序的支持。大多数应用程序都倾向于与关系数据库交互,这让我感到震惊。所以只要 JDBC 是一个同步阻塞 API,并且所有主要的关系数据库仍然缺乏专有的异步驱动程序,那么整个响应式的东西可能仍然领先于时代。

然后几乎是偶然的,我发现最新版本的 MySQL 支持名为“X DevAPI”的东西,它包含在当前的 MySQL JDBC 驱动程序中(尽管它是额外的类,在 JDBC 规范之外)。

我没有听说过关于 X DevAPI 的任何宣传,而且那里的少量文档似乎强调了将 MongoDB 替换为文档存储的用例。但是,该库还包括以非阻塞异步方式访问 MySQL 关系数据库的能力。

不幸的是,唯一的文档示例是基本的“Hello World”用例。 static void main 方法从头开始建立一个新的 MySQL X 会话,并在最后关闭它。

我很好奇这个新 API 是否已准备好用于更实际的使用。具体来说,是否支持连接池?是通过 3rd-party 库,还是通过一些没有很好记录的东西原生于 MySQL 库?

或者我可能在这里遗漏了一些基本的东西,并且根本不需要连接池,因为 X DevAPI 在幕后多路复用或其他什么?

【问题讨论】:

    标签: java mysql spring asynchronous reactive-programming


    【解决方案1】:

    根据documentation会有两种类型的会话:

    • X 会话。这是首选的会话类型,因为根据dev blog post,它是无状态的。目前它只能连接到mysql的一个节点,但对于MySQL 8版本,它预计会work with multiple nodes

    虽然 MySQL X 的当前版本支持连接到单个节点的 XSession,但未来的版本可能会将其扩展到覆盖多个节点。使用 XSession 的应用程序已准备好进行扩展:更改一些连接参数并通过更改代码来完成。

    • 节点会话。由于 XSession 仅提供 sql 函数的子集,因此应该有一种方法可以执行原始 sql。 SQL 是有状态的,NodeSession 也是如此。

    使用 NodeSession 的应用程序建立到各个节点的连接。要使用 NodeSession 扩展应用程序,您必须尽可能将 NodeSession 的使用替换为 XSession。

    X 协议需要安装 X 插件,因此您可以检查 my sample repo 在 Java 中使用 X DevApi 的 docker 使用情况。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-20
      • 1970-01-01
      • 2011-01-11
      • 2013-08-08
      • 2018-09-10
      • 1970-01-01
      • 1970-01-01
      • 2011-02-25
      相关资源
      最近更新 更多