我們知道知乎的問題修改是可以追蹤其歷史記錄的,包括問題的標題的修改、問題的內容修改、問題關聯的Tag修改,都是可以記錄其歷史版本的。請問一下是怎樣設計MySQL來記錄問題的歷史版本的呢?還有,假如知乎的問題是同時允許多人修改的(像Quora那樣的),那麼知乎會怎麼樣解決多人同時編輯的「協作衝突」問題呢?嚴重跪求各位大俠出來給小弟解答!謝謝!
查看了一下和知乎同樣功能的私有化問答社區WeCenter的資料庫Schema,發現是user_history_action_data表存儲了每個版本的完整記錄,然後程序(PHP代碼)再執行diff演算法渲染出差異部分。這樣做的好處是資料庫設計簡單,程序簡單,性能稍微好一點(知乎肯定用了緩存,所以性能差別沒有那麼明顯),壞處就是資料庫佔用空間更大。