海量資料的解決方案

2021-07-30 17:05:43 字數 1595 閱讀 7777

現在無論是企業的業務系統還是網際網路上的**程式都面臨著資料量大的問題,這個問題如果解決不好將嚴重影響系統的執行的速度。

(1) 快取和頁面靜態化

資料量大的問題最直接的解決方案就是使用快取,快取就是將從資料庫中獲取的結果佔時儲存起來,在下次使用的時候無需要重新到資料中獲取,這樣可以大大降低資料庫的壓力。快取的使用方式可以分為通過程式直接儲存到記憶體中和使用快取框架兩種方式。程式直接操作主要是使用map,尤其是concurrentmap,而常用的快取框架有ehcache、memcache和redis等。

(2)資料庫的優化

要解決資料量大的問題,是避不開資料庫的優化的。資料庫的優化可以在不增加硬體的情況下提高處理效率,這是一種用技術換金錢的方式。資料庫的優化有很多種方法,常用的有表結構優化、sql語句優化、分割槽和分表、索引優化、使用儲存過程代替直接操作等。

表結構優化:表結構的優化是資料庫中最基礎也是最重要的,如果表結構優化的不合理,就可能導致嚴重的效能問題,具體怎麼設計更合理,需要根據實際情況具體處理。

sql語句優化:基礎的sql優化是語法層面的優化,不過更重要的是處理邏輯的優化。這也需要根據實際情況具體處理,而且也要和索引快取等配合使用。

分割槽:當資料量變多的時候,如果可以分割槽或者分表,那將起到非常好的效果。分割槽就是將一張表中的資料按照一定的規則分到不同的區來儲存,這樣在查詢資料時如果資料的範圍在同乙個區內那麼可以只對乙個區的資料進行操作,這樣操作的資料量更少,速度更快,而且這種方法對程式時透明的,程式不需要做任何改動。

分表:如果一張表中的資料可以分為幾種固定不變的型別,而且如果同時對多種型別共同操作的情況不多,那麼都可以通過分表來處理,這也需要具體情況具體對待。

索引優化:索引的大致原理是在資料發生變化的時候預先按指定欄位的順序排列後儲存到乙個類似表中,這樣在查詢索引欄位為條件的記錄時就可以很快地從索引中找到對應記錄的指標並從表中獲取到記錄,這樣速度就快多了。不過索引也是一把雙刃劍,它在提高查詢速度的同時也降低了增刪改的速度,因為每次資料的變化都需要更新相應的索引。

使用儲存過程代替直接操作:在操作複雜而且呼叫概率高的業務中,可以通過使用儲存過程代替直接操作來提高效率,因為儲存過程只需要編譯一次,而且可以再乙個儲存過程裡面做一些複雜的操作。

(3)分離活躍資料

雖然有些資料總數量非常大,但是活躍資料並不多,這種情況就可以將活躍資料單獨儲存起來從而提高處理效率。比如,對**來說,使用者很多時候就是這種資料,註冊使用者很多,但是活躍使用者卻不多,而不活躍的使用者中有的偶爾也會登入**,因此不能刪除。

(4) 批量讀取和延遲修改

批量讀取和延遲修改的原理是通過減少操作的次數來提高效率,如果使用恰當,效率將會呈數量級提公升。  延遲修改主要是針對高併發而且頻繁修改的資料,如一些統計資料。

(5)讀寫分離

讀寫分離的本質是對資料庫進行集群,這樣就可以在高併發的情況下將資料庫的操作分配到多個資料庫伺服器去處理從而降低單台伺服器的壓力,不過由於資料庫的特殊性,每台伺服器所儲存的資料需要一致,所以一般情況下是將寫操作交給專門的一台伺服器處理,這台專門負責寫的伺服器叫做主伺服器。

(6)分布式資料庫

分布式資料庫是將不同的表存放到不同的資料庫中然後再放到不同的伺服器。這樣在處理請求時,如果需要呼叫多個表,則可以讓多台伺服器同時處理,從而提高效率。

(7) nosql和hadoop

海量資料解決方案

首先做使用者量估算需求,假如我們做的是學術社群,那麼這個使用者量不會很大,可能我們不需要考慮這個,對於使用者量的級別,我們暫時把使用者量級別定 為三種,百萬級別 m 和千萬界別 s 以及億萬級別 q 並考慮使用者登入驗證以及查詢常用的操作,對m和s進行擴充以及了解。眾所周知,在這個情況下,對於使用者...

海量資料的解決方案

隨著企業業務的不斷擴充套件,不得不面臨資料量大的問題,下面針對這個問題進行各種方案的介紹。快取的使用方式分為通過程式儲存到記憶體中和使用快取框架兩種方式。程式直接操作的是 map,尤其是concurrentmap,而常用的快取框架有 ehcache memcache 和 redis等。頁面靜態化是將...

海量資料的解決方案 筆記

海量資料的解決方案 point 1.快取和頁面靜態化 快取的作用是降低資料庫的壓力.快取的使用方式 a 通過程式直接儲存到記憶體中 map concurrenthashmap b 使用快取框架 ehcache,memcache,redis 頁面靜態化 在程式中使用模板技術生成,如常用的fremark...