架构:多个 Mongo 数据库+连接 vs 使用 Express 的多个集合
Posted
技术标签:
【中文标题】架构:多个 Mongo 数据库+连接 vs 使用 Express 的多个集合【英文标题】:Architecture: Multiple Mongo databases+connections vs multiple collections with Express 【发布时间】:2015-08-23 07:32:51 【问题描述】:我正在构建一个应用程序,用于在 Mongo DB 中存储多个不同客户的敏感数据。每个客户(电子邮件、联系人、会议)的数据模型都是相同的。所有客户端使用相同的 API 和相同的 Express 服务器访问数据。我已经阅读了很多关于使用一个大型集合、多个集合和多个数据库的信息:
Mongoose and multiple database in single node.js project
MongoDB performance - having multiple databases
我喜欢每个客户端使用一个数据库的想法,因为它的安全性和简单的数据隔离。我这样想对吗?
同样在这种情况下,我有点担心在 Express 中管理数据库连接。
我了解连接只应建立一次(例如在启动服务器时),然后保持活动状态。因此,使用多个数据库意味着 Express 会打开多个连接并让它们保持活动状态,未来可能会有数十个或数百个。此外,每次调用 api 时,控制器都应该能够选择从哪个数据库连接进行查询。
值得麻烦吗?
【问题讨论】:
当你说单独的数据库时,你是指单独的mongo实例,还是mongo中的单独数据库。如果您想将每个客户端的数据分开,后者对我来说似乎比前者更合适。 【参考方案1】:对于像这样的多租户应用程序,我建议将类似的数据存储在所有租户的单个集合中,其中包含某种类型的tenant_id 字段,然后确保所有查询都有正确的选择器。
如果您使用多个集合,或者更糟糕的是,多个数据库,它的可扩展性不会太大。如果您只有少数客户并且不打算拥有数百个或更多客户,那么多收集或多数据库方法可能是可行的。不过估计会很痛Mongo 将为每个集合分配大量磁盘空间,额外的连接将占用更多内存等,对性能的影响不容忽视。
【讨论】:
以上是关于架构:多个 Mongo 数据库+连接 vs 使用 Express 的多个集合的主要内容,如果未能解决你的问题,请参考以下文章
Mongo change-Stream with Spring resumeAt vs startAfter 以及连接丢失时的容错
使用Mongoose(ORM)将多个应用程序与一个mongo数据库连接
spring-data-mongodb 在一个 Mongo 实例中连接多个数据库
MongoTypeConversionException:即使显式架构不包含 NullTypes,也无法使用 Mongo Spark 连接器将 STRING 转换为 NullType