6g下載網
當前位置: 主頁 > 軟件教程 > 云計算 >

大數據快速處理數據用什么方法 大數據和SQL傳統數據處理有什么不同?

時間: 2016-04-13 23:31 來源: 本站整理

分享到:

6G下載網給大家介紹大數據快速處理數據用什么方法,大數據和SQL傳統數據處理有什么不同?文章從緩存和頁面靜態化、數據庫優化、分離活躍數據、批量讀取和延遲修改等幾個方面進行介紹,希望能給大家提供幫助。

大數據快速處理數據用什么方法 大數據和SQL傳統數據處理有什么不同?

1、緩存和頁面靜態化

數據量大這個問題最直接的解決方案就是使用緩存,緩存就是將從數據庫中獲取的結果暫時保存起來,在下次使用的時候無需重新到數據庫中獲取,這樣可以大大降低數據庫的壓力。緩存的使用方式可以分為通過程序直接保存到內存中和使用緩存框架兩種方式。程序直接操作主要是使用Map,尤其是ConcurrentHashMap,而常用的緩存框架有Ehcache、Memcache和Redis等。緩存使用過程中最重要問題是什么時候創建緩存和緩存的失效機制。

緩存的失效可以定期失效,也可以在數據發生變化的時候失效,如果按數據發生變化讓緩存失效,還可以分粗粒度失效和細粒度失效。不過緩存也不是什么情況都適用,它主要用于數據變化不是很頻繁的情況。

跟緩存相似的另外一種技術叫頁面靜態化,它在原理上跟緩存非常相似,緩存是將從數據庫中獲取到的數據(當然也可以是別的任何可以序列化的東西)保存起來,而頁面靜態化是將程序最后生成的頁面保存起來,使用頁面靜態化后就不需要每次調用都重新生成頁面了,這樣不但不需要查詢數據庫,而且連應用程序處理都省了,所以頁面靜態化同時對數據量大和并發量高兩大問題都有好處。

頁面靜態化可以在程序中使用模板技術生成,如常用的Freemarker和Velocity都可以根據模板生成靜態頁面,另外也可以使用緩存服務器在應用服務器的上一層緩存生成的頁面,如可以使用Squid,另外Nginx也提供了相應的功能。

2、數據庫優化

數據庫優化的方法非常多,常用的有表結構優化、SQL語句優化、分區和分表、索引優化、使用存儲過程代替直接操作等,另外有時候合理使用冗余也能獲得非常好的效果。

(1)SQL優化

SQL優化有一個通用的做法就是,首先要將涉及大數據的業務的SQL語句執行時間詳細記錄下來,其次通過仔細分析日志(同一條語句對不同條件的執行時間也可能不同,這點也需要仔細分析)找出需要優化的語句和其中的問題,然后再有的放矢地優化。

(2)分區和分表

當數據量變多的時候,如果可以分區或者分表,那將起到非常好的效果。當一張表中的數據量變多的時候操作速度就慢了,所以很容易想到的就是將數據分到多個表中保存,但是這么做之后操作起來比較麻煩,想操作(增刪改查)一個數據還需要先找到對應的表,如果涉及多個表還得跨表操作。其實在常用的數據庫中可以不分表而達到跟分表類似的效果,那就是分區。分區就是將一張表中的數據按照一定的規則分到不同的區來保存,

這樣在查詢數據時如果數據的范圍在同一個區內那么可以只對一個區的數據進行操作,這樣操作的數據量更少,速度更快,而且這種方法對程序是透明的,程序不需要做任何改動。

(3)索引優化

索引的大致原理是在數據發生變化(增刪改)的時候就預先按指定字段的順序排列后保存到一個類似表的結構中,這樣在查找索引字段為條件的記錄時就可以很快地從索引中找到對應記錄的指針并從表中獲取到記錄,這樣速度就快多了。不過索引也是一把雙刃劍,它在提高查詢速度的同時也降低了增刪改的速度,因為每次數據的變化都需要更新相應的索引。不過合理使用索引對提升查詢速度的效果非常明顯,所以哪些字段使用索引、使用什么類型的索引都需要仔細琢磨,并且最好再做一些測試。

