如果我的 cosmos DB 有多个分区,是否有任何理由不设置EnableCrossPartitionQuery为true?
我知道如果运行可能会命中多个分区的查询,这是必要的。但是,如果查询使用有效的分区键并且肯定只会命中一个分区,是否会因为我将该标志设置为 true 而导致性能损失或增加成本?
对这么长的帖子表示歉意,但我已经在这个问题上工作了几天,但似乎找不到解决方案。
我想通过将 Azure 中的 Cosmos DB 放置在虚拟网络 (VNet) 中来限制对它的访问,并且只允许通过 Function 应用进行访问。
第一部分很简单:创建 Cosmos DB 和 VNet,并按照此处所述配置数据库的服务终结点。
将 Function 应用连接到 VNet 可以通过两种方式完成。
按照本指南,我已使用网关子网配置我的 VNet,并按所述添加和配置 VPN 网关。
之后,我将网关子网添加到 Cosmos DB 服务端点配置并设置我的 Function App
这种方法更容易设置,但正如微软文档中所述,它不适用于生产工作负载。
配置更容易,但由于结果是相同的,我在本文的其余部分中省略了此选项。
尝试从函数应用连接到 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) 我们使用 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
假设我在 Cosmos DB SQL 表中有大约 1000 万个文档,或者在 Cosmos DB Cassandra 表中有 1000 万个集合,有什么方法可以查看这些表中的文档/集合数量?
azure-cosmosdb azure-cosmosdb-sqlapi azure-cosmosdb-cassandra-api
在应用程序的生命周期内使用单例 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)
这是否意味着客户端可以用于多个数据库(即任何数据库中的任何容器)?
我想使用 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)最近我遇到了一个场景,我需要在我的 CosmosDB 数据库上执行某种 DDL 和 DML 迁移(我知道这些首字母缩写词不适用于 NoSQL,但无论如何)。这些迁移计划在 CI/CD 管道中自动化和执行。
显然,很难在网上找到有关我想要实现的功能的任何信息。以下是一些标准:
我对最后一点感到非常沮丧,并试图避免创建将使用 SDK 应用 DML 更改的应用程序。在 .net 世界中,AFAIK EntityFramework 不支持 CosmosDB 中的自动迁移。
所以一个好的社区的问题是:有没有什么被认为是自动化 Cosmos DB 数据修改的好做法?
我上面所说的是否有意义,还是像处理 RDBMS 一样处理 NoSQL DBMS 的另一种尝试?
这个问题与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 是有效的 - 由于各种原因,我必须 …
现有的 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) 在迁移工具中选择所有正确的详细信息后,会返回与错误相关的吞吐量值,并且 0 或 -1 没有帮助。
azure-cosmosdb ×10
azure ×3
c# ×2
.net ×1
azure-cosmosdb-cassandra-api ×1
botframework ×1
devops ×1
powershell ×1
sdk ×1