我们的项目存在架构问题。一旦我们需要部分服务几乎无限的可伸缩性,该项目就需要分片。 目前,我们使用Node.js + MongoDb(猫鼬)和MySQL(TypeORM)。数据通过简单的“数据库定位器”由数据库分开。因此,节点进程需要连接到许多数据库(最多1000个)。
请求示例:
我们尝试了两种实现方式:
哪种方法更好?如何避免描述的问题?也许有更好的解决方案? 解决方案#1在php上非常适合我们,因为它可以按要求运行单个进程,并可以在进程结束时轻松删除连接。众所周知,Express是运行在v8中的纯JS代码,不是基于进程的。 自动关闭不使用的连接非常好,但是找不到用于执行此操作的选项。
答案 0 :(得分:1)
简短答案:停止将MongoDB与Mongoose一起使用
更长的答案:
MongoDB是面向文档的DBMS。基本用法是当您需要存储一些不太漂亮的结构化数据时,而又不需要使用太多。 RDBMS具有懒惰的索引编制,动态类型输入和许多其他不允许您使用的功能,但是它非常适合存储日志或任何序列化的数据。
这里最有价值的部分是猫鼬。这是一个使您感觉像垃圾箱是一个美好的世界的库,其中包含关系,虚拟字段以及许多不应该包含在DODBMS中的东西。另外,以前版本中有很多旧代码,这也给连接管理带来了麻烦。
您已经使用TypeORM,但可以使用Mongoose,但有一些限制。 它的工作方式与MySQL连接管理完全相同。
还有更多数据:https://github.com/typeorm/typeorm/blob/master/docs/mongodb.md#defining-entities-and-columns
在这种情况下,您可以将TypeORM存储库用作透明客户端,它将初始化连接并关闭连接或根据需要保持活动状态。