我正在构建一个传统的Web应用程序,通过JDBC进行数据库CRUD操作。我想知道将JDBC操作放入Actor中,使其脱离当前请求处理线程是否好。我进行了一些搜索,但没有找到演示此功能的教程或示例应用程序。
那么这样做有什么利弊呢?这种异步操作是否能像NIO一样提高应用服务器(即并发处理请求)的容量?
所以我的猜测是,您不会看到与NIO相同的容量改进。
编辑:刚刚发现了 adbcj;这是一个异步数据库驱动程序API。这是一个为硕士论文编写的实验性项目,非常早期和实验性。这是一个有价值的实验,我希望它能成功。来看看吧!
但是,如果您正在构建一个基于Actor的异步系统,我非常喜欢将数据访问或存储库Actors作为对象,就像在分层OO架构中使用data access或repository对象一样。
演员保证消息一次处理,这非常适合访问单个JDBC连接。(需要注意的是:大多数连接池默认为每个线程分配一个连接,这不适用于演员。相反,您需要确保使用每个演员的连接。事务管理也是如此。)
这使您可以将数据库视为异步远程系统,这是我们一直应该以异步方式对待它的。这也意味着您的数据访问/存储库演员的结果是futures,这些结果是可组合的。这使得更容易协调数据访问和其他异步活动。
那么,这很好吗?如果符合您系统的整体架构,那么可能是好的。它会提高容量吗?这取决于您的整个系统,但听起来是一个非常值得尝试的实验。