标签: azure-cosmosdb

使用 LINQ 的 AsParallel() 并行运行异步函数

我有一个文档数据库存储库类,它有一个 get 方法,如下所示:

private static DocumentClient client;
public async Task<TEntity> Get(string id, string partitionKey = null)
{
    try
    {
        RequestOptions requestOptions = null;
        if (partitionKey != null)
        {
            requestOptions = new RequestOptions { PartitionKey = new PartitionKey(partitionKey) };
        }

        var result = await client.ReadDocumentAsync(
            UriFactory.CreateDocumentUri(DatabaseId, CollectionId, id),
            requestOptions);
        return (TEntity)(dynamic)result.Resource;
    }
    catch (DocumentClientException e)
    {
        // Have logic for different exceptions actually
        throw;
    }
}
Run Code Online (Sandbox Code Playgroud)

我有两个集合 - Collection1 和 Collection2。Collection1 未分区,而 Collection2 已分区。

在客户端,我创建两个存储库对象,每个集合一个。

private static DocumentDBRepository<Collection1Item> collection1Repository = new …
Run Code Online (Sandbox Code Playgroud)

async-await azure-cosmosdb

5
推荐指数
1
解决办法
3868
查看次数

在 CosmosDb 上的 Linq.Where() 内使用 Linq.Any()

我试图.Any()在子句中嵌套一个.Where()子句来查询本地 CosmosDb 模拟器。

代码如下所示;其中permittedStundentIds是变量 ( List<long>) 且是CosmosDb 中的aaDocument

.Where(a => permittedStudentIds.Any(sId => a.Students.Any(s => s.Id == sId)));
Run Code Online (Sandbox Code Playgroud)

当我执行查询时,出现错误:

不支持“任意”方法。ActivityId:800000a8-0002-d600-b63f-84710c7967bb,文档db-dotnet-sdk/1.22.0主机/64位MicrosoftWindowsNT/10.0.16299.0

我尝试了多种变体来获得等效的表达式,但无济于事。唯一有效的方法是使用 a.Contains()并对学生索引进行硬编码;这是不可行的,因为学生的人数可能不知道。

.Where(a => permittedStudentIds.Contains(a.Students[0].Id));
Run Code Online (Sandbox Code Playgroud)

我确实了解 CosmosDb 的 Sql API 尚不支持某些 lambda 扩展,但是有解决方法吗?

c# linq azure-cosmosdb azure-cosmosdb-sqlapi

5
推荐指数
1
解决办法
5349
查看次数

Azure Cosmos DB (SQL API) 中非常简单的查询的高请求费用

在 Azure Cosmos DB (SQL API) 中,以下查询收费9356.66 RU

SELECT * FROM Core c WHERE c.id = @id -- @id is a GUID
Run Code Online (Sandbox Code Playgroud)

相比之下,以下更复杂的查询仅收费6.84 RU

SELECT TOP 10 * FROM Core c WHERE c.type = "Agent"
Run Code Online (Sandbox Code Playgroud)

这两个示例中的文档都非常小,但具有一些属性。此外,文档集合不使用任何自定义索引策略。该集合包含 105685 份文档。

对我来说,这听起来好像“id”字段上没有正常工作的索引。

这怎么可能以及如何解决?

更新:

  • 如果没有 TOP 关键字,第二个查询将收取 3516.35 RU 并返回 100000 条记录。
  • 分区键是“/partition”,其值为0或1(均匀分布)。

database-performance azure-cosmosdb azure-cosmosdb-sqlapi

5
推荐指数
1
解决办法
2231
查看次数

在 Cosmos DB 中创建数据库/集合是否需要花费一些费用?

  • 每次在 Cosmos DB (SQL API) 中删除/重新创建数据库时都会产生费用吗?
  • 每次在 Cosmos DB (SQL API) 的数据库中删除/重新创建集合时是否会产生任何费用?

azure-cosmosdb

5
推荐指数
1
解决办法
1424
查看次数

Cosmo ChangeFeed - 错误、异常和服务失败场景

全部,

我正在使用更改源处理器库。想知道处理服务故障以及 ProcessChangesAsync 方法中的异常/错误场景的最佳方法。以下是我所指的事件。

1) 服务失败 - 具有处理器库的服务在某些操作过程中崩溃。如何从同一文档(失败实例上的文档)启动该流程?是否有任何内置机制可以使更改源从最后一个失败的文档开始?例如,假设,在当前批次中,我们成功处理了 10 个 docs.5,然后由于网络故障或其他原因导致服务中断。一旦服务重新启动,我的流程会从第 6 个文档开始吗?如何实现这一目标?

2) 异常和错误- ProcessChangesAsync 方法中的任何错误都可以在全局级别使用 try catch 进行处理,但如何保留这些失败记录并使它们可用于下一批?再次,在变更提要过程中寻找任何可用的内置机制。

azure-cosmosdb

5
推荐指数
1
解决办法
944
查看次数

