database - 将 MongoDB 用于多租户应用程序
问题描述
如何在多租户环境中使用 MongoDB?我所说的多租户是指多个组织应用程序使用的一个 MongoDB 实例。
因此,我们可以让 App A、App B 和 App C 使用同一个 MongoDB 实例,并且每个应用程序都彼此隔离,这意味着,例如,App A 的“用户”集合不能被 App B 访问,反之亦然反之亦然。
MongoDB 似乎没有可用于为每个应用程序分配的“命名空间”概念。
解决方案
您可以拥有基于角色的访问控制,并且可以控制允许哪个用户对每个资源执行什么操作。
从您的问题来看,您似乎对集合级别控制感兴趣。请参考这个。请确保您正在查看适用于 MongoDB 的正确版本。
因此,您最终会为每个租户获得不同的凭据。
警告; 在这个设计中,你不能扼杀嘈杂的邻居。
例如,用户定义的角色可以包含以下权限:
privileges: [ { resource: { db: "products", collection: "inventory" }, actions: [ "find", "update", "insert" ] }, { resource: { db: "products", collection: "orders" }, actions: [ "find" ] } ]
另一种选择是为每个租户创建单独的数据库。但这会增加您的管理(CI/CD/DevOps)成本。例如。必须对每个租户应用索引的更改。您需要确保正确应用更改。
这取决于有多少租户。对于少数人来说是可以的。
对于大量数据,最好是纯 SaaS,并将tenantId 作为您存储、检索、删除等的每个文档的一部分。
推荐阅读
- python - 按正则表达式和标签组合的 Pandas 过滤器
- mxnet - 在 mxnet 符号嵌入层中使用 FastText 训练的嵌入
- amazon-web-services - JupyterHub 或 Helm 中的秘密存储?(在 AWS EKS 上的 Kubernetes 上运行)
- php - Woocommerce + WCMP 列出每个供应商的所有订阅数据
- javascript - 如何从 VueJS 中接收到的数据中分配数据?
- go - 如何安装插件
- javascript - 如何在换行符处自定义插入的 contentEditable div?
- gdb - 将 gdb args 与 argc/argv 链接
- detox - 排毒和反应 <-> WebView 交互
- c# - 如何解决“调用的目标已引发运行时错误异常”我是否缺少 DLL 文件?