欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

你們如何設計數據庫的評論

傅智翔2年前40瀏覽0評論

你們如何設計數據庫的評論?

首先謝謝邀請!我以前弄過論壇的數據庫,分享給您,希望能有些幫助!

簡單總結如下:

一 分割思想:

1 數據庫切分:用戶庫、主題庫、回復庫

2 數據表水平切分:用戶庫1-n、主題庫1-n、回復庫1-n (比如按時間分)

3 分布式數據庫:每臺計算機中都有DBMS的一份完整拷貝副本,并具有自己局部的數據庫,位于不同地點的許多計算機通過網絡互相連接,共同組成一個完整的、全局的大型數據庫。

4 論壇功能可以進行分隔,不同的服務器負責不同的功能

5 用主從數據庫,master是寫, slave是讀

6 把內容與其它信息分開,好處就是可以讓每個表的文件最小化,對數據庫操作壓力會減小,這樣保證每張表數據量很小,操作速度會快,也可以在這里使用緩存

二 索引:

針對是否建立索引有著一定的分歧:

我覺得建立索引還是很有必要的。理由如下:

1)建立索引可以加快檢索速度,對于論壇讀和寫的比例相差很大,用戶體驗當然是讀多寫少,所以綜合考慮還是要用索引,而且是加在常用的讀關鍵字上。

2)索引之所以會降低更新的速度,是因為更新還包括對索引的更新,從更新帖子10萬左右,這句話是說,我們可能對發帖標題,發帖內容,回復標題,回復內容這4個字段做更新。需要注意的是,這四個字段并不是用來建立表連接的字段,為了優化查詢速度我們不會在這四個字段上建立索引,所以從這道題目出發,我們建立的索引不會影響更新帖子的性能。只要被索引的列(例如回復表的標題ID)不被頻繁更新,即使索引所在地行的其它列被頻繁update,索引也不會被更新從而產生性能消耗,一張表一天30萬次的索引更新,因它引起的性能消耗小到即使數據庫安裝在奔騰3單核CPU下都能輕松承擔下來。

3)對于更新的速度慢的問題,我們有解決的方法,你提交更新了后,前臺可以讓程序返回一個正確結果,后臺開個線程異步慢慢跟新數據庫就是了,反正更新成功的前提就是假設數據庫連接永遠正確并處于可靠狀態。在數據庫和用戶之間建立一個緩沖區。(如,將更新的數據放到內存中,達到一定數量的時候再統一更新數據庫。假如以100條為例,一旦內存中達到100條數據量將這100條數據統一入庫。減少insert操作)

三 緩沖:

讀的時候的緩沖:緩存路由表

主題緩存表(這個取每個區的前面100條記錄),一般來說負載最大的就是主題的第一頁,所以緩存表是個小表。

另外使用hibernate,在數據庫上面加了一層緩存。

生成靜態頁,緩存最熱,最新的帖子。

對于經常更新的數據都設計成單獨表 ,這樣可以最大程度的利用hibernate緩存

緩存常用的數據和表,利用緩存來將經常被訪問的帖子留在內存中,為每條緩存的記錄添加一個訪問時間,如果長時間沒被訪問就從緩存中刪除掉,

避免內存過大,每次用戶看帖的時候,首先檢索緩存中時候有需要的帖子,沒有的話再訪問數據庫,然后將數據庫返回的帖子信息存儲到緩存中。

寫的時候的緩沖:數據庫和用戶之間建立緩存,將更新的數據放在內存中,異步操作的。所有的寫貼操作 放到一個隊列然后批量執行插入數據庫操作。

預估計的緩沖:假如用戶第一次打開某標題,那將此標題的相關的前100條數據緩存到客戶斷。這樣避開對數據庫的直接查詢,減少數據庫壓力。

四 代碼優化

1盡量避免表的連接約束通過代碼來實現約束 例如用戶id的驗證在用戶登錄時驗證這樣就可以把帖子表的用戶id外鍵去掉這樣就成了單表操作、查詢 而連接可以通過觸發來實現這樣最多是查詢了3個表而不是連接中的笛卡爾笛卡爾積 回復表的查詢限定每次查詢的記錄數例如限定10條其它的通過點擊觸發來操作"注代碼優化容易出現bug 原因有些開發工具本身有優化"

五 數據庫性能調優

盡量用硬件來代替軟件優化 原則就是能用硬件的盡量用硬件 比如磁盤陣列 RAID0 有條件用RAID10 加大內存 .避免小表上建索引 對論壇來說數據帖子和回復不是很重要 可以定期刪除一些垃圾帖子 樓主說的幾百萬條記錄的論壇對現在的數據庫管理系統和計算機來說永不著刻意的優化,定期維護打包備份數據庫就可以了

提高速度的關鍵:

1.建立合理的索引并在查詢時充分利用;

2.避免使用關聯,這樣避免整表掃描;使用關聯不如多次使用主鍵查詢來的快;

3.一些處理的功能盡可能放到內存中來做,比如組織主題和回復;

4.海量緩存(使用靜態頁面也是個不錯的做法)

5 定期對表進行轉儲