如何 for 循环集合中的所有文档 - Azure CosmosDB - Nodejs

我已经查看了有关此问题的一些答案/问题,但尚未找到解决方案。

我有一个包含文档(简化)的集合,如下所示:

{
    "id": 123
    "stuff": "abc"
    "array":[
        {
        "id2":456
        "properties": [
                {
                    "id3": 789
                    "important": true
                }
            ]
        }
    ]
} 
Run Code Online (Sandbox Code Playgroud)

我想检查for我的集合中的每个文档,for每个array对象arrayfor每个对象properties,如果有的important: true话。然后返回:

"id": 123
"id2": 456
"id3": 789
Run Code Online (Sandbox Code Playgroud)

我尝试过使用:

client.queryDocuments(self.collection._self, querySpec).toArray(function(err, results) {
    if (err) {
        callback(err);
    } else {
        callback(null, results[0]);
    }
    });
Run Code Online (Sandbox Code Playgroud)

但问题是数组有最大字符数限制。如果我的收藏有数百万份文档,这可能会超出。(Javascript增加最大数组大小

或者,我误解了上面的问题吗?它是在谈论数组中的对象数量(其中每个对象可以具有无限的对象字符长度吗?)

因此,我正在寻找一个for loop类似的解决方案,其中返回每个文档,我进行分析,然后移动到下一个/并行执行它们。

任何见解将不胜感激。

arrays for-loop azure node.js azure-cosmosdb

5
推荐指数
1
解决办法
4162
查看次数

Cosmos DB 数据应该如何构建

我目前正在与一个开发团队合作,将 CosmosDB 实现为后端存储,我对它的实际用途有一些疑问。

我知道这些文档应该是扁平结构的,但这到底是什么意思?

当数据确实是相关的并且彼此非常依赖时,这种设计是否正确,或者 SQL 数据库是否更适合?

零售产品

{
    "RetailProductId": "123",
    "FriendlyName": "TestRetailProduct",
    "WholeSaleProductId": "100"
}
Run Code Online (Sandbox Code Playgroud)

批发产品

{
    "WholeSaleProductId": "100",
    "ProviderID": "112233445566",
    "PhysicalItemsIds": ["1000", "2000", "3000"]
}
Run Code Online (Sandbox Code Playgroud)

提供者

{
    "ProviderId": "112233445566",
    "Description": "ProviderA"
}
Run Code Online (Sandbox Code Playgroud)

RetailProduct 或 WholeSaleProduct 还链接了更多文档,但这只是为了提供概述。

像这样存储数据,被认为是像 CosmosDB 这样的数据库的良好实践

database azure azure-cosmosdb

5
推荐指数
1
解决办法
2061
查看次数

从 CosmosDB 中的不同分区查询文档的建议方法是什么?

当使用 Azure Cosmos DB 并查询一个分区时,我只需在 FeedOptions 中指定分区键。但是当我必须查询 n 个分区时,我有(据我所知)2 个选项:

  1. 为每个分区运行单独的任务并将结果合并到我的应用程序代码中
  2. 在 FeedOoptions 中设置标志“EnableCrossPartitionQuery”(以及 MaxDegreeOfParallelism)并限制查询中的分区。

当我必须对整个结果集(跨所有分区)应用排序标准和分页时,我认为第一种方法将达到其极限。

使用 .NET SQL API 在 Cosmos DB 中跨多个分区进行查询的推荐方法是什么?

paging partitioning azure-cosmosdb azure-cosmosdb-sqlapi

5
推荐指数
1
解决办法
3166
查看次数

Cosmos DB 命名约定

我一直在浏览不同的示例和帖子,但找不到任何推荐的命名约定。当我查看文档时,我可以看到标准属性(id、ts ..)是小写的。然而,C# 的命名约定是属性为大写。这里推荐的方法是什么,您是否将所有内容都小写/大写,或者仅在 Cosmos DB 中使用小写属性,而不是在 C# 模型中使用小写属性或 .. ?这里有什么指导方针吗?

azure-cosmosdb

5
推荐指数
1
解决办法
6420
查看次数

CosmosDb 防火墙、Azure IP 地址

我正在尝试使用 Arm 模板中的防火墙来保护我的 Cosmos 数据库帐户。我已使用门户来了解应如何编辑模板。

在门户中,我选择了复选框“接受来自公共 Azure 数据中心的连接”和“允许从 Azure 门户访问”。这会将以下 IP 地址添加到 ipRangeFilter 属性。

104.42.195.92
40.76.54.131
52.176.6.30
52.169.50.45
52.187.184.26
0.0.0.0
Run Code Online (Sandbox Code Playgroud)

我可以在arm模板中硬编码这些IP吗?或者它们将来会改变吗?除了 0.0.0.0 之外,我怀疑它们会改变。如果是的话,如何在不访问门户的情况下自动将这些IP添加到防火墙白名单中?

谢谢

azure azure-resource-manager azure-rm-template azure-cosmosdb

5
推荐指数
1
解决办法
5951
查看次数