.net - 这是一个关于 Cosmos Db 中的分区键的好策略吗?
问题描述
我想分离数据以便于 GDPR 管理等。所以我想为每个微服务使用一个带有 CosmosDb 的 MongoDb。所以 10 个微服务就是 10 个 MongoDb 数据库。
然后我需要多租户支持。所以我在想每个租户都可以在数据库中拥有自己的集合。(共享吞吐量)。
所以一项服务有一个数据库和许多集合。如果有 100 个客户,那就是 100 个集合。
但后来我想要一种方法来存储我的文档。所以我在想每种类型都可以是我的分区键。喜欢。“门”、“订单”、“用户”等...
在我为每个客户使用一个数据库之前,但成本是个问题。
我不想一起共享租户数据,这就是我考虑这种分离的原因。而且我可以轻松地让开发人员在系统中拥有自己的租户,这样他们就不会错误地查询其他租户的数据。
逻辑上这将起作用,技术上也是如此。但我不确定拥有这么多收藏品是否是一个好习惯。我找不到收藏数量的任何限制,但也许有一个?
GateServiceDb
3343-414-1441-141441 (Tenant collection)
Gate - Partion (Document type)
Entrence - Partion (Document type)
...
3252-532-252-141441 (Tenant collection)
Gate - Partion (Document type)
Entrence - Partion (Document type)
...
123-445-1441-141441 (Tenant collection)
Gate - Partion (Document type)
Entrence - Partion (Document type)
...
...
解决方案
概括地说,根据租户的规模,您可以选择按数据库或集合进行分区。在租户数据较小且租户数较高的情况下,我们建议您将多个租户的数据存储在同一个集合中,以减少应用程序所需的整体资源。您可以通过文档中的属性识别您的租户,并发出过滤器查询以检索特定于租户的数据。您还可以使用 DocumentDB 的用户和权限来隔离租户数据并通过授权密钥在资源级别限制访问。
在租户较大、需要专用资源或需要进一步隔离的情况下 - 您可以为租户分配专用集合或数据库。在任何一种情况下,当您横向扩展应用程序的数据存储时,DocumentDB 都会为您处理大部分的操作负担。
所以回到你原来的问题,一个服务有一个数据库和许多集合,
您是否知道您的应用程序和数据是否足够大以至于您想为每个微服务分离一个数据库,或者它会像每个微服务一个集合一样工作?
您的其他问题“我找不到收藏数量的任何限制” :
您可能已经知道,集合是 JSON 文档的容器。集合也是 DocumentDB 用于执行查询和事务的分区和边界单元。每个集合都提供预留量的吞吐量。您可以在存储和吞吐量方面扩展您的应用程序,方法是添加更多集合并在它们之间分发您的文档。
Azure Cosmos DB 的存储限制是什么?
容器可以存储在 Azure Cosmos DB 中的数据总量没有限制。
Azure Cosmos DB 的吞吐量限制是多少?
Azure Cosmos DB 中容器可以支持的总吞吐量没有限制。关键思想是将工作负载大致均匀地分布在足够多的分区键中。
推荐阅读
- java - 如何使用 ICU java API 进行编码
- java - 为什么hibernate试图通过代理名称获取类以从jar加载类?
- python - 在python中进行线程处理时的面向对象比较的问题
- angularjs - Angular 指令无法解决承诺
- r - ggplot2中的5个值unicode字符
- app-store - 我的应用程序被拒绝..我如何上传新的二进制文件(IOS)
- javascript - svgelement.enter() 上未发生 D3 转换
- android - 动态设置工作请求顺序
- google-api - 使用测试经理帐户将第三方应用分析链接到 Google Ads 时,未从测试客户帐户获取 Google Ad 字词链接 ID
- javascript - Axios 在嵌套的 Vue JS (Laravel API) 中返回 undefined