标签: azure-cosmosdb

值不能为空。参数名称:uriString

我最近通过以下链接在 Visual Studio 2015 中创建了一个应用程序:https : //azure.microsoft.com/en-in/documentation/articles/documentdb-dotnet-application/

但是当我构建解决方案时,它显示了以下错误:

值不能是null
参数名称:uriString
第71行:public static void Initialize()
第72行:{
第73行:client = new DocumentClient(new Uri(ConfigurationManager.AppSettings["https://<db-name>.documents.azure.com:443/"]), ConfigurationManager.AppSettings["<db-key>"]);
第74行:CreateDatabaseIfNotExistsAsync().Wait();
第75行:CreateCollectionIfNotExistsAsync().Wait();

源文件:C:\Users\BHAVIN PATEL\Documents\Visual Studio 2015\Projects\documentdb-dotnet-todo-app-master\src\DocumentDBRepository.cs 行:73

我已Web.config在 Azure 中创建的 DocumentDB 应用程序的应用程序文件中插入了 URI 和主键/辅助键。

asp.net azure-cosmosdb

9
推荐指数
2
解决办法
3万
查看次数

NoSQL数据库中的模式迁移脚本

我有一个活动项目,一直使用C#,实体框架和SQL Server.但是,随着NoSQL备选方案日益增加的可行性,我正在研究将项目转换为使用MongoDB的所有影响.

很明显,主要的过渡障碍是由于"无架构".什么暗示对于像C#语言的一个很好的总结发现这里的官方MongoDB的文档.以下是最有用的相关段落(粗体添加):

仅仅因为MongoDB是无模式的并不意味着您的代码可以处理无模式文档.最有可能的是,如果您使用的是静态类型语言(如C#或VB.NET),那么您的代码就不灵活,需要映射到已知的模式.

架构可以通过多种不同方式从应用程序的一个版本更改为下一个版本.

你如何处理这些取决于你自己.有两种不同的策略:编写升级脚本.在使用文档时逐步更新文档.最简单的策略是编写升级脚本.关系数据库(SQL Server,Oracle)和MongoDB之间的这种方法实际上没有区别.确定需要更改的文档并进行更新.

或者,在大多数关系数据库中不支持,是增量升级.我们的想法是,您的文档在使用时会得到更新.从未使用的文档永远不会更新.因此,您需要注意一些明确的陷阱.

首先,针对一半文档是版本1而一半文档是版本2的架构的查询可能会出错.例如,如果重命名元素,则查询将需要测试旧元素名称和新元素名称以获取所有结果.

其次,任何增量升级代码必须保留在代码库中,直到所有文档都已升级.例如,如果有文档的3个版本,[1,2和3]并且我们将升级代码从版本1移除到版本2,那么仍然作为版本1存在的任何文档都是不可升级的.

用于在SQL生态系统中管理/创建此类初始化或升级脚本的工具非常成熟(例如,实体框架迁移)

虽然在NoSQL世界中有类似的工具自制脚本可用于此类升级(尽管有些人认为不应该这样),但似乎对"何时"和"如何"运行这些升级脚本的共识较少.有些建议在部署之后.不幸的是,这种方法(当不与增量更新一起使用时)可能会在尝试读取C#模型已更改的现有数据时使应用程序处于不可用状态.

如果

" 最简单的策略是编写升级脚本. "

对于像C#这样的静态.NET语言来说,它是真正最简单/推荐的方法,是否存在用于这些语言的NoSql数据库中代码优先模式迁移的现有工具?或NoSql生态系统没有到那个成熟点?

如果您不同意MongoDB的建议,那么什么是更好的实现,您能否提供一些参考/示例,说明我在哪里可以看到正在使用的实现?

.net c# mongodb ef-migrations azure-cosmosdb

9
推荐指数
2
解决办法
2651
查看次数

你如何更新 cosmos db 中的子文档

我是 Cosmos Db 的新手,想了解如何删除/更新文档集合中的子文档。

如果我有一个文件:

{ "Id": "1234", "Name": "foo", "Items": [ { "Id": "abcd", "Age": 35, "Claims": [ { "Name": "email", "Value": "foo@bar.com" } ] } ] }

我如何能:

1)在文档的Items列表中添加一个项目。

2) 从 Items 列表中删除现有的 Item

3) 将项目 upsert 到文档中的项目列表

