同步与异步数据库访问

Posted

技术标签:

【中文标题】同步与异步数据库访问【英文标题】:Synchronous vs. asynchronous database access 【发布时间】:2012-03-10 08:59:41 【问题描述】:

我想开发一个可能包含数千个函数和数据库调用的复杂游戏。

我想知道是否真的有必要异步执行我的数据库查询。编写代码很痛苦,我的所有函数都需要使用回调而不是干净的return 方法。这是正常的做法吗?

考虑到 mysql 数据库一次处理一个查询,异步编码这些调用真的快得多吗?

【问题讨论】:

"MySQL 数据库一次处理一个查询" - 每个连接。 Mysql 为每个连接生成新线程,连接数至少与 mysql 盒上的内核数一样多,应该会提高性能。 如果您不了解异步编程的优点,为什么还要考虑 node.js?请确保您不是没有正当理由的粉丝,请看视频youtube.ug/watch?v=bzkRVzciAZg 【参考方案1】:

除非最近 Node.JS 发生了巨大变化,否则您几乎不得不使用异步数据库访问来很好地扩展,因为所有您的用户请求都将在 @ 上执行987654322@ 并同步等待数据库确实会降低您的性能。如果一个用户的操作很慢,所有其他用户都必须等到它完成。

Node.JS 确实是为异步事件驱动的流程而构建的,使用它会比使用它获得更好的性能。

【讨论】:

【参考方案2】:

异步请求并不比同步请求快,无论您如何执行它们,它们仍然会执行相同的操作。唯一改变的是您是否阻止请求。

当您使用同步时,发出请求的方法将停止执行,等待请求返回,只有当请求返回时,它才会继续执行。虽然使用异步请求时,不需要等待请求完成,你可以继续,当它完成时,回调将被调用。

另一件事是,当应用程序对 dbms 进行大量调用时,通常数据库是瓶颈,因此您可能需要考虑使用 come 类型的缓存来减少来自 dbms 的负载。

【讨论】:

【参考方案3】:

无论哪种方式,数据库引擎的速度 + 传输时间都几乎相同。问题是异步调用不会阻塞调用者。因此,异步架构是任何需要对其他输入高度响应的“实时”系统的方式。 (例如应该始终对人类非常敏感的游戏。)

【讨论】:

【参考方案4】:

查询将在 MySQL 的数据库级别排队。如果您可以考虑将 Mongo DB 用于您的某些数据,还有更多选择。

【讨论】:

【参考方案5】:

像 Nitzan 一样,您必须知道“异步请求并不比同步请求快,无论您如何执行它们,它们仍然会执行相同的操作。”

没有人谈论,但是如果有很多用户和很多请求,你还有其他解决方案来限制数据库访问:

创建缓存文件

并通过用户操作或 CRON 任务更新它们。

用户信息 用户提醒 用户操作 用户库存 ...

库存数据库进程

对于一些经常性的请求,您可以将它们存储在 MySQL 中。 这些将比用户请求更快地执行。

【讨论】:

以上是关于同步与异步数据库访问的主要内容,如果未能解决你的问题,请参考以下文章

什么是线程同步,什么是线程异步?同步的好处与弊端

:Linux设备驱动中的异步通知与同步I/O

java中的同步与异步

同步与异步到底是什么???

10张图教你同步与异步(转载)

HTTP请求中同步与异步有啥不同