为不同的排序查询建模NoSQL数据库(DynamoDB)

4
我有一个关于如何建模我的DynamoDB表格的具体问题,以便我可以处理必要的查询。我的应用程序围绕着“事件”这一概念展开。每个事件都有属性(名称、地点、时间、出席人数等)。事件与它们所在的城市相关联。我正在尝试找出如何执行get/query请求(可能是一系列get/query请求)以获取特定城市中出席人数最多的前25个事件。
我来自关系数据库的背景,这将是一个非常简单的查询(select * from events where city = x order by attendees limit 25)。但是我很难想出如何在非关系型数据库中做到同样的效果。我知道我必须创建额外的表格来存储哈希映射,但我似乎无法弄清楚。
我想到实现这个目标的一种方式是让“出席人数”(Number类型)成为范围键,让城市成为哈希键。但这不一定是唯一的键,因为同一城市的多个事件可能拥有相同数量的出席者。此外,更新/原子递增范围键是否可行?
感谢您的帮助!
1个回答

1
注意:我仍然认为关系型数据库更适合这些查询,但是让我们继续吧:
首先,您只能原子地增加一个属性。
现在针对您的情况,我建议如下:
Table: Events
hk: eventId
attributes

Table: Top_Attendees_Per_City
hk: city
rk: eventId

Table: Event_Id_Generator
hk: event_counter
running_counter

Table: Minimum_Attendees_Per_City
hk: city
min_attendees_number, max_attendees_number, events_number

一旦事件已经触发到您的后端,您需要为其分配一个运行ID。这不是强制性的,并且在扩展方面存在问题,但它将确保如果事件具有相同数量的参与者,则新事件将优先于您的“top25”中。
您需要检查参与者人数是否在最小值和最大值之间,同时计算事件直到“25”。这使得您的每个城市的最低参与者可以决定此新事件是否会出现在top25中。如果是,则将其添加到top_attendees_per_city中。
最后,您使用setScanIndexForward(false)和setLimit(25)查询该表
,结果是拥有最多参与者的25个事件。 最后注意:所得到的项目并未按参与者排序,您可以在应用程序级别上对其进行排序后返回。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接