使用 C# 在 CosmosDB 中查询 SQL API
Query SQL API in CosmosDB using C#
使用 C# 在 CosmosDB 中查询 SQL API :
我的要求是从 CosmosDB (SQL API) 查询 jsonData。下面的代码正在做这项工作,但它需要 5-6 秒来执行和 return 数据。
using (var cosmosClient = new CosmosClient(cosmosAccountEndpoint))
{
var sqlQueryText = "SELECT * FROM c where c.id = //our id";
QueryDefinition queryDefinition = new QueryDefinition(sqlQueryText);
FeedIterator<dynamic> queryResultSetIterator = cosmosClient.GetDatabase(databaseName).GetContainer(containerName).GetItemQueryIterator<dynamic>(queryDefinition);
FeedResponse<dynamic> currentResultSet = await queryResultSetIterator.ReadNextAsync(); //this Line itself is taking 4-5 seconds time
result = currentResultSet.Resource.ToList().FirstOrDefault(); //this line taking out the required response.
}
作为替代方案,我正在尝试以下方法(它不起作用)。在下面的代码中,CollectionUri 未正确加载并抛出 System.InvalidOperationException.
using (var client = new DocumentClient("uri", "key", new ConnectionPolicy { ConnectionMode = Microsoft.Azure.Documents.Client.ConnectionMode.Gateway, ConnectionProtocol = Protocol.Tcp, RetryOptions = retryOptions }))
{
var sqlQueryText = "SELECT * FROM c where c.id = //our id";
Uri collectionUri = Microsoft.Azure.Documents.Client.UriFactory.CreateDocumentCollectionUri(databaseName, containerName);
CustomersInfo = client.CreateDocumentQuery<dynamic>(collectionUri, new SqlQuerySpec() {QueryText = sqlQueryText,Parameters = new SqlParameterCollection() { } }, DefaultOptions).AsDocumentQuery();
};
是否可以替代第一个代码或对第二个代码进行任何更改才能正常工作......
提前致谢....
您是在查询单个项目吗?
之所以这么慢,是因为这是跨分区查询。
重写为点读,即。 ReadItemAsync() 并传入分区键值,这将执行得更快。
此外,如果这是一个新应用程序,我建议使用 v3 .NET SDK 而不是 v2 SDK。这是很旧的,没有任何新的增强功能。
使用 C# 在 CosmosDB 中查询 SQL API :
我的要求是从 CosmosDB (SQL API) 查询 jsonData。下面的代码正在做这项工作,但它需要 5-6 秒来执行和 return 数据。
using (var cosmosClient = new CosmosClient(cosmosAccountEndpoint))
{
var sqlQueryText = "SELECT * FROM c where c.id = //our id";
QueryDefinition queryDefinition = new QueryDefinition(sqlQueryText);
FeedIterator<dynamic> queryResultSetIterator = cosmosClient.GetDatabase(databaseName).GetContainer(containerName).GetItemQueryIterator<dynamic>(queryDefinition);
FeedResponse<dynamic> currentResultSet = await queryResultSetIterator.ReadNextAsync(); //this Line itself is taking 4-5 seconds time
result = currentResultSet.Resource.ToList().FirstOrDefault(); //this line taking out the required response.
}
作为替代方案,我正在尝试以下方法(它不起作用)。在下面的代码中,CollectionUri 未正确加载并抛出 System.InvalidOperationException.
using (var client = new DocumentClient("uri", "key", new ConnectionPolicy { ConnectionMode = Microsoft.Azure.Documents.Client.ConnectionMode.Gateway, ConnectionProtocol = Protocol.Tcp, RetryOptions = retryOptions }))
{
var sqlQueryText = "SELECT * FROM c where c.id = //our id";
Uri collectionUri = Microsoft.Azure.Documents.Client.UriFactory.CreateDocumentCollectionUri(databaseName, containerName);
CustomersInfo = client.CreateDocumentQuery<dynamic>(collectionUri, new SqlQuerySpec() {QueryText = sqlQueryText,Parameters = new SqlParameterCollection() { } }, DefaultOptions).AsDocumentQuery();
};
是否可以替代第一个代码或对第二个代码进行任何更改才能正常工作......
提前致谢....
您是在查询单个项目吗?
之所以这么慢,是因为这是跨分区查询。
重写为点读,即。 ReadItemAsync() 并传入分区键值,这将执行得更快。
此外,如果这是一个新应用程序,我建议使用 v3 .NET SDK 而不是 v2 SDK。这是很旧的,没有任何新的增强功能。