4

對於如何建模我的DynamoDB表以便處理必要的查詢,我有一些具體問題。針對不同的排序查詢爲NoSQL數據庫(DynamoDB)建模

我的應用程序集中在「事件」的概念上。每個事件都有屬性(名稱,位置,時間,參加者數量等)。事件與它們所在的城市相關聯。我試圖找出如何執行獲取/查詢請求(可能是一系列獲取/查詢請求),以獲得特定城市參與人數最多的前25個活動。

我來自關係數據庫的背景,這將是一個非常簡單的查詢(select * from events where city = x order by attendees limit 25)。但是我很難弄清楚如何對非關係數據庫做同樣的事情。我知道我將不得不創建額外的表來存儲哈希映射,但我似乎無法弄清楚。

我想過實現它的一種方式是以某種方式讓「參與者」(數字類型)成爲範圍鍵,並讓城市成爲散列鍵。但這不一定是唯一的關鍵,因爲同一城市的多個活動可能有相同數量的與會者。另外,是否可以「更新/原子增量」範圍鍵?

感謝您的幫助!

回答

1

注:我仍然認爲,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能夠決定這個新事件是否會出現在top25中。如果是,則將其添加到top_attendees_per_city。
最後,您使用setScanIndexForward(false)和setLimit(25)
來查詢該表格,結果出現25個具有最多參與人數的事件。 最後說明:結果項目不是由與會者訂購的,您可以在返回前在應用程序級別訂購它們。

相關問題