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

Database design 为不同排序查询建模NoSQL数据库(DynamoDB),database-design,amazon-web-services,nosql,amazon-dynamodb,non-relational-database,Database Design,Amazon Web Services,Nosql,Amazon Dynamodb,Non Relational Database,关于如何对DynamoDB表建模,以便处理必要的查询,我有一个特定的问题 我的应用程序以事件的概念为中心。每个事件都有属性名称、位置、时间、与会者人数等。事件与它们所在的城市关联。我试图弄清楚如何执行一个get/query请求,可能是一系列get/query请求,以获得某个特定城市参与者最多的前25个活动 我来自关系数据库的背景,这将是一个非常简单的查询select*from events,其中city=x order by attenders limited 25。但我很难弄清楚如何在非关系数

关于如何对DynamoDB表建模,以便处理必要的查询,我有一个特定的问题

我的应用程序以事件的概念为中心。每个事件都有属性名称、位置、时间、与会者人数等。事件与它们所在的城市关联。我试图弄清楚如何执行一个get/query请求,可能是一系列get/query请求,以获得某个特定城市参与者最多的前25个活动

我来自关系数据库的背景,这将是一个非常简单的查询select*from events,其中city=x order by attenders limited 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。这不是强制性的,并且在扩展方面存在问题,但它将确保如果事件具有相同数量的参与者,较新的活动将优先于您的前25名。您需要检查出席人数是否在最小值和最大值之间,同时将活动计数到25名。这使每个城市的最低出席人数能够决定这项新活动是否将出现在前25名。如果是,则将其添加到每个城市的顶级与会者中。 最后,使用setCanIndexForwardFalse和setLimit25查询该表,结果是25个参与者人数最多的事件。 最后一点注意:结果项不是由与会者排序的,您可以在返回之前在应用程序级别对其进行排序