Nodejs 和 Mysql 的成就 - 性能和可扩展性

Posted

技术标签:

【中文标题】Nodejs 和 Mysql 的成就 - 性能和可扩展性【英文标题】:Nodejs and Mysql for Achievements - Performance and scalability 【发布时间】:2019-09-05 16:36:25 【问题描述】:

简介

我正在设置一个 Nodejs 服务器(带有 socket.io),它将处理用户的成就并将它们存储在我的 mysql 数据库中。

问题

每次用户重新加载页面时,Socket io 都会生成一个新的唯一“socket id”,这意味着我要么必须将成就数据存储在 Node 服务器上,要么在每次页面重新加载时再次获取它。

我的问题

    我应该将成就数据存储在我的服务器上 - 还是应该在每次用户需要时获取它?

明智的表现 - 想法

我的头脑告诉我将成就数据存储在节点服务器上 - 因为简单的页面重新加载会导致我的服务器再次获取信息。

【问题讨论】:

欢迎来到 Stack Overflow!请拿起tour(你得到一个徽章!),环顾四周,通读help center,特别是How do I ask a good question?What types of questions should I avoid asking?What topics can I ask about here?这是 对 SO 的问答形式进行广泛(在某些情况下,基于意见)。 这个问题不应该被关闭。我有一个比他建议的更好的有效解决方案 【参考方案1】:

解决您的问题:

    生成 uuid 客户端并将其存储为 cookie 并将其存储在 localStorage 作为备份。 在页面加载时检查 uuid。如果不存在,则生成它。 连接时将 uuid 发送到 socket.io。 服务器端,使用 uuid 存储和检索成就。您可以选择任何您喜欢的方式来存储这些数据。平面文件,关系数据库,无论你喜欢什么。您甚至可以将其作为对象存储在内存中,以uuid 为键,并定期将对象序列化并存储为 json 文件,这样在崩溃时您可以将 json 文件重新加载为服务器的“状态”。

希望这里的内容足以让您了解解决问题的好方法。

【讨论】:

以上是关于Nodejs 和 Mysql 的成就 - 性能和可扩展性的主要内容,如果未能解决你的问题,请参考以下文章

性能问题(Nginx,NodeJs,Mysql)

成就/徽章系统

Nacos 企业版如何提升读写性能和可观测性

使用 SQLite、imageView 和可回收的 RecyclerView 性能 = false

golang配制高性能sql.DB

如何将 nodeJS 集群与 mySQL 池集群一起使用?