我正在开发一个高性能实时应用程序,以 Node.js 和 mysql 作为后端。
为了提高性能,我有一个单独的node.js进程更新底层mysql bd。更新请求排队以保证顺序执行(必须)。
我正在考虑在此过程中保持永久打开的数据库连接,以免在每个请求上打开它时浪费时间。
其他数据库请求(更新或读取)直接由 Web 服务器 Node-js 实例提供,可能是并行的。当然,这些数据库连接是在每个请求中创建/释放的。
您看到这种方法的一些缺点吗?
更新:
重要的附加信息。我选择这个独立的流程解决方案主要是因为以下原因......
每次更新之前必须执行的逻辑相对复杂,并且取决于数据库中的数据结构。每次更新之前都需要进行一些额外的查询。这个独立的进程在内存中具有完整的数据结构,可以非常快速地执行这些检查,并且无需访问数据库(性能提升)。
你的方法的另一个缺点。
MySQL 因基于超时而关闭长时间打开的连接而臭名昭著。
@duffymo 是正确的:使用池中的短期连接比长期打开的连接更有可能持续工作数百小时。
我纳闷:你说顺序执行是必须的。大型 DBMS(包括大型服务器上的 MySQL)非常有能力处理来自多个连接的并发查询,而不会损坏数据。如果您能够准确地计算出更新顺序的强制要求,您的系统可能会更加强大。如果您可以在 SQL 本身或可能在某些事务中实现该排序,那么您将拥有一个比坚持只有一个进程执行更新更能抵抗故障的系统。像您提到的那样的单一用途进程在系统测试中不容易调试:它们因各种原因在数百小时后失败而臭名昭著。当它们在生产中出现故障时,每个人都在争先恐后地修复它们,因此没有人有时间对其进行故障排除。