Mongodb 多公司网络应用策略

Mongodb strategy for Multi-Company web app

我正在用 Mongo 在 Meteor 中开发一个 Web 应用程序,它将 运行 在云上。每个用户必须属于一家公司。 每个公司只能访问自己的数据。 每个用户都可以访问自己的数据以及与同一公司的其他用户共享的一些数据。 想象一下 1.000 家公司和每个公司 100 个用户,如果我为整个应用程序使用 1 Mongodb 数据库,它的性能和安全性可能会变得非常糟糕。

所以,因为 Mongo 是 "Schema-less and Database-less" 我想我可以定义 1.000 dbs,假设 db_0001 db_0002, ... 具有相同名称的集合,比方说 tasks, messages, ..., 所以该应用程序可以高效且更安全(每个公司都使用相同的代码并隔离数据)。

另外,在托管端(比如 Digital Ocean),我认为如果 dbs 已经原子化,则更容易分发。

这是一个好方法吗?还是我不应该担心,让托管来完成这项工作?

任何想法都欢迎。

您目前只看到了硬币的一面。这很好开始。

考虑一下您将如何显示该数据以及它转换成什么查询。对所有潜在查询进行彻底的尽职调查。例如,user/getbyid 被调用的频率以及您必须多久向用户显示他们的信息以及他们与其他用户的关系。除了用户信息之外还需要哪些其他元数据,您是否必须执行连接才能获取该数据?还是存储为嵌入式文档?您将最常搜索和排序哪些字段?哪些类型的数据是重写的,哪些是重读的?

现在让我们回到您的数据库着色方法。很高兴您在这方面提前考虑,而不是以后必须重写您的组件。数据 volume/storage 在这里我不用担心。有多少并发用户将在应用程序中使用以及主要用例是什么应该是考虑规模时首先要考虑的地方。

此外,您需要了解业务和项目增长的性质。它像 Instragram 类型的超速增长吗?还是更可预测。一个大 Mongo 集群可以处理数千个并发 read/write 请求(假设您的设计和查询已优化),所以这不会打扰我。如果你想保持它的灵活性 MongoDB 有一个分片机制,你可以在一个键上分片,它会为你处理所有花哨的东西。

MongoDB 具有最终一致性(查找 MongoDB CAP 定理)如果您启用从辅助读取并且您有一个大容量业务关键应用程序,您需要小心,因为您可以读取过时的结果。

就托管而言,DO 很好,但总是在另一个区域有一个备份以保持地理冗余,所以如果一个区域出现故障(你好 AWS!)你有东西可以依靠。

祝你项目顺利!