标签: azure-cosmosdb

为什么不总是使用 EnableCrossPartitionQuery

如果我的 cosmos DB 有多个分区,是否有任何理由不设置EnableCrossPartitionQuerytrue

我知道如果运行可能会命中多个分区的查询,这是必要的。但是,如果查询使用有效的分区键并且肯定只会命中一个分区,是否会因为我将该标志设置为 true 而导致性能损失或增加成本?

azure-cosmosdb

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

从 Function 应用访问虚拟网络中的 Cosmos DB

对这么长的帖子表示歉意,但我已经在这个问题上工作了几天,但似乎找不到解决方案。

情况

我想通过将 Azure 中的 Cosmos DB 放置在虚拟网络 (VNet) 中来限制对它的访问,并且只允许通过 Function 应用进行访问。

方法

第一部分很简单:创建 Cosmos DB 和 VNet,并按照此处所述配置数据库的服务终结点。

将 Function 应用连接到 VNet 可以通过两种方式完成。

使用网关

按照指南,我已使用网关子网配置我的 VNet,并按所述添加和配置 VPN 网关。

之后,我将网关子网添加到 Cosmos DB 服务端点配置并设置我的 Function App

使用 VNet(预览)功能选择子网

这种方法更容易设置,但正如微软文档中所述,它不适用于生产工作负载。
配置更容易,但由于结果是相同的,我在本文的其余部分中省略了此选项。

配置

互联网络

网关子网配置

网关

点到站点配置

宇宙数据库

Cosmos 数据库配置

功能应用程序

功能应用程序VNet配置

问题

尝试从函数应用连接到 Cosmos DB 时,我不断收到连接错误:

