mysql - 類似于之類的通知系統如何設計數據庫
問題描述
最近打算實現一個通知系統。就像segmentfault差不多。比如那個人頂了你的答案。那個人采納了你的答案等。
而這些情況很多的時候如何去設計數據庫的字段呢?
保存的時候需要保存關系嗎?還是直接生成一個消息。顯示消息就行了??
最近做這個。好迷茫的感覺
問題解答
回答1:可以使用 redis 的集合.
首先設置各種事件,比如0:關注1:采納2:贊3:邀請
redis 中每個人的有一個集合. uid 為集合名
假設有如下事件:1.用戶 A 贊了你在某個題目下的回答.2.用戶 B 邀請你回答某個問題
redis集合中就保存:0:Auid:問題id3:Buid:問題id
回答2:謝邀。本人也沒有相關經驗。
建議保存關系,這對以后的數據分析比較有利。
redis是應用層面的優化,可以參考一下@悲慘的大爺 的答案。
SQL表有2種維度:第一種:只記錄用戶的關注, 采納, 贊, 邀請的數量
id(pk) | user_id | count | type(user_id + type)做唯一索引;優點:簡單;缺點:只能看到用戶收到多少關注,但不知道收到誰的關注;
第二種:在第一種的基礎上把count字段換成another_user_id(這個名稱不好,隨便想的,不要參考)(user_id + another_user_id + type)做唯一索引;優點:可以知道該用戶被誰關注了;缺點:表數據量增長會很快,容易上千萬甚至億級,而且不便統計(性能差);
但第二種的缺點也不是不可解決,分庫分區、水平分表、另起一個表專門存儲統計數據等等,若干方法,等有需要的時候再考慮這個問題吧。
以上方案,視乎你們對業務的需求吧。
可能有更好的方法,此處僅供參考。
相關文章:
1. javascript - JS如何取對稱范圍的隨機數?2. java - ehcache緩存用的是虛擬機內存么?3. 數據庫 - mysql如何處理數據變化中的事務?4. android - java 泛型不支持數組,那么RxJava的Map集合有什么方便的手段可以定義獲得一串共同父類集合數據呢?5. java - mongodb分片集群下,count和聚合統計問題6. 關于docker下的nginx壓力測試7. 服務器端 - 采用nginx做web服務器,C++開發應用程序 出現拒絕連接請求?8. javascript - 有什么兼容性比較好的辦法來判斷瀏覽器窗口的類型?9. dockerfile - 我用docker build的時候出現下邊問題 麻煩幫我看一下10. python - pandas按照列A和列B分組,將列C求平均數,怎樣才能生成一個列A,B,C的dataframe
