查询 Cosmos DB(表存储 API)以获取存储中的“下一个”项目的好策略是什么?“下一个”定义为上次调用未返回的前 1 个项目。上次调用返回的项目保存在内存中。使用 .NET 框架,C#。表预计可容纳大约 200 万个条目,因此不首选表扫描。:)
表存储看起来像这样:分区键(多个值的组合):“0000/00/01/2020-01-11”。例如,行键单个 int 值 1。行包含其他字符串数据。
所以键值对(分区键和行键)如下所示。该应用程序需要大量读取,但不一定使用日志尾模式 ( https://docs.microsoft.com/en-us/azure/cosmos-db/table-storage-design-guide#log-tail-pattern ) .
0000/00/01/2020-01-11,1,aaa,x
0000/00/01/2020-01-11,2,aaa,y
0000/00/01/2020-01-11,3,aaa,z
0000/00/01/2020-01-11,4,bbb,x
0001/00/01/2020-01-11,5,aaa,x
0001/00/01/2020-01-11,6,ddd,x
Run Code Online (Sandbox Code Playgroud)
(注意底部的两个实体将在不同的分区中,因此“aaa,x”存在于两个分区中)。
所以我认为查询只获得一项是
TableQuery<MyClass> query = new TableQuery<MyClass>()
.Where(TableQuery.GenerateFilterCondition("0000/00/01/2020-01-11", QueryComparisons.Equal, "aaa")).Take(1);
Run Code Online (Sandbox Code Playgroud)
如果那是代码正确,并返回“aaa,x”如何确保后续查询得到“aaa,y”,下一次得到“aaa,z”,下一次得到“bbb,x”和下一个将在同一分区中再次获得“aaa,x”?
如果制作富对象没有意义,而是直接查询 REST API 并可能保留上次在另一个表中使用的项目和两个表之间的外部联接或其他过滤条件,我愿意设计那个方向。
谢谢!
azure azure-table-storage azure-cosmosdb azure-cosmosdb-tables
我一直在研究从存储帐户表存储迁移到 CosmosDB 表存储。目前我正在使用 WindowsAzure.Storage (9.3.3) 库来查询 .net core 3.1 应用程序中的数据。作为此迁移的一部分,我已切换到 Microsoft.Azure.Cosmos.Table 1.0.7 库。我在下面编写了 LinqPad 基准测试来比较两者在进行全表扫描时的性能。
async Task Main()
{
var timer = Stopwatch.StartNew();
await QueryCosmosDb().ConfigureAwait(false);
timer.Stop();
var cosmosExecutionTime = timer.Elapsed;
timer = Stopwatch.StartNew();
await QueryTableStorage().ConfigureAwait(false);
timer.Stop();
var tableExecutionTime = timer.Elapsed;
cosmosExecutionTime.Dump();
tableExecutionTime.Dump();
}
public async Task QueryCosmosDb()
{
var cosmosTableEndpoint = new Uri($"https://***.table.cosmos.azure.com:443/");
var storageAccount = new Microsoft.Azure.Cosmos.Table.CloudStorageAccount(new Microsoft.Azure.Cosmos.Table.StorageCredentials("***", "****"), cosmosTableEndpoint);
var client = storageAccount.CreateCloudTableClient();
var table = client.GetTableReference("tablename");
var query = new Microsoft.Azure.Cosmos.Table.TableQuery();
Microsoft.Azure.Cosmos.Table.TableContinuationToken token = null;
do
{ …Run Code Online (Sandbox Code Playgroud) 我需要将 Azure CosmosDB 表中的数据导出到 CSV 文件。
我尝试使用 ADF,但发现只配置了 SQL 和 MongoDB,并且我在 COSMOSDB 选项中使用表存储。
有没有简单或编码的方法来实现这一目标?