mysql垂直拆分資料表

WBOY
發布: 2016-09-15 11:30:59
原創
1109 人瀏覽過

在開發過程中,我遇見這麼一個問題:在資料庫中有一張文章表,用以保存文章的相關資訊(如:標題、內容、作者、創作時間、收藏數等),還有另外一張表用以保存使用者和文章的收藏關係(主要欄位有:使用者ID、文章ID),在有初次查看該文章時從資料庫取得到文章資料後會將資料快取到redis中,由此提高效能。
但現在因為每次收藏或取消收藏文章時都會更新文章表的收藏數這一字段,並且都會清空該文章的緩存(之所以選擇清空而不是更新緩存,是為了避免產生髒數據),下次造訪該文章時又會查詢資料庫並快取數據,因此會對效能造成一定影響!

因此我決定將文章表的收藏數拆分出來新建一張文章收藏數表(主要字段有:主鍵id,文章ID,收藏數),並且緩存文章數據時將收藏數分開緩存,這樣,每次收藏或取消收藏文章時文章表不用更新,只更新文章收藏數表,更新文章收藏數表後,直接更新快取(這兒之所以不怕產生髒數據是因為收藏數不是特別重要的數據,就算有一定誤差也不會造成惡劣影響)。

使用以上方案,由此產生兩個疑問,希望得到大家的解答:

  1. 因為文章收藏數中主鍵ID和文章ID兩個字段都是唯一不重複的字段,是否可以不要主鍵ID字段,直接將文章ID當作主鍵?

  2. 因為如果每次新增一條文章數據時沒有同步新增一條對應文章ID的文章收藏數數據,那麼每次收藏與取消收藏文章時更新文章收藏數,都會需要先查詢文章收藏數表中是否已經存在對應文章ID的收藏數,如果沒有就新增一條文章收藏數數據,如果有就直接更新該文章的收藏數,所以,為了簡便,我決定每次新增一條文章數據時都同步新增加一條對應文章ID的文章收藏數數據,以後更新文章收藏數時就不需要先判斷數據是否存在,而可以直接更新數據,在這種情況下,要怎麼避免新增文章數據和新增文章收藏數資料之間出現異常導致新增文章資料成功而新增文章收藏數資料失敗的情況?我知道可以用事務來避免,可以有沒有更簡單的方法呢? MySQL可不可以新增一條資料的同時自動在另一張表裡新增一條資料? (資料庫渣~)

以上,致謝!

回覆內容:

在開發過程中,我遇見這麼一個問題:在資料庫中有一張文章表,用以保存文章的相關資訊(如:標題、內容、作者、創作時間、收藏數等),還有另外一張表用以保存使用者和文章的收藏關係(主要欄位有:使用者ID、文章ID),在有初次查看該文章時從資料庫取得到文章資料後會將資料快取到redis中,由此提高效能。
但現在因為每次收藏或取消收藏文章時都會更新文章表的收藏數這一字段,並且都會清空該文章的緩存(之所以選擇清空而不是更新緩存,是為了避免產生髒數據),下次造訪該文章時又會查詢資料庫並快取數據,因此會對效能造成一定影響!

因此我決定將文章表的收藏數拆分出來新建一張文章收藏數表(主要字段有:主鍵id,文章ID,收藏數),並且緩存文章數據時將收藏數分開緩存,這樣,每次收藏或取消收藏文章時文章表不用更新,只更新文章收藏數表,更新文章收藏數表後,直接更新快取(這兒之所以不怕產生髒數據是因為收藏數不是特別重要的數據,就算有一定誤差也不會造成惡劣影響)。

使用以上方案,由此產生兩個疑問,希望得到大家的解答:

  1. 因為文章收藏數中主鍵ID和文章ID兩個字段都是唯一不重複的字段,是否可以不要主鍵ID字段,直接將文章ID當作主鍵?

  2. 因為如果每次新增一條文章數據時沒有同步新增一條對應文章ID的文章收藏數數據,那麼每次收藏與取消收藏文章時更新文章收藏數,都會需要先查詢文章收藏數表中是否已經存在對應文章ID的收藏數,如果沒有就新增一條文章收藏數數據,如果有就直接更新該文章的收藏數,所以,為了簡便,我決定每次新增一條文章數據時都同步新增加一條對應文章ID的文章收藏數數據,以後更新文章收藏數時就不需要先判斷數據是否存在,而可以直接更新數據,在這種情況下,要怎麼避免新增文章數據和新增文章收藏數資料之間出現異常導致新增文章資料成功而新增文章收藏數資料失敗的情況?我知道可以用事務來避免,可以有沒有更簡單的方法呢? MySQL可不可以新增一條資料的同時自動在另一張表裡新增一條資料? (資料庫渣~)

以上,致謝!

1.可以,但這裡你需要做一個連動就是在增刪文章的時候也要對文章收藏數表進行操作

2使用mysql的udf,詳情請看MySQL :: MySQL 5.1 Reference Manual :: 22.3 Adding New Functions to MySQL 然後透過trigger在文章表deleteinsert之後進行函數的調用,寫入到文章收藏數表中去。大致上是這個樣子。

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板