目錄
回覆內容:
首頁 後端開發 php教程 mysql垂直拆分資料表

mysql垂直拆分資料表

Sep 15, 2016 am 11:30 AM
mysql php

在開發過程中,我遇見這麼一個問題:在資料庫中有一張文章表,用以保存文章的相關資訊(如:標題、內容、作者、創作時間、收藏數等),還有另外一張表用以保存使用者和文章的收藏關係(主要欄位有:使用者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之後進行函數的調用,寫入到文章收藏數表中去。大致上是這個樣子。

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱門文章

倉庫:如何復興隊友
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章

倉庫:如何復興隊友
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章標籤

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 Dec 24, 2024 pm 04:42 PM

適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南

CakePHP 日期和時間 CakePHP 日期和時間 Sep 10, 2024 pm 05:27 PM

CakePHP 日期和時間

CakePHP 檔案上傳 CakePHP 檔案上傳 Sep 10, 2024 pm 05:27 PM

CakePHP 檔案上傳

CakePHP 路由 CakePHP 路由 Sep 10, 2024 pm 05:25 PM

CakePHP 路由

CakePHP 專案配置 CakePHP 專案配置 Sep 10, 2024 pm 05:25 PM

CakePHP 專案配置

討論 CakePHP 討論 CakePHP Sep 10, 2024 pm 05:28 PM

討論 CakePHP

如何修復 MySQL 8.4 上的 mysql_native_password 未載入錯誤 如何修復 MySQL 8.4 上的 mysql_native_password 未載入錯誤 Dec 09, 2024 am 11:42 AM

如何修復 MySQL 8.4 上的 mysql_native_password 未載入錯誤

CakePHP 快速指南 CakePHP 快速指南 Sep 10, 2024 pm 05:27 PM

CakePHP 快速指南

See all articles