【问题标题】:Async DB write without using thread不使用线程的异步数据库写入
【发布时间】:2017-11-10 07:47:16
【问题描述】:

在我当前的项目中,如果需要在 db 中异步写入某些内容(以记录一些数据),我们正在使用线程池执行器。 由于它只是一个 IO 操作,而不是为每个写入调用使用线程,我们可以拥有类似于事件驱动机制的东西。 单个线程将在 while 循环中运行并将进行异步数据库调用。类似于 java NIO 用于网络调用。

【问题讨论】:

    标签: java multithreading events asynchronous nio


    【解决方案1】:

    【讨论】:

      【解决方案2】:

      不,无论您做什么,都至少需要一个线程。如果您确实有driver that uses NIO,您仍然会有一个运行select() 的额外线程。

      我不确定您是如何在当前项目中实现它的,但即使使用执行器(如建议的那样,SingleThreadExecutor 就足够了),它也不应该很复杂。

      【讨论】:

      • 在这种情况下,语句(更新)是否只会按顺序运行?慢语句会影响其他语句吗?即使数据库可以并行处理它们,N 条语句每条执行都需要 N*t 吗?与同时尝试多个请求相比,更新队列的增长速度会更快?
      • 我假设插入日志语句不会是一项昂贵的操作(如果是,那么您应该调整数据库,而不是 Java 代码)。即使那样,并行化也不会很有帮助,因为它们使用的是同一张表。更有效的是进行批处理。这个问题并没有真正提供太多信息。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-28
      • 1970-01-01
      • 2020-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多