将数据异步插入数据库有什么好处?

what are the benefits of inserting the data into the database asynchronously?

我正在学习一个叫做宠物店的经典应用程序,它使用 .net technology.In order 来处理订单数据,application.One 的作者提供了两个解决方案是将订单数据插入数据库是同步的,另一个是异步的,把订单数据放到一个消息队列中(MSMQ技术),然后用线程接收订单数据,最后插入数据到database.The 第一种方案很简单,另一个不是,我想知道什么时候采用异步模式,给应用带来什么好处?性能还是其他?

许多普通程序做两件事:

  1. 在图形用户界面中与用户交互
  2. 从数据库读取数据和向数据库写入数据。

数据库通常位于远程服务器上并且往返时间很长(超过 200-500 毫秒)

因此,此类程序的一个重要目标是保持 GUI 响应,即使数据库访问处于活动状态。这是通过异步数据库访问完成的。

请注意:虽然使用 MSMQ 和多线程的示例很适合学习东西,但如今使用更简单易用的 async/await 机制可以完成一些非常相似的事情。

只要同时尝试完成不止一件事,就会使用异步。

在基本服务或可能的控制台应用程序中,您可能想要进行数据库、文件或网络操作,并且通常您的代码必须等待其结果才能继续。这是一个明确的同步程序,其中异步不会改进任何东西,并且可能会以性能为代价增加复杂性。

另一方面,如果您可以在等待新请求完成的同时处理其他内容(可能是之前的请求结果),您可以在提出请求的停机期间让 cpu 工作。

在处理 UI 时,这比第一次出现时更常见。大多数本机 UI 技术将 运行 在与负责重绘 UI 的线程相同的线程上编码。这意味着单击按钮时,会将数据从数据库同步加载到应用程序中,这将阻塞用于重绘 UI 的线程。您可能会在编写糟糕的软件中看到这种情况,其中按钮保持按下状态。

另一种模式是并行编程。在幕后,许多线程通常执行相同的逻辑但使用不同的数据。这可以大大提高数据集的处理速度,但与您最初的问题有点偏离主题。

作为一般规则,如果它使用文件、数据库或网络等外部资源,或者如果您只是希望执行时间明显,请将其设为异步。