mysql - 請教一個Java做資料庫快取的問題
为情所困
为情所困 2017-06-12 09:19:37
0
1
663

現在在負責學校的一個圖書館個人寫作平台,基本的商業模式已經完成了,但是專案在高並發環境下還沒有做任何的最佳化。

每個學生在閱讀完一本書後都可以寫書評或做筆記,書評是公開的,筆記是私有的。依照現在的做法每個學生操作都存取資料庫去查詢,這樣以後一定會有效能瓶頸。

我大概看了一下ehcache的相關教學但沒有一個好的解決方案,主要是無法判斷快取是否失效。例如將高頻學生的一定數量筆記都放入到快取中間去的話,如果設定一個特定的超時時間5min,但是如果剛好在這5min之內又新添加或者修改了一篇筆記的話該怎麼辦麼?

例如在mybatis中對應一條sql語句select * from comments condition,我可以透過ehcache建立一個記憶體緩存,但是如果comments新加入或更新了一則記錄,怎麼能優雅的更新上次在ehcache中加入的快取。

各位網友是否能夠建議一下相關的解決方案? thanks :-)

为情所困
为情所困

全部回覆(1)
代言

既然是緩存,那就一定對數據實效性有容忍度,否則要嚴格即時的數據,就只能存取資料庫查詢了。

根據題主描述的業務場景來看,普遍的解決方案是透過外置索引來維護圖書和書評的關係(當然索引也不是完全實時的),再透過kv快取(redis,ehcache,map等等)來快取書評的具體內容。
在資料更新(update)時,通常情況先更新資料庫,然後更新緩存,索引不需要更新。
在資料更新(insert)時,需要在update基礎上,再增加對應的關係到索引中。

簡單的外置索引,可以在資料庫中,增加一張(圖書-書評)關係表,建好索引,在查詢書評時先查詢(分頁查詢)關係表,再透過書評主鍵,查詢具體書評資訊(快取加在單一書評資訊上),建議分兩次查詢並在記憶體中組裝數據,不要使用連表查詢(影響資料庫效能)。關係表資料不需要建立緩存,只需要增加書評資訊的快取即可。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!