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

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

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

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

【问题讨论】:

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

标签: javascript node.js asynchronous


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

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

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

          创建缓存文件

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

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

          库存数据库进程

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-10-15
            • 1970-01-01
            • 2021-11-28
            相关资源
            最近更新 更多