Java NIO 与 sql 数据库

Java NIO with sql database

我正在使用 Java NIO 编写服务器,它将从客户端接收数据(例如位置)并将数据存储到使用 Microsoft SQL Server 2012 的数据库中。

我知道对数据库的调用是阻塞的,因此在主 NIO 线程中编写代码将扼杀 NIO 的所有优势。

那么我该如何进行呢?

处理数据库请求的另一个线程,但我将如何向该线程发送请求以及它将如何存储它们(队列?)?

编辑:如果有人建议使用异步数据库,请告诉哪一个有很好的文档并且受 java 和 Microsoft SQL 服务器支持。

最好会喜欢用JDBC.

任何帮助将不胜感激。

如果您想将信息的接收与数据库中的存储分离,那么队列是正常的方法。

请注意,您真正要做的就是缩短响应时间(减少延迟)并添加缓冲输入的功能以消除请求负载中的峰值。您可以将数据传输到数据库的实际速率(吞吐量)将是相同的。

您可以使用 java.util.concurrent 中的 Java BlockingQueue 实现之一。这些是线程安全的。

但是,如果您的系统出现故障,您将丢失队列中的所有请求。如果这不可接受,您将需要使用为您提供持久队列的 JMS 实现,但您可能会发现写入队列与写入数据库一样慢。

不过,我会首先验证您是否真的需要这种解耦。数据库通常非常快。您可以尝试降低提交频率,但同样存在数据丢失或不一致的风险。