(4)存儲過程

在操作過程復雜而且調用頻率高的業務中,可以通過使用存儲過程代替直接操作來提高效率,因為存儲過程只需要編譯一次,而且可以在一個存儲過程里面做一些復雜的操作。

3、分離活躍數據

通過一個定期處理的任務將不活躍的用戶轉移到別的數據表中,在主要操作的數據表中只保存活躍用戶,查詢時先從默認表中查找,如果找不到再從不活躍用戶表中查找,這樣就可以提高查詢的效率

4、批量讀取和延遲修改

批量讀取和延遲修改的原理是通過減少操作的次數來提高效率,如果使用得恰當,效率將會呈數量級提升。

如果每保存一條記錄都查詢一次數據庫,那么對每個需要檢查的字段,都需要查詢與要保存的記錄條數相同次數的數據庫,這時可以先將所有要保存的數據的相應字段讀取到一個變量中,然后使用in語句統一查詢一次數據庫,這樣就可以將n(要保存記錄的條數)次查詢變為一次查詢了。除了這種對同一個請求中的數據批量讀取,在高并發的情況下還可以將多個請求的查詢合并到一次進行。

延遲修改主要針對高并發而且頻繁修改(包括新增)的數據,如一些統計數據。這種情況可以先將需要修改的數據暫時保存到緩存中,然后定時將緩存中的數據保存到數據庫中,程序在讀取數據時可以同時讀取數據庫中和緩存中的數據。

這種方式下如果保存緩存的機器出現了問題將可能會丟失數據,所以如果是重要的數據就需要做一些特殊處理。

5、讀寫分離

讀寫分離的本質是對數據庫進行集群,這樣就可以在高并發的情況下將數據庫的操作分配到多個數據庫服務器去處理從而降低單臺服務器的壓力一般情況下是將寫操作交給專門的一臺服務器處理,這臺專門負責寫的服務器叫做主服務器。當主服務器寫入(增刪改)數據后從底層同步到別的服務器(從服務器),讀數據的時候到從服務器讀取,從服務器可以有多臺,這樣就可以實現讀寫分離.

6、分布式數據庫

分布式數據庫是將不同的表存放到不同的數據庫中然后再放到不同的服務器。這樣在處理請求時,如果需要調用多個表,則可以讓多臺服務器同時處理,從而提高處理速度。

數據庫集群(讀寫分離)的作用是將多個請求分配到不同的服務器處理,從而減輕單臺服務器的壓力,而分布式數據庫是解決單個請求本身就非常復雜的問題,它可以將單個請求分配到多個服務器處理,使用分布式后的每個節點還可以同時使用讀寫分離,從而組成多個節點群。

7、NOSQL和Hadoop

NoSQL是近年來發展非常迅速的一項技術,它的核心就是非結構化。我們一般使用的數據庫(SQL數據庫)都是需要先將表的結構定義出來。NoSQL就是突破了這些條條框框,可以非常靈活地進行操作,另外因為NoSQL通過多個塊存儲數據的特點,其操作大數據的速度也非常快。

Hadoop是專門針對大數據處理的一套框架,隨著近年來大數據的流行Hadoop也水漲船高,出世不久就紅得發紫。

Hadoop對數據的處理是先對每一塊的數據找到相應的節點并進行處理,然后再對每一個處理的結果進行處理,最后生成最終的結果。比如,要查找符合條件的記錄,Hadoop的處理方式是先找到每一塊中符合條件的記錄,然后再將所有獲取到的結果合并到一起,這樣就可以將同一個查詢分到多個服務器處理,處理的速度也就快了,這一點傳統的數據庫是做不到的。

(責任編輯:6g下載網)

分享到:

------分隔線----------------------------
? 35选7福利彩票