首页 > 解决方案 > 如何正确使用 CosmosDb 处理大于 2 Mb 的文档

问题描述

我使用 Azure CosmosDb 作为我的应用程序的数据库。

假设我需要将所有国家、城市和街道保存在我的数据库中。所以,我会有一个看起来像这样的项目:

{
    country: Brazil,
    size: 1000,
    population: 200000,
    cities: [
        {
            city: Rio
            population: 8000
            streets: [
                {
                    name: A,
                    postalCode: 12345
                },
                {
                    name: B,
                    postalCode: 34567
                }
            ],
            ...

然而,当我谈论所有国家和城市和街道时,这变成了一个巨大的项目,比 cosmosDb 允许的 2Mb 还大。

那么,处理这个问题的正确方法是什么?我应该将不同集合中的城市和街道分开吗?但是,使用不同的集合有很多缺点,因为在更新两个不同的集合时无法使用存储过程或保证事务。

标签: azuretransactionsnosqlazure-cosmosdb

解决方案


你能解释一下为什么你需要一个巨大的文档中的所有内容吗?为什么你需要交易来更新这些数据?

更好的方法是使用多个单独的文档,所有文档都存储在一个集合中以便于管理。

在每个文档中使用一个字段来描述它的级别(国家、城市、邮编),然后在该文档中存储该级别的所有必要信息。您可能可以使用国家/地区作为分区键,因为它可能适合 10GB/分区限制。


推荐阅读