velocity緩存
⑴ 你所了解的大數據,是真正的大數據嗎
什麼是大數據
大數據是指無法在一定時間內用常規軟體工具對其內容進行抓取、管理和處理的數據集合。大數據技術,是指從各種各樣類型的數據中,快速獲得有價值信息的能力。適用於大數據的技術,包括大規模並行處理(MPP)資料庫,數據挖掘電網,分布式文件系統,分布式資料庫,雲計算平台,互聯網,和可擴展的存儲系統。
大數據時代存儲所面對的問題
隨著大數據應用的爆發性增長,它已經衍生出了自己獨特的架構,而且也直接推動了存儲、網路以及計算技術的發展。畢竟處理大數據這種特殊的需求是一個新的挑戰。硬體的發展最終還是由軟體需求推動的,就這個例子來說,我們很明顯的看到大數據分析應用需求正在影響著數據存儲基礎設施的發展。
從另一方面看,這一變化對存儲廠商和其他IT基礎設施廠商未嘗不是一個機會。隨著結構化數據和非結構化數據量的持續增長,以及分析數據來源的多樣化,此前存儲系統的設計已經無法滿足大數據應用的需要。存儲廠商已經意識到這一點,他們開始修改基於塊和文件的存儲系統的架構設計以適應這些新的要求。在這里,我們會討論哪些與大數據存儲基礎設施相關的屬性,看看它們如何迎接大數據的挑戰。
容量問題
這里所說的「大容量」通常可達到PB級的數據規模,因此,海量數據存儲系統也一定要有相應等級的擴展能力。與此同時,存儲系統的擴展一定要簡便,可以通過增加模塊或磁碟櫃來增加容量,甚至不需要停機。基於這樣的需求,客戶現在越來越青睞Scale-out架構的存儲。Scale-out集群結構的特點是每個節點除了具有一定的存儲容量之外,內部還具備數據處理能力以及互聯設備,與傳統存儲系統的煙囪式架構完全不同,Scale-out架構可以實現無縫平滑的擴展,避免存儲孤島。
「大數據」應用除了數據規模巨大之外,還意味著擁有龐大的文件數量。因此如何管理文件系統層累積的元數據是一個難題,處理不當的話會影響到系統的擴展能力和性能,而傳統的NAS系統就存在這一瓶頸。所幸的是,基於對象的存儲架構就不存在這個問題,它可以在一個系統中管理十億級別的文件數量,而且還不會像傳統存儲一樣遭遇元數據管理的困擾。基於對象的存儲系統還具有廣域擴展能力,可以在多個不同的地點部署並組成一個跨區域的大型存儲基礎架構。
延遲問題
「大數據」應用還存在實時性的問題。特別是涉及到與網上交易或者金融類相關的應用。舉個例子來說,網路成衣銷售行業的在線廣告推廣服務需要實時的對客戶的瀏覽記錄進行分析,並准確的進行廣告投放。這就要求存儲系統在必須能夠支持上述特性同時保持較高的響應速度,因為響應延遲的結果是系統會推送「過期」的廣告內容給客戶。這種場景下,Scale-out架構的存儲系統就可以發揮出優勢,因為它的每一個節點都具有處理和互聯組件,在增加容量的同時處理能力也可以同步增長。而基於對象的存儲系統則能夠支持並發的數據流,從而進一步提高數據吞吐量。
有很多「大數據」應用環境需要較高的IOPS性能(IOPS (Input/Output Operations Per Second),即每秒進行讀寫(I/O)操作的次數,多用於資料庫等場合,衡量隨機訪問的性能),比如HPC高性能計算。此外,伺服器虛擬化的普及也導致了對高IOPS的需求,正如它改變了傳統IT環境一樣。為了迎接這些挑戰,各種模式的固態存儲設備應運而生,小到簡單的在伺服器內部做高速緩存,大到全固態介質的可擴展存儲系統等等都在蓬勃發展。
並發訪問一旦企業認識到大數據分析應用的潛在價值,他們就會將更多的數據集納入系統進行比較,同時讓更多的人分享並使用這些數據。為了創造更多的商業價值,企業往往會綜合分析那些來自不同平台下的多種數據對象。包括全局文件系統在內的存儲基礎設施就能夠幫助用戶解決數據訪問的問題,全局文件系統允許多個主機上的多個用戶並發訪問文件數據,而這些數據則可能存儲在多個地點的多種不同類型的存儲設備上。
安全問題
某些特殊行業的應用,比如金融數據、醫療信息以及政府情報等都有自己的安全標准和保密性需求。雖然對於IT管理者來說這些並沒有什麼不同,而且都是必須遵從的,但是,大數據分析往往需要多類數據相互參考,而在過去並不會有這種數據混合訪問的情況,因此大數據應用也催生出一些新的、需要考慮的安全性問題。
成本問題
「大」,也可能意味著代價不菲。而對於那些正在使用大數據環境的企業來說,成本控制是關鍵的問題。想控製成本,就意味著我們要讓每一台設備都實現更高的「效率」,同時還要減少那些昂貴的部件。目前,像重復數據刪除等技術已經進入到主存儲市場,而且現在還可以處理更多的數據類型,這都可以為大數據存儲應用帶來更多的價值,提升存儲效率。在數據量不斷增長的環境中,通過減少後端存儲的消耗,哪怕只是降低幾個百分點,都能夠獲得明顯的投資回報。此外,自動精簡配置、快照和克隆技術的使用也可以提升存儲的效率。
很多大數據存儲系統都包括歸檔組件,尤其對那些需要分析歷史數據或需要長期保存數據的機構來說,歸檔設備必不可少。從單位容量存儲成本的角度看,磁帶仍然是最經濟的存儲介質,事實上,在許多企業中,使用支持TB級大容量磁帶的歸檔系統仍然是事實上的標准和慣例。
對成本控制影響最大的因素是那些商業化的硬體設備。因此,很多初次進入這一領域的用戶以及那些應用規模最大的用戶都會定製他們自己的「硬體平台」而不是用現成的商業產品,這一舉措可以用來平衡他們在業務擴展過程中的成本控制戰略。為了適應這一需求,現在越來越多的存儲產品都提供純軟體的形式,可以直接安裝在用戶已有的、通用的或者現成的硬體設備上。此外,很多存儲軟體公司還在銷售以軟體產品為核心的軟硬一體化裝置,或者與硬體廠商結盟,推出合作型產品。
數據的積累
許多大數據應用都會涉及到法規遵從問題,這些法規通常要求數據要保存幾年或者幾十年。比如醫療信息通常是為了保證患者的生命安全,而財務信息通常要保存7年。而有些使用大數據存儲的用戶卻希望數據能夠保存更長的時間,因為任何數據都是歷史記錄的一部分,而且數據的分析大都是基於時間段進行的。要實現長期的數據保存,就要求存儲廠商開發出能夠持續進行數據一致性檢測的功能以及其他保證長期高可用的特性。同時還要實現數據直接在原位更新的功能需求。
靈活性
大數據存儲系統的基礎設施規模通常都很大,因此必須經過仔細設計,才能保證存儲系統的靈活性,使其能夠隨著應用分析軟體一起擴容及擴展。在大數據存儲環境中,已經沒有必要再做數據遷移了,因為數據會同時保存在多個部署站點。一個大型的數據存儲基礎設施一旦開始投入使用,就很難再調整了,因此它必須能夠適應各種不同的應用類型和數據場景。
應用感知
最早一批使用大數據的用戶已經開發出了一些針對應用的定製的基礎設施,比如針對政府項目開發的系統,還有大型互聯網服務商創造的專用伺服器等。在主流存儲系統領域,應用感知技術的使用越來越普遍,它也是改善系統效率和性能的重要手段,所以,應用感知技術也應該用在大數據存儲環境里。
小用戶怎麼辦?
依賴大數據的不僅僅是那些特殊的大型用戶群體,作為一種商業需求,小型企業未來也一定會應用到大數據。我們看到,有些存儲廠商已經在開發一些小型的「大數據」存儲系統,主要吸引那些對成本比較敏感的用戶。
⑵ 互聯網背景下,為什麼用Nosql
本文將從單機MySQL的場景出發,簡述一下隨著網站的訪問量越來越大,資料庫部署的演進過程,到為什麼要用MySQL的必要性。
大數據時代的數據有3V的特點:海量Volume、多樣Variety、實時Velocity。
互聯網網站需求的3高的特點:高並發、高可擴、高性能。
一、單機MySql
當一個網站的訪問量不大時,用單個資料庫完全可以輕松應付。
在那個時候,更多的都是靜態網頁,動態交互類型的網站不多。
七、Nosql是什麼
NoSQL(NoSQL = Not Only SQL ),意即「不僅僅是SQL」,
泛指非關系型的資料庫。隨著互聯網web2.0網站的興起,傳統的關系資料庫在應付web2.0網站,特別是超大規模和高並發的SNS類型的web2.0純動態網站已經顯得力不從心,暴露了很多難以克服的問題,而非關系型的資料庫則由於其本身的特點得到了非常迅速的發展。NoSQL資料庫的產生就是為了解決大規模數據集合多重數據種類帶來的挑戰,尤其是大數據應用難題,包括超大規模數據的存儲。
(例如谷歌或Facebook每天為他們的用戶收集萬億比特的數據)。這些類型的數據存儲不需要固定的模式,無需多餘操作就可以橫向擴展。
八、Nosql的優勢
1.易擴展
NoSQL資料庫種類繁多,但是一個共同的特點都是去掉關系資料庫的關系型特性。
數據之間無關系,這樣就非常容易擴展。也無形之間,在架構的層面上帶來了可擴展的能力。
2.大數據量,高性能
NoSQL資料庫都具有非常高的讀寫性能,尤其在大數據量下,同樣表現優秀。
這得益於它的無關系性,資料庫的結構簡單。一般MySQL使用Query Cache,每次表的更新Cache就失效,是一種大粒度的Cache,在針對web2.0的交互頻繁的應用,Cache性能不高。而NoSQL的Cache是記錄級的,是一種細粒度的Cache,所以NoSQL在這個層面上來說就要性能高很多了。
3.多樣靈活的數據模型
NoSQL無需事先為要存儲的數據建立欄位,隨時可以存儲自定義的數據格式。而在關系資料庫里,增刪欄位是一件非常麻煩的事情。如果是非常大數據量的表,增加欄位簡直就是一個噩夢。
九、Nosql資料庫的四大分類
鍵值(Key-Value)存儲
列存儲
文檔存儲
圖形存儲
常見的有:Redis、Memcache、MongoDB,這里就不一 一 介紹了。
⑶ 怎麼樣使用JSP頁面緩存
手段很多,你可以把這個文件生成靜態的html,後台跑一個線程,每天更新一下文件。
當然使用squid反向代理加速也行,但是配置安裝成本比較高。
另外,你可以把頁面的內容放到項目的上下文里,這樣不用訪問資料庫,直接從內存里拿就好了。
當然還有很多方式,資料庫緩存,應用程序緩存等等都可以。
⑷ 如何處理大量數據並發操作
處理大量數據並發操作可以採用如下幾種方法:
1.使用緩存:使用程序直接保存到內存中。或者使用緩存框架: 用一個特定的類型值來保存,以區別空數據和未緩存的兩種狀態。
2.資料庫優化:表結構優化;SQL語句優化,語法優化和處理邏輯優化;分區;分表;索引優化;使用存儲過程代替直接操作。
3.分離活躍數據:可以分為活躍用戶和不活躍用戶。
4.批量讀取和延遲修改: 高並發情況可以將多個查詢請求合並到一個。高並發且頻繁修改的可以暫存緩存中。
5.讀寫分離: 資料庫伺服器配置多個,配置主從資料庫。寫用主資料庫,讀用從資料庫。
6.分布式資料庫: 將不同的表存放到不同的資料庫中,然後再放到不同的伺服器中。
7.NoSql和Hadoop: NoSql,not only SQL。沒有關系型資料庫那麼多限制,比較靈活高效。Hadoop,將一個表中的數據分層多塊,保存到多個節點(分布式)。每一塊數據都有多個節點保存(集群)。集群可以並行處理相同的數據,還可以保證數據的完整性。
拓展資料:
大數據(big data),指無法在一定時間范圍內用常規軟體工具進行捕捉、管理和處理的數據集合,是需要新處理模式才能具有更強的決策力、洞察發現力和流程優化能力的海量、高增長率和多樣化的信息資產。
在維克托·邁爾-舍恩伯格及肯尼斯·庫克耶編寫的《大數據時代》中大數據指不用隨機分析法(抽樣調查)這樣捷徑,而採用所有數據進行分析處理。大數據的5V特點(IBM提出):Volume(大量)、Velocity(高速)、Variety(多樣)、Value(低價值密度)、Veracity(真實性)。
⑸ 常用的緩存技術
第一章 常用的緩存技術
1、常見的兩種緩存
本地緩存:不需要序列化,速度快,緩存的數量與大小受限於本機內存
分布式緩存:需要序列化,速度相較於本地緩存較慢,但是理論上緩存的數量與大小無限(因為緩存機器可以不斷擴展)
2、本地緩存
Google guava cache:當下最好用的本地緩存
Ehcache:spring默認集成的一個緩存,以spring cache的底層緩存實現類形式去操作緩存的話,非常方便,但是欠缺靈活,如果想要靈活使用,還是要單獨使用Ehcache
Oscache:最經典簡單的頁面緩存
3、分布式緩存
memcached:分布式緩存的標配
Redis:新一代的分布式緩存,有替代memcached的趨勢
3.1、memcached
經典的一致性hash演算法
基於slab的內存模型有效防止內存碎片的產生(但同時也需要估計好啟動參數,否則會浪費很多的內存)
集群中機器之間互不通信(相較於Jboss cache等集群中機器之間的相互通信的緩存,速度更快<--因為少了同步更新緩存的開銷,且更適合於大型分布式系統中使用)
使用方便(這一點是相較於Redis在構建客戶端的時候而言的,盡管redis的使用也不困難)
很專一(專做緩存,這一點也是相較於Redis而言的)
3.2、Redis
可以存儲復雜的數據結構(5種)
strings-->即簡單的key-value,就是memcached可以存儲的唯一的一種形式,接下來的四種是memcached不能直接存儲的四種格式(當然理論上可以先將下面的一些數據結構中的東西封裝成對象,然後存入memcached,但是不推薦將大對象存入memcached,因為memcached的單一value的最大存儲為1M,可能即使採用了壓縮演算法也不夠,即使夠,可能存取的效率也不高,而redis的value最大為1G)
hashs-->看做hashTable
lists-->看做LinkedList
sets-->看做hashSet,事實上底層是一個hashTable
sorted sets-->底層是一個skipList
有兩種方式可以對緩存數據進行持久化
RDB
AOF
事件調度
發布訂閱等
4、集成緩存
專指spring cache,spring cache自己繼承了ehcache作為了緩存的實現類,我們也可以使用guava cache、memcached、redis自己來實現spring cache的底層。當然,spring cache可以根據實現類來將緩存存在本地還是存在遠程機器上。
5、頁面緩存
在使用jsp的時候,我們會將一些復雜的頁面使用Oscache進行頁面緩存,使用非常簡單,就是幾個標簽的事兒;但是,現在一般的企業,前台都會使用velocity、freemaker這兩種模板引擎,本身速度就已經很快了,頁面緩存使用的也就很少了。
總結:
在實際生產中,我們通常會使用guava cache做本地緩存+redis做分布式緩存+spring cache就集成緩存(底層使用redis來實現)的形式
guava cache使用在更快的獲取緩存數據,同時緩存的數據量並不大的情況
spring cache集成緩存是為了簡單便捷的去使用緩存(以註解的方式即可),使用redis做其實現類是為了可以存更多的數據在機器上
redis緩存單獨使用是為了彌補spring cache集成緩存的不靈活
就我個人而言,如果需要使用分布式緩存,那麼首先redis是必選的,因為在實際開發中,我們會緩存各種各樣的數據類型,在使用了redis的同時,memcached就完全可以舍棄了,但是現在還有很多公司在同時使用memcached和redis兩種緩存。