我們正在嘗試在教育應用程式中啟用協作聊天。一般的想法是用戶(學生)將開始一個練習,這將使他們加入一個特定的等候室。并且系統應該能夠以某種方式確定它有足夠的學生來n根據給定的策略創建一組學生(取決于練習),并將向這些學生發送訊息以使用生成的 ID 加入聊天室,以便他們可以合作。
現在我們完全空白,無法決定如何讓服務器決定是嘗試創建組還是等待更多學生。我們的堆疊位于 Spring Boot、Redis 和 Postgress。我們最初的想法是將學生添加到 Redis 中的等候室,并在每次有學生加入等候名單時啟動 Spring 事件。但是,我們知道這種方法可能會產生許多競爭條件,應該避免這種情況。
uj5u.com熱心網友回復:
創建一個有 SERIAL 列的executive_students 表,將其稱為arrival_order 或其他名稱。group_id 的另一列。當學生登錄練習時,將他們插入此表中。從本質上講,SERIAL 是原子自動遞增的,因此您可以避免競爭條件。定期查詢沒有 group_id 的學生表(我假設你有一個某種型別的 exercise_group 表,它定義了一個組中有多少學生)。當計數達到 n 時,使用 group_id 更新它們并在 exercise_group 表中為下一個組創建一個新組。
關系資料庫非常擅長這種事情。狀態的原子更新是非常簡單的事情。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/530906.html
