同步与异步数据库访问

时间:2012-02-19 22:46:09

标签: javascript node.js asynchronous

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

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

考虑到MySQL数据库一次处理一个查询,是否真的以异常快的速度编写这些调用?

5 个答案:

答案 0 :(得分:12)

除非最近Node.JS内的某些内容发生了巨大变化,否则您很可能会使用异步数据库访问权限进行扩展,因为 所有 您的用户请求将会执行在one single thread并同步等待数据库将真正降低您的性能。如果一个用户执行缓慢的操作,则所有其他用户将不得不等到完成。

Node.JS实际上是为异步事件驱动的流程而构建的,使用它可以获得更好的性能,而不是解决它。

答案 1 :(得分:4)

异步请求并不比同步请求快,无论你怎么做,它们仍然会做同样的事情。唯一改变的是你阻止请求。

当你使用同步方法时,使得请求将停止执行等待返回请求的方法,只有当它通过时它才会继续执行。虽然在使用异步请求时,没有必要等待请求完成,但您可以继续执行,一旦完成,将调用回调。

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

答案 2 :(得分:1)

数据库引擎的速度+传输时间两种方式都差不多。问题是异步调用不会阻止调用者。因此,异步拱是任何需要对其他输入高度响应的“实时”系统的方法。 (比如游戏应该总是对人类非常敏感。)

答案 3 :(得分:1)

查询将在MySQL的数据库级别排队。如果你能想到将Mongo DB用于某些数据,还有很多选择。

答案 4 :(得分:1)

像Nitzan一样,你必须知道“异步请求并不比同步请求快,不管你怎么做,他们仍然会做同样的事情。”

没有人谈过,但如果有很多用户和大量请求,您可以使用其他解决方案来限制数据库访问:

创建缓存文件

并根据用户操作或CRON任务更新它们。

  • 用户信息
  • 用户提醒
  • 用户操作
  • 用户广告资源 ...

库存数据库流程

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