【发布时间】:2018-07-13 18:36:11
【问题描述】:
在现实世界的网络应用程序中,如何为多个客户/公司/客户存储数据?
假设我们有一个客户的以下集合:
- users
- tasks
如何将此系统扩展到第二个客户?有标准方法吗?
注意:我使用的是 Firestore (no-sql)。
【问题讨论】:
标签: database angular database-design web-applications google-cloud-firestore
在现实世界的网络应用程序中,如何为多个客户/公司/客户存储数据?
假设我们有一个客户的以下集合:
- users
- tasks
如何将此系统扩展到第二个客户?有标准方法吗?
注意:我使用的是 Firestore (no-sql)。
【问题讨论】:
标签: database angular database-design web-applications google-cloud-firestore
我们为每个客户使用一组单独的集合。我们的数据结构非常适合我们,看起来像这样......
/clients/{clientId}/reportingData
/clients/{clientId}/billingData
/clients/{clientId}/privateData
使用安全规则,我们允许客户读取他们的 reportingData 和 billingData 集合,但不能读取 privateData 集合。
但是,如果您需要同时跨多个客户端查询数据(例如供内部使用),那么使用 clientId 字段的 Frank 的选项 1 会更好。
我们对用户做同样的事情......
/users/{uid}/publicProfile(任何人都可以读,只有用户可以写)
/users/{uid}/userProfile(只有用户可以读写)
/users/{uid}/privateProfile(用户无法读写的内部数据)
【讨论】:
clients 集合时,Cloud Firestore 将仅返回 5 个文档。除非您单独单独请求,否则它不会返回任何子集合。
在 Cloud Firestore 上实施此类多租户解决方案有多种选择:
没有哪种方法可以更好或更差。
我建议您至少考虑为每个客户制定一个单独的项目。将客户端彼此隔离,使维护和(可能在未来)计费变得更加容易。
将所有客户端放在一组集合中也是可能的。您只需要确保客户端无法看到彼此的数据。由于您可能直接从客户端访问数据库,use security rules to ensure that clients can only access their own data。
【讨论】: