【发布时间】:2015-09-16 16:30:53
【问题描述】:
我有一个表,每当用户查看特定资源时,我都会向其中添加记录。关键字段是
- 用户名
- 资源
- 查看日期
在我的应用程序的历史记录页面上,我想显示用户最近查看的资源的一组数字(例如,前 5 个),但我想按资源分组,这样如果有一些被多次查看,则只有显示每个最新的。
要清楚,如果原始数据看起来像这样:
UserA | ResourceA | Jan 1
UserA | ResourceA | Jan 2
UserA | ResourceB | Jan 3
UserA | ResourceA | Jan 4
...
...只有底部的两条记录会出现在历史页面中。
我知道您可以通过使用从 PartitionKey 或 RowKey 字段中的日期派生的字符串来获得服务器端的时间排序。
我还看到,您可以通过使用 Username 和 Resource 作为您的 PartitionKey 和 RowKey 字段,然后使用 Insert-or-update 来维护一个表,您可以在该表中保存最新值的指针每个组合。但是,那些 记录不会按时间顺序排序。
有没有什么方法可以设计一组表,这样我就可以获得所需的数据,而无需检索大量额外的实体并在客户端进行排序?如果需要的话,我愿意对设计进行详细说明。提前致谢!
【问题讨论】:
-
请分享更多关于您的设计的细节。另请描述您要获取哪些数据。
-
@GauravMantri 感谢您的回复。正如我上面所说,该表包含三个重要字段。您可以认为 Resource 字段只是一个字符串标识符,因此我们有 Username(字符串)、ResourceName(字符串)和 DateViewed(DateTimeOffset)。我想获取按资源名称分组的最近访问的前 n 个资源名称的列表,以及最近访问的时间。因此,如果该表有 200 条资源 A 记录和 200 条资源 B 记录(在许多不同时间查看),我将获取资源 A 和 B 的最新行。在 SQL 中很简单,但在 Azure 中很棘手!
标签: sorting azure grouping azure-table-storage