【问题标题】:Azure Table Query Last Inserted Row KeyAzure 表查询最后插入的行键
【发布时间】:2015-11-20 01:58:58
【问题描述】:

我有以下场景

  • 网站
  • Azure Blob 存储(用于图像)
  • Azure 表存储(用于图像的元信息)

虽然是这样 用户上传图片和我

  • 使用生成的 RowKey(整数)将有关图像的信息保存到表存储中
  • 将图像保存到 Blob 存储(图像名称 = 表 RowKey,因为我需要知道哪个表记录属于哪个 Blob 图像)

问题是我不知道如何获取最后插入的 RowKey 或最后插入的 BlobName。

我需要分离表和 Blob,因为 Blob 将移动到另一个存储,但 Web 应用程序仍需要读取图像信息。

这个天蓝色的基础设施是否适合我的场景,或者我必须使用其他一些存储,例如 DocumentDB,我相信这会解决我的问题,因为我可以使用标准 SQL 命令?

因为这是我能想到的最简单的场景,我还不想拒绝 Azure Tables。我尝试了类似

var table = storageAccount.CreateCloudTableClient().GetTableReference("Requests"); table.CreateIfNotExists();

            var query = new TableQuery<RequestEntity>()
                 .Where(TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, "RequestEntity"))
                 .Max(r => r.RowKey);
            Console.WriteLine(query.ToString());
            Console.ReadLine();

但我得到的错误是

TableQuery Generic Type must provide a default parameterless constructor.

我能得到最大值吗?还有一个问题是我连接到 azure 两次,一次用于获取最大 ID,第二次用于插入具有新最大​​ ID 的新行。

你觉得呢?最好尝试 Azure Tables 或切换到 DocumentDB 或 SQL Server ?

【问题讨论】:

    标签: azure-storage


    【解决方案1】:

    您不能发出像 OrderBy 这样的命令来检索插入的最后一条记录。尽管它可能不是最优雅的实现方式,但有一种解决方法。您可以设计分区键和行键,使最近的记录始终显示在查询的顶部。这个 blob 帖子有很好的信息 (http://blog.smarx.com/posts/using-numbers-as-keys-in-windows-azure) 关于如何实现这一点。然后,您可以使用 LINQ 查询来获取 TopN,如下文https://msdn.microsoft.com/en-us/library/azure/dd894039.aspx 中所述

    【讨论】:

    • 谢谢,我只是通过存储作为具有 GUID 文件名和具有 GUID“外键”文件名列的 SQL 表的文件存储来解决这个问题。所以我可以在 SQL 上执行所有标准操作,如果需要读取文件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多