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



关于如何对 DynamoDB 表进行建模以便处理必要的查询,我有一些具体的问题。

我的应用程序以"事件"的概念为中心。每个事件都有属性(名称、位置、时间、与会者人数等)。事件与其所在的城市相关联。我正在尝试弄清楚如何执行获取/查询请求(可能是一系列获取/查询请求)以获取特定城市参与者最多的前 25 个事件。

我来自关系数据库的背景,这将是一个非常简单的查询(从城市 = x 与会者限制 25 的订单的活动中选择 *)。但是我很难弄清楚如何使用非关系数据库做同样的事情。我知道我将不得不创建额外的表来存储哈希的映射,但我似乎无法弄清楚。

我想实现它的一种方法是以某种方式让"与会者"(数字类型)成为范围键,让城市成为哈希键。但这不一定是唯一的键,因为同一城市的多个活动可能具有相同数量的参与者。另外,甚至可以"更新/原子递增"范围键吗?

感谢您的帮助!

注意:我仍然认为RDBMS更适合这些查询,但这里是:

首先,您只能以原子方式递增属性。
现在,对于您的方案,我建议如下:

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"之前,您需要检查与会者人数是否在最小值和最大值之间。这使您的mimimum_attendees_per_city能够决定此新事件是否将出现在前 25 名中。如果是,则将其添加到top_attendees_per_city。
最后,使用 setScanIndexForward(false) 和 setLimit(25)
查询该表,结果是与会者人数最多的 25 个事件。最后说明:生成的项目不是由其与会者订购的,您可以在返回之前在应用程序级别订购它们。

最新更新