Mysql

類似於 Chatroulette 的應用程序的數據庫

  • September 5, 2012

我正在製作一個類似於 Chatroulette 的應用程序。

當使用者啟動應用程序時,它會找到目前未與任何人交談的人並讓他們互相交談。在任何時候,使用者都可以跳過該人並獲得新的合作夥伴。我想儲存對話歷史記錄,以便保存每條消息。

這非常適合像 PostgreSQL 這樣的關係數據庫,還是我應該使用像 MongoDB 這樣的 NoSQL 系統?

現在我將它建模如下。關於架構的建議也會有所幫助!

`User`: has basic information
`Conversation`: `user1_id`, `user2_id`, `end_date`, `status` (ended or waiting or active)
`Message`: `message`, `conversation_id`, `sent`

所以使用者有很多對話,一個對話有很多消息。

這只是在 PostgreSQL 中。我只是想在建模之前得到一些回饋,以防有什麼可以改進的。

您選擇的幾乎任何數據庫都適用於此。

無論您使用哪個數據庫,您都需要仔細考慮並發問題,因為您將有許多並發工作人員插入新記錄、發送消息並將它們標記為已發送等。您很可能需要一個隊列系統,例如PgQ,因為排隊比你想像的要難,而且你想出的任何實現都會有問題。

就我個人而言,我想考慮讓聊天系統在其自身內部進行通信,而不是通過數據庫,並在發送消息後將消息記錄到數據庫中。這將比插入它們然後在發送它們時更新它們要高效得多。我認為將狀態保存在數據庫中的唯一真正好處是您的應用程序本身可以幾乎是無狀態的,從而更容易更新和重新部署。

引用自:https://dba.stackexchange.com/questions/23150