Javascript NodeJS:使用内存缓存提高性能,使用存储实现持久性

Javascript NodeJS:使用内存缓存提高性能,使用存储实现持久性,javascript,node.js,Javascript,Node.js,我想知道我的以下方法是否合理,或者是否有我遗漏的缺陷: 问题是:SQL查询速度很慢。内存缓存不是持久的 我的想法是在以下事项中编写我的nodejs流程: 初始化 从sql db获取当前状态并保留在变量中 对变量运行所有请求查询 更新并更改变量,然后更新sql 仅在sql成功更新后响应 通过这种方法,我将完全避免SQL在多个表上运行复杂查询,并且可以使用id作为对象键轻松有效地检查内容 由于NodeJS是单线程的,我甚至拥有高效的“事务”功能,因为内存变量的更新将以原子方式进行 尽管这种方法不允许

我想知道我的以下方法是否合理,或者是否有我遗漏的缺陷:

问题是:SQL查询速度很慢。内存缓存不是持久的

我的想法是在以下事项中编写我的nodejs流程:

  • 初始化
  • 从sql db获取当前状态并保留在变量中
  • 对变量运行所有请求查询
  • 更新并更改变量,然后更新sql
  • 仅在sql成功更新后响应
  • 通过这种方法,我将完全避免SQL在多个表上运行复杂查询,并且可以使用id作为对象键轻松有效地检查内容

    由于NodeJS是单线程的,我甚至拥有高效的“事务”功能,因为内存变量的更新将以原子方式进行

    尽管这种方法不允许横向扩展,但我觉得它足以满足我的大多数项目


    是否有一些我遗漏的基本缺陷?

    我会想到的事情:

  • 您的内存限制:您计划在这些变量中保存多少数据?随着时间的推移,这些数据会变得更大吗?如果是,如何管理可用内存

  • 如果您执行复杂的“查询”,那么就不会有索引(B树)的SQL优势。因此,您的查询必须是简单的查找。对于更复杂的查询,您可以考虑数据的临时/内存中表。在SQLite中,您可以使用:
    rc=sqlite3\u open(“:memory:”,&db)()

  • 我会利用nodes-child\u-process特性使新机制远离主线程()


  • 问自己一些问题:一些数据丢失可以吗?(即在录音中丢弃帧)。在有限的时间内提供过时的数据可以吗?为了性能,您能承受多少混乱的体系结构?(如果SQL很慢,为什么不买一台更快的服务器?或者一台有更多缓存的服务器)你说的“内存中的缓存不是持久的”是什么意思?@Bergi如果服务器崩溃,数据就会消失。通过将数据存储到sql并在初始化后获取数据,我的应用程序将在服务器崩溃后生存。这是一个基本缺陷:您基本上说过要在node.js中实现自己的数据库引擎。这可能有什么问题?@ThatBrianDude这就是为什么它被称为“内存缓存”,而不是“内存持久存储”。缓存已经完全实现了您所描述的功能,那么为什么要重新实现它呢。内存限制不会有问题。我目前的项目将是一个游戏匹配服务器,因此数据将是用户和活动游戏(垂直缩放始终是一个选项)。2.如前所述,我可能不需要任何复杂的查询,只需要简单的查找。3.这会带来什么改进?关于第三点。当您的应用程序随着时间的推移而增长时(例如,更多的用户加入您的服务),它将赋予您更大的灵活性。另外,当您以后想要实现需要更复杂数据查找的功能时,会发生什么情况?如果您选择使用第二个线程进行数据获取操作,则某些用户的响应时间会增加,但您的应用程序不会因所有连接的用户而停止。我认为子进程将从主进程访问数据?我理解。我会调查的