{
    "Message": "An error has occurred.",
    "ExceptionMessage": "Unable to proceed with the request. Please check the authorization claims to ensure the required permissions to process the …
Run Code Online (Sandbox Code Playgroud)

azure-virtual-network azure-functions azure-cosmosdb

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

Cosmos DB - 请求超时/服务当前不可用错误

我们使用 cosmos DB 并评估系统在负载下的性能。当负载低至 7-9K 请求时,我们会随机收到服务当前不可用和请求超时错误。

还有其他人遇到过这个问题吗?

下面是代码

创建客户端

private void Initialize()
    {
        Client = new DocumentClient(new Uri(cosmosDbConfiguration.EndPoint), cosmosDbConfiguration.Key, new ConnectionPolicy
        {
            RetryOptions = new RetryOptions() { MaxRetryAttemptsOnThrottledRequests = 10, MaxRetryWaitTimeInSeconds = 180 },

            ConnectionMode = ConnectionMode.Direct,
            ConnectionProtocol = Protocol.Tcp             
        });

        Client.OpenAsync().GetAwaiter();

        CreateDatabaseIfNotExistsAsync().Wait();
        CreateAllCollectionsIfNotExistsAsync().Wait();
    }
Run Code Online (Sandbox Code Playgroud)

创建文档

 public async Task<Document> CreateDocumentAsync<T>(string collectionName, T dataRow)
    {
        return await Client.CreateDocumentAsync(GetCollectionUri(collectionName), dataRow);
    }
Run Code Online (Sandbox Code Playgroud)

以下是错误消息以及活动 ID

目前无法提供服务。ActivityId:6bfcabb0-69b9-4671-b2d1-8bf1a831d77e,RequestStartTime:2019-04-08T21:48:14.3002274Z,尝试的区域数量:1 ResponseTime:2019-04-08T21:48:48.3076636Z,StoreReadResult:StorePhysicalAddress : rntbd: //cdb-ms-prod-westus1-fd4.documents.azure.com:14070/apps/112e82de-8353-4f6c-804f-e6ce36a8282f/services/9f5b24ad-6517-4487-855b-ac5e507a6f53/partitions/e24c749b-c701 - 4b75-9a16-6dde04028f12/replicas/131991744298606536p/,LSN:-1,GlobalCommitedLsn:-1,PartitionKeyRangeId:,IsValid:False,StatusCode:410,IsGone:True,IsNotFound:False,IsInvalidPartition:False,RequestCharge:0,ItemLSN: -1、SessionToken:、资源类型:文档、操作类型:查询、documentdb-dotnet-sdk/2.2.1 主机/64 位 MicrosoftWindowsNT/6.2.9200.0

消息:请求超时。ActivityId:72f7f069-2376-4c71-af44-a78780e53894,请求URI:/apps/28ad6635-acc0-4a33-8cbf-513f2a7ecff0/services/9015ec89-5cc9-4a36-825d-047766c72037/partitions/bdc 49db7-9018-4dd4-9100- 52dcee4635a4/replicas/131992241935694598p/,RequestStats:RequestStartTime:2019-04-08T21:59:06.5769926Z,尝试的区域数量:1,SDK:documentdb-dotnet-sdk/2.2.1主机/64位MicrosoftWindowsNT/6.2.9200.0

azure azure-cosmosdb azure-cosmosdb-sqlapi

5
推荐指数
0
解决办法
4954
查看次数

对于大量记录,我能否获取 Cosmos DB 表中所有记录的计数?

假设我在 Cosmos DB SQL 表中有大约 1000 万个文档,或者在 Cosmos DB Cassandra 表中有 1000 万个集合,有什么方法可以查看这些表中的文档/集合数量?

azure-cosmosdb azure-cosmosdb-sqlapi azure-cosmosdb-cassandra-api

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

单例 Azure Cosmos DB 客户端

在应用程序的生命周期内使用单例 Azure Cosmos DB 客户端

每个 DocumentClient 实例都是线程安全的,并且在直接模式下操作时执行高效的连接管理和地址缓存。为了通过 DocumentClient 实现高效的连接管理和更好的性能,建议在应用程序的生命周期中为每个 AppDomain 使用单个 DocumentClient 实例。

https://learn.microsoft.com/en-us/azure/cosmos-db/performance-tips

services.AddSingleton<IDocumentClient>(x => new DocumentClient(UriEndpoint, MasterKey));

private readonly IDocumentClient _documentClient;
public HomeController(IDocumentClient documentClient){
    _documentClient = documentClient;
}
Run Code Online (Sandbox Code Playgroud)

这是否意味着客户端可以用于多个数据库(即任何数据库中的任何容器)?

如何在 dotnet 核心应用程序中将 DocumentDB 客户端初始化为单例

azure azure-cosmosdb azure-cosmosdb-sqlapi

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

如何使用 ITranscriptLogger 和 TranscriptLoggerMiddleware 在 cosmos DB 中存储聊天记录

我想使用 ITranscriptLogger 和 TranscriptMiddelWare 将整个聊天历史记录存储在 cosmos DB 中,但我很难做到这一点。我已阅读这篇 MS 文章,但我想将其存储在 Cosmos DB 而不是 Blob 存储中。另外,我正在尝试在 Startup.cs 中而不是在 Bot.cs 中实例化转录日志,并且我尝试根据此答案来实现它,但没有任何运气。也就是说,不会存储脚本,并且我的 Azure cosmos DB 中没有容器。我感谢任何帮助和反馈。

代码

我已经创建了 TranscriptStore 类,并按照引用的 SO 答案中的说明创建并添加了中间件:

CosmosTranscriptStore.cs

public class CosmosTranscriptStore : ITranscriptLogger
    {
        private CosmosDbStorage _storage;

        public CosmosTranscriptStore(CosmosDbStorageOptions config)
        {
            _storage = new CosmosDbStorage(config);
        }
        public async Task LogActivityAsync(IActivity activity)
        {
            // activity only contains Text if this is a message
            var isMessage = activity.AsMessageActivity() != null ? true : false;
            if …
Run Code Online (Sandbox Code Playgroud)

c# sdk botframework azure-cosmosdb

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

Cosmos DB 和 DevOps 自动化

最近我遇到了一个场景,我需要在我的 CosmosDB 数据库上执行某种 DDL 和 DML 迁移(我知道这些首字母缩写词不适用于 NoSQL,但无论如何)。这些迁移计划在 CI/CD 管道中自动化和执行。

显然,很难在网上找到有关我想要实现的功能的任何信息。以下是一些标准:

  • 将静态数据存储在源代码存储库中。查看。可以使用一些 powershell 部署到数据库
  • 在源代码存储库中有 javascript 存储过程。查看。再来点powershell
  • 修改一些数据以反映应用层的变化。例如,在集合范围内或选定记录上添加一些具有默认值或特定值的字段。- 不检查。目前找不到可接受的解决方案。

我对最后一点感到非常沮丧,并试图避免创建将使用 SDK 应用 DML 更改的应用程序。在 .net 世界中,AFAIK EntityFramework 不支持 CosmosDB 中的自动迁移。

所以一个好的社区的问题是:有没有什么被认为是自动化 Cosmos DB 数据修改的好做法?

我上面所说的是否有意义,还是像处理 RDBMS 一样处理 NoSQL DBMS 的另一种尝试?

.net powershell devops azure-cosmosdb

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

Cosmos DB DocumentClient 的 DateTime 处理中的错误

这个问题与DocumentClientfrom Microsoft.Azure.DocumentDB.Core v2.11.2. (更新:该错误也存在于Microsoft.Azure.Cosmos.)

当查询包含DateTime带有尾随零的值时,Cosmos DB 的 LINQ 提供程序中似乎存在错误。考虑以下代码:

string dateTimeWithTrailingZero = "2000-01-01T00:00:00.1234560Z"; // trailing zero will be truncated by LINQ provider :-(
DateTime datetime = DateTime.Parse(dateTimeWithTrailingZero, CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal);

IQueryable<Dictionary<string, object>> query =
    client.CreateDocumentQuery<Dictionary<string, object>>(collectionUri)
        .Where(x => (DateTime) x["datetime"] <= datetime);
Run Code Online (Sandbox Code Playgroud)

结果query 包括属性所在的文档,datetime例如"2000-01-01T00:00:00.1234567Z"(即使它不应该)。

结果query没有包含文件,其中datetime"2000-01-01T00:00:00.1234560Z"(即使它应该)。

有什么方法可以使用DocumentClientLINQ 来DateTime正确查询属性吗?(我知道使用原始 SQL 是有效的 - 由于各种原因,我必须 …

c# azure-cosmosdb azure-cosmosdb-sqlapi

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

Azure Cosmos DB - 使用附加字段更新现有文档

现有的 Cosmos DB 文档需要使用新属性进行更改/更新,其他集合的现有文档也需要使用相同的新属性及其值进行更新。

是否有任何推荐的方法或工具可用于更新 Cosmos DB 上的现有文档,或者使用 Cosmos DB SDK 编写自定义 c# 应用程序/PowerShell 脚本是唯一的选择?

例子:

现有user文件

{
   id:user1@mail.com,
   name: "abc",
   country: "xyz"
}  
Run Code Online (Sandbox Code Playgroud)

更新user文档

{
   id:user1@mail.com,
   name: "abc",
   country: "xyz",
   guid:"4334fdfsfewr"  //new field
} 
Run Code Online (Sandbox Code Playgroud)

现有order文件user

{
   id:user1@mail.com,
   user: "user1@mail.com",
   date: "09/28/2020",
   amt: "$45"
}  
Run Code Online (Sandbox Code Playgroud)

更新的order文件user

{
   id:user1@mail.com,
   user: "user1@mail.com",
   userid: "4334fdfsfewr",  // new field but with same value as in user model
   date: "09/28/2020",
   amt: "$45"
}  
Run Code Online (Sandbox Code Playgroud)

azure azure-cosmosdb

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

无服务器帐户不支持在容器上设置优惠吞吐量或自动驾驶仪。Azure Cosmos DB 迁移工具

在迁移工具中选择所有正确的详细信息后,会返回与错误相关的吞吐量值,并且 0 或 -1 没有帮助。

azure-cosmosdb

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