4) 向项目列表中的现有项目添加/删除索赔值?

提前致谢。

c# azure azure-cosmosdb

9
推荐指数
1
解决办法
8243
查看次数

如何备份Azure Cosmos DB

我有一个Azure Cosmos数据库,我需要删除此订阅中的所有资源.有没有办法从门户网站下线备份?

backup azure database-backups azure-cosmosdb

9
推荐指数
1
解决办法
5855
查看次数

在 Azure Cosmos DB for MongoDB API 中使用没有默认索引策略的 sort() 游标方法

使用 Cosmos DB for MongoDB API(版本 3.4),以下查找查询与方法游标排序的组合似乎行为不正确:

db.test.find({"field1": "value1"}).sort({"field2": 1})
Run Code Online (Sandbox Code Playgroud)

如果满足以下所有条件,则会发生错误:

  • 默认索引策略被丢弃 - 无论之后是否使用 createIndex() 创建了自定义索引。
  • find() 查询不返回任何文档(Find(filter).Count() == 0)
  • 定义排序顺序的排序文档仅包含一个字段。这个字段是否存在或已被索引并不重要。在排序文档中使用两个字段会返回 0 个命中,这是正确的行为。

如果满足以下所有条件,也会发生错误:

  • 默认索引策略被丢弃
  • find() 查询返回一个或多个文档
  • Sort 文档只包含一个字段。此字段尚未编入索引。

错误信息:

排除指定 order-by 项对应的索引路径。

该故障仅在使用 CosmosDB 时发生,使用本机 MongoDB (mongoDB Atlas, v4.0) 时其行为正确。

使用具有 MongoDB 3.4 线路协议(预览功能)的 Azure Cosmos DB for MongoDB API。MongoDB C#/.NET 驱动程序和 mongo shell 都会出现此问题。

此外,该问题仅出现在 find() 中。包含 $match 和 $sort 的等效聚合管道行为正确。

再生产

  1. 使用“Azure Cosmos DB for MongoDB API”创建 Azure Cosmos DB 帐户。启用 MongoDB 3.4 预览功能(3.2 版尚未测试)。
  2. 创建一个新的数据库
  3. 创建一个新的集合,定义一个分片键 …

azure-cosmosdb azure-cosmosdb-mongoapi

9
推荐指数
1
解决办法
3074
查看次数

如何使用 Azure 门户清除 Cosmos DB 数据库或删除所有项目

如果转到https://portal.azure.com,打开我们的 Azure Cosmos DB 帐户 (1) --> 数据资源管理器 (2) --> 单击用户 (3) --> 单击新建 SQL 查询:

天蓝色截图 1

Azure 将打开一个文本框以输入查询:

天蓝色截图 2

我发现 Cosmos DB 不允许使用 DELETE 代替 SELECT: /sf/answers/3383744171/,所以我应该这样做:

SELECT * FROM c DELETE c
SELECT * FROM c DELETE *
Run Code Online (Sandbox Code Playgroud)

但是我的任何尝试都奏效了。

azure azureportal azure-cosmosdb azure-cosmosdb-sqlapi

9
推荐指数
2
解决办法
3万
查看次数

使用 SDK v3 来自 Cosmos DB 的 408 状态代码

我有一个 API (.NET Core 2.2),它使用 SDK v3.5.0 从 Cosmos DB 检索文档。目前,由于对 Cosmos DB 的请求超时,一些请求会引发异常 - 响应是408 状态代码。值得一提的是,90% 的请求都被成功处理。

使用遥测记录 API 的活动,我注意到在依赖项表(记录对 Cosmos DB 的每个请求)中,持续时间超过 60 秒的请求是由名为“创建/查询文档”的命令发起的。这些是属于超时的请求。

另一方面,所有其他请求都使用“查询文档”命令,该命令在 < 5 秒内响应并且请求成功完成。为了分享更多上下文,我在下面详细说明了错误堆栈跟踪、一般规范以及我如何查询文档。

堆栈跟踪

    Microsoft.Azure.Cosmos.CosmosException : Response status code does not indicate success: 408 Substatus: 0 Reason: (Microsoft.Azure.Cosmos.CosmosException : Response status code does not indicate success: 408 Substatus: 0 Reason: (Microsoft.Azure.Documents.RequestTimeoutException: GatewayStoreClient Request Timeout. Start Time:1/30/2020 4:18:00 AM; Total Duration:00:01:05.0332130; Http Client Timeout:00:01:05; Activity id: 7498789a-8e09-4c3e-96a6-31c32e4dc2d7; Inner Message: The …
Run Code Online (Sandbox Code Playgroud)

c# .net-core azure-cosmosdb azure-cosmosdb-sqlapi

9
推荐指数
0
解决办法
2244
查看次数

什么是标准化 RU 消耗

我们使用 Cosmos DB 作为存储,但对如何准确计算消耗的请求单位感到困惑。我们当前的设置是 375k RU/s。

首先,我使用诊断中的请求更改来计算。结果是最大 RU 为 10k/s。 诊断

其次,我检查指标总请求单位。曲线显示每分钟的总 RU 约为 300k,这意味着平均 RU 为 5k/s 。 总请求单位

第三,我检查了 Metric Normalized RU Consumption。 标准化 RU 消耗

我很困惑,为什么我们只使用 10k RU/s,但标准化 RU 消耗是 20% 到 100%?请求费用/总请求单位/标准化 RU 消耗是什么意思?我们如何知道真实的消费?

azure-cosmosdb

9
推荐指数
1
解决办法
836
查看次数

Cosmos SDK3 Container 可以单例吗?

我想减少 Azure Cosmos DB SQL-API 的负载,该 API 通过依赖项注入从 .NET Core Web API 调用。

在 App Insights 中,我注意到每次调用 Web API 都会导致对 Cosmos 的 GetDatabase 和 GetCollection 调用,当 Cosmos 负载较重时,这可能需要 5 秒才能运行。

我做了CosmosClient一个单例(例如这里的建议 - https://learn.microsoft.com/en-us/azure/cosmos-db/performance-tips-dotnet-sdk-v3-sql

然而,我找不到任何关于DatabaseContainer对象是否也可以是单例的建议,因此它们是为每个对 Web API 的请求创建的。

我检查数据库和集合是否存在(例如,遵循此处的建议 - https://learn.microsoft.com/en-us/dotnet/api/microsoft.azure.cosmos.cosmosclient.getdatabase?view=azure-dotnet#备注https://learn.microsoft.com/en-us/dotnet/api/microsoft.azure.cosmos.cosmosclient.getcontainer?view=azure-dotnet#remarks

这意味着对于 Web API 的每个请求,都会运行以下代码

var databaseResponse = await this.cosmosClient.CreateDatabaseIfNotExistsAsync(
    this.databaseConfiguration.DatabaseName,
    throughput: this.databaseConfiguration.DatabaseLevelThroughput);
var database = databaseResponse.Database;
var containerResponse = await database.CreateContainerIfNotExistsAsync(containerId, partitionKey);
var container = containerResponse.Container;
Run Code Online (Sandbox Code Playgroud)

我可以创建单例Database并将Container …

c# azure-cosmosdb azure-cosmosdb-sqlapi

9
推荐指数
1
解决办法
6049
查看次数

插入文档时响应状态码并不表示成功

我的容器上有以下分区 ID:/vesselId

我正在尝试添加该对象的集合:

public class CoachVessel
{
    [JsonProperty("id")]
    public string vesselId { get; set; }

    [JsonProperty("imo")]
    public long Imo { get; set; }

    [JsonProperty("name")]
    public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

这是我批量插入文档的代码:

 CosmosClientOptions options = new CosmosClientOptions() { AllowBulkExecution = true };
 CosmosClient cosmosclient = new CosmosClient(connStr, options);
 Container container = cosmosclient.GetContainer("CoachAPI", "Vessels");
    
 List<Task> concurrentTasks = new List<Task>();
 foreach (var vessel in vessels.Take(1))
 {
     concurrentTasks.Add(container.CreateItemAsync(vessel, new PartitionKey(vessel.vesselId)));
 }        
 await Task.WhenAll(concurrentTasks);
Run Code Online (Sandbox Code Playgroud)

我收到以下错误,该错误未提供太多信息?

Microsoft.Azure.Cosmos.CosmosException: '响应状态代码不表示成功: BadRequest (400); 子状态:1001;活动 ID: ; 原因: …

azure-cosmosdb azure-cosmosdb-sqlapi

9
推荐指数
1
解决办法
2万
查看次数