您如何为 MySQL X DevAPI 使用 Java 连接池?

Posted

技术标签:

【中文标题】您如何为 MySQL X DevAPI 使用 Java 连接池?【英文标题】:How do you use Java connection pooling for MySQL X DevAPI? 【发布时间】: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 在幕后多路复用或其他什么?

【问题讨论】:

【参考方案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 使用情况。

【讨论】:

以上是关于您如何为 MySQL X DevAPI 使用 Java 连接池?的主要内容,如果未能解决你的问题,请参考以下文章

运行任意 SQL 命令 MySQL C++ (X DevAPI)?

使用 X DevAPI 搜索嵌套数组

如何在 Mysql X DevAPI 中查询 Null 或 Missing 字段?

PHP MySQL X DevAPI Collection::existsInDatabase() 方法无法识别带有附加列的集合

您如何为 ORM 的分页定义中继连接?

您如何为代码签名的 Dotnet 程序集添加时间戳?