1:緩存和頁面靜態(tài)化
中國IDC圈4月14日報道,數據量大這個問題最直接的辦理方案就是利用緩存,緩存就是將從數據庫中獲取的功效臨時生存起來,在下次利用的時候無需從頭到數據庫中獲取,這樣可以大大低落數據庫的壓力。緩存的利用方法可以分為通過措施直接生存到內存中和利用緩存框架兩種方法。措施直接操縱主要是利用Map,尤其是ConcurrentHashMap,而常用的緩存框架有Ehcache、Memcache和Redis等。緩存利用進程中最重要問題是什么時候建設緩存緩和存的失效機制。緩存的失效可以按期失效,也可以在數據產生變革的時候失效,假如按數據產生變革讓緩存失效,還可以分粗粒度失效和細粒度失效。不外緩存也不是什么環(huán)境都合用,它主要用于數據變革不是很頻繁的環(huán)境。
跟緩存相似的別的一種技能叫頁面靜態(tài)化,它在道理上跟緩存很是相似,緩存是將從數據庫中獲取到的數據(雖然也可以是此外任何可以序列化的對象)生存起來,而頁面靜態(tài)化是將措施最后生成的頁面生存起來,利用頁面靜態(tài)化后就不需要每次挪用都從頭生成頁面了,,這樣不單不需要查詢數據庫,并且連應用措施處理懲罰都省了,所以頁面靜態(tài)化同時對數據量大和并發(fā)量高兩大問題都有長處。頁面靜態(tài)化可以在措施中利用模板技能生成,如常用的Freemarker和Velocity都可以按照模板生成靜態(tài)頁面,別的也可以利用緩存處事器在應用處事器的上一層緩存生成的頁面,如可以利用Squid,別的Nginx也提供了相應的成果。
2:數據庫優(yōu)化
數據庫優(yōu)化的要領很是多,常用的有表布局優(yōu)化、SQL語句優(yōu)化、分區(qū)和分表、索引優(yōu)化、利用存儲進程取代直接操縱等,別的有時候公道利用冗余也能得到很是好的結果。
(1)SQL優(yōu)化
SQL優(yōu)化有一個通用的做法就是,首先要將涉及大數據的業(yè)務的SQL語句執(zhí)行時間具體記錄下來,其次通過仔細闡嫡志(同一條語句對差異條件的執(zhí)行時間也大概差異,這點也需要仔細闡明)找出需要優(yōu)化的語句和個中的問題,然后再有的放矢地優(yōu)化。
(2)分區(qū)和分表
當數據量變多的時候,假如可以分區(qū)可能分表,那將起到很是好的結果。當一張表中的數據量變多的時候操縱速度就慢了,所以很容易想到的就是將數據分到多個表中生存,可是這么做之后操縱起來較量貧苦,想操縱(增刪改查)一個數據還需要先找到對應的表,假如涉及多個表還得跨表操縱。其實在常用的數據庫中可以不分表而到達跟分表雷同的結果,那就是分區(qū)。分區(qū)就是將一張表中的數據憑據必然的法則分到差異的區(qū)來生存,這樣在查詢數據時假如數據的范疇在同一個區(qū)內那么可以只對一個區(qū)的數據舉辦操縱,這樣操縱的數據量更少,速度更快,并且這種要領對措施是透明的,措施不需要做任何竄改。
(3)索引優(yōu)化
索引的大抵道理是在數據產生變革(增刪改)的時候就預先按指定字段的順序分列后生存到一個雷同表的布局中,這樣在查找索引字段為條件的記錄時就可以很快地從索引中找到對應記錄的指針并從表中獲取到記錄,這樣速度就快多了。不外索引也是一把雙刃劍,它在提高查詢速度的同時也低落了增刪改的速度,因為每次數據的變革都需要更新相應的索引。不外公道利用索引對晉升查詢速度的結果很是明明,所以哪些字段利用索引、利用什么范例的索引都需要仔細琢磨,而且最好再做一些測試。
(4)存儲進程
在操縱進程巨大并且挪用頻率高的業(yè)務中,可以通過利用存儲進程取代直接操縱來提高效率,因為存儲進程只需要編譯一次,并且可以在一個存儲進程內里做一些巨大的操縱。
3:疏散活潑數據
通過一個按期處理懲罰的任務將不活潑的用戶轉移到此外數據表中,在主要操縱的數據表中只生存活潑用戶,查詢時先從默認表中查找,假如找不到再從不活潑用戶表中查找,這樣就可以提高查詢的效率
4:批量讀取和延遲修改
批量讀取和延遲修改的道理是通過淘汰操縱的次數來提高效率,假如利用得得當,效率將會呈數量級晉升。
假如每生存一筆記錄都查詢一次數據庫,那么對每個需要查抄的字段,都需要查詢與要生存的記錄條數溝通次數的數據庫,這時可以先將所有要生存的數據的相應字段讀取到一個變量中,然后利用in語句統(tǒng)一查詢一次數據庫,這樣就可以將n(要生存記錄的條數)次查詢變?yōu)橐淮尾樵兞恕3诉@種對同一個請求中的數據批量讀取,在高并發(fā)的環(huán)境下還可以將多個請求的查詢歸并到一次舉辦。