1. 大數據發展遇到的困境
大數據的理念已經被追捧多年,但是還遠未達到人們想像的完全實用的程度。大數據的發展受阻主要表現在以下幾個方面:
1.數據基礎的缺失
大數據發展的前提條件是要有豐富的數據源,對於製造業,IT行業數據化程度比較高,雖然缺少資源共享和信息交換,但至少可以在公司內部探索和嘗試。
但對於教育,醫療行業數據化程度還是遠遠落後於大數據時代的需求。單從患者的角度考慮,自己在各個醫院的病例和居家檢測的醫學數據。如果將這些數據利用起來,就會遇到數據源不算,數據格式不統一,隱私問題等等。
2.數據孤島之踵
不同的數據源獨立存在,不能夠互相共享,形成了一個個數據孤島。
政府部門缺乏數據開放的動力,由於其掌握的數據有一定的敏感性而趨於保守態度。比如稅務部門的個人納稅信息會涉及到個人隱私,公安部門的監控信息更是涉及到個人的人身安全問題。
各大企業不會隨便開放自身有價值的數據,因為它有巨大的商業價值,也關繫到企業的生死存亡。比如搜索引擎,谷歌的搜尋效果比其他的好,其實他們的技術差別不大。真正的差異是谷歌的數據量大,能夠找到最佳的搜索策略。而其他的搜索引擎則相反,從而造成惡性循環。
即使沒有商業競爭,企業也會盡量獨占數據。比如航空公司的航班晚點,他不會提前通知,而會出於商業利益選擇在乘客登記結束後廣播通知。
3.難以突破創新的瓶頸
對於相應行業數據壟斷的大企業,利用自身壟斷地位阻礙創新使壟斷地位更加堅固。搜索引擎就是一個很好的案例,還有某互聯網公司利用資源優勢模仿競爭對手的創新產品,並且擠垮對手。
4.個人隱私
個人信息越來越多的被別人掌握,我們既不能阻止,也不知道會產生怎樣的後果。一方面,我們的虛擬世界和實際生活軌跡可以通過大數據洞察一切,預測我們的行為。另一方面,作為數據的主人,卻不知道數據如何被記錄,流向哪裡,被誰利用,這個過程我們一無所知。
大數據的發展需要解決個人隱私問題。一方面不能被無限制的使用,每個人都有對個人隱私有知情權,拒絕的權利。另一方面需要將個人隱私數據找到安全,可靠的方法共享,這樣大數據才能夠發展。
5.其他方面
數據的泛濫,盲目的崇拜等
2. 一般大家都會選擇哪款 SDS 一體機
建議客戶選擇SDS的時候,首先需要問一下自己兩個問題:1、主要應用場景是什麼?2、最關注的前三位的技術指標是什麼?而且還要清楚SDS發展在什麼階段(目前SDS還處在社會主義的初級階段),把預期和現實拉得近一些,有些過高的要求在這個階段SDS還不能提供。
關於SDS技術評價通常包括以下7個維度:可靠性、穩定性、擴展性、功能、性能、易用性、兼容性。
針對SDS塊存儲前三位技術指標維度為:
三大應用場景都把可靠性和穩定性排在了前兩位,之所以這樣排列因為存儲是IT系統的基石。所謂的可靠性就是局部故障不會導致數據丟失和業務中斷,這一點理所應當排在第一位;穩定性是指不會因為局部故障造成性能大幅抖動,給業務響應造成影響,比如說看個小電影中途老卡誰受得了。
說到這有人會問,這兩點對於傳統陣列是必須和默認的要求?我想說,傳統陣列都是昂貴、專用的硬體堆起來,發生硬體故障的概率很低,而SDS大都部署在廉價的標准x86伺服器上,x86伺服器發生硬體故障的概率要高很多;並且SDS都是分布式系統,要管理幾十台、乃至成千上萬台x86伺服器上,這樣發生硬體故障的概率會呈數量級的上升。如何保證大規模分布式系統的可靠性和穩定性也正是SDS首要解決的難點。
Amazon的S3系統由上百萬台伺服器組成,每分鍾都會有很多設備下線和上線,能保證這樣大規模集群的可靠性和穩定性,應該沒幾個廠家有這樣的技術吧?
另外還別忘了,SDS還處在「社會主義初級階段」並不是拿出來一個廠家就能保證幾千台伺服器的SDS系統可靠和穩定的。
VSI和VDI環境通常規模很大,而且規模增長的速度也較快,所以把擴展性放在了第三位。對於資料庫應用,性能是毋容置疑非常重要的一個指標,所以排在了第三位。
眼見未必為實,測試中的那些「貓膩」
終於想清楚我要的SDS長什麼樣了,忽然又想起一件大事「誰家的產品能達到我的要求呢?」
一個最直接的辦法就是拿測試來說吧(測試還是蠻麻煩的一件事,准備測試環境、編寫測試規范、查看測試結果……)。或許還有一個偷懶的辦法,就是「你們有和我的需求差不多的案例嗎?我去問問那家企業用的咋樣啊」,但耳聽為虛眼見為實,聽一面之詞總是不踏實。
相比之下測試是一個較為讓人放心的辦法,但如果你不熟悉SDS的水,同樣有些坑你也發現不了,嘿嘿。
好了,下面這一段就是從測試和技術構架角度幫助客戶判斷關鍵技術指標優劣。
1、B域、C域,1/3節點損壞和RTO為0
可靠性在SDS上主要體現在兩個方面,當集群中磁碟或節點發生故障時,數據會不會丟失?業務會不會中斷?中斷的時長是多少?
這里有兩個指標需要關註:1、容錯度,2、故障恢復時間。
先說一下容錯度這個指標。
因為主流的SDS都採用副本技術,以三副本為例,丟失1份數據,應該還有2份數據存在,數據不會丟,也就是容錯度為1/3個節點。但如果超過1/3的節點同時down機,集群還能工作嗎?這個不一定所有廠家都能做到。
很多SDS的容錯域都是提前配置好的。以3副本9個節點為例,通常會配置3個容錯域ABC、每個容錯域各3個節點,每個容錯域保存獨立的副本數據。例如當以一個容錯域A的3台機器都故障時,還有兩2個副本存在,數據不會丟失,業務照常運行,這就是通常所說的能容忍1/3節點宕機。這樣的要求大多數廠家都能做到,但如果同時B域或者C域也有機器down機呢?這時候多半會出現兩副本都丟失情況,系統異常了。
故障恢復時間這個指標也很關鍵。當系統中發生節點宕機,故障恢復的時間當然越快越好了,最高的要求是故障恢復時間等於0。要實現這個指標很不容易,因為當SDS系統中節點發生故障時,要恢復這個故障,需要做很多事:第一步,發現這個故障;第二步,選出一個節點接替故障節點,並進行數據重構;第三步,重新刷新定址空間,讓客戶機能獲取數據位置的變化。每一步都需要時間花費,特別對大規模集群來講,想把故障恢復時間控製得很小更是難上加難。宣稱故障恢復時間為零的SDS廠家並不多。
所以故障恢復時間的數量級是衡量一個SDS可靠性等級的一個非常重要的因子。用戶可以根據前端業務對故障恢復時間的敏感程度,設立相應的要求標准。
2、Ceph性能抖動的問題
對於SDS來講,它的穩定性主要關注點在:當系統發生磁碟/節點故障,恢復數據而產生數據遷移時,前端的性能表現是否穩定。
在前面可靠性段落中談到了,SDS故障恢復有三個步驟,每一步處理不好都會影響性能表現。特別是數據重構和重新定址這兩個環節,會對性能穩定性造成很大的影響。
例如著名的開源產品Ceph,不止一個客戶反映當系統中出現節點宕機的情況下,性能下降和波動很厲害,對業務影響很大。只所以出現這個問題首先是和它元數據管理和定址的方式(Crush演算法)有關,即在節點動盪時,元數據(其實是ceph內部保存的資源列表)發生變化,從而導致數據的地址發生變化,最終導致大量的沒有必要的數據遷移,規模越大,這個問題暴露的越明顯。其次是它數據遷移採用整盤拷貝的方式,會有無效遷移導致的網路帶寬的擁擠。
還有一個坑透露一下,有些SDS系統在拔盤或者宕節點時,可以不發生數據重構,當磁碟或者節點重新上線或歸位時才重構。因此,穩定性測試時最好觀察一下,磁碟或者節點歸位後的表現。甚至建議,用頻繁的節點上/下線來測試它的穩定性,因為節點抖動還是會時常發生的。
3、VSAN的局限
擴展性很難測試,因為你要准備幾百台、上千台的伺服器環境是不可能,除非你是土豪,那怎麼辦?沒辦法,看構架吧。市場上主流SDS分為有中央元數據管理節點的非對稱構架和無中央管理節點的全對稱構架兩大類,前者相比後者擴展性受限。簡單的理解就是「非對稱構架」中好比有個指揮官,一個指揮官能管的人比較有限的。「全對稱構架」中是沒有指揮官的,全憑自覺性,像是一大堆人在幹活,一個病了,無需向領導請假,會有另外一個人立馬自動接替他的工作。舉例證明:VSAN是有中央管理節點的,它官方宣稱的單集群支持最大節點數64個;鵬雲網路的ZettaStor是無中央節點的,能支持萬級的節點數量。因此從具體實例上也能看出,構架決定了其擴展能力。
4、SSD緩沖擊穿
目前快閃記憶體技術發展得很快,性能比傳統磁介質硬碟高了幾個數量級,正是因為快閃記憶體技術的發展也給SDS造就了可以在性能上PK傳統陣列的基礎。
如果你很有錢的話完全可以用SSD做主存。但目前SSD價格還較貴,性價比較高的方式是用SSD做緩存,通常一個存儲節點上配個幾百GB-1TB的SSD做緩存。SSD緩存對性能的貢獻在小數據量時會表現的非常好,一旦數據量足夠大,SSD被穿透,那就實打實地看落盤(寫到硬碟持久化層)的性能表現了。如果你的系統數據量很小,SSD緩存的容量足夠你支持業務峰值,那可以多些關注SDS緩存加速的性能表現。如果你的系統數據量很大,那SSD會長時間被穿透,那你就重點一下落盤的性能表現了。
目前SDS廠家在SSD緩存利用效率上,水平都差不太多,沒有太多很獨到的演算法出現。倒是落盤這個環節,因為選擇的技術路線不同,表現不一。有的就是差不多發揮原有磁碟的性能,甚至還低;有的利用一些IO演算法,把普通磁碟的性能表現提升幾倍,像鵬雲網路的ZettaStor在落盤時採用了「變隨機為半順序」的IO優化演算法,把隨機IO裸盤的速度提升了3-5倍。鵬雲網路之所以能做這樣的IO優化,因為ZettaStor是完全自主開發的。採用開源方案的廠家要實現起來估計會很難,這是要動到其核心文件系統層的。
有些廠家在性能測試時會用很小的卷、很小的數據去測試,看上去IOPS會很高,但真實環境不會是這么小的負載,所以一旦多創建些大卷,進行長時間大數據量的性能測試,SSD被寫穿透時,性能立馬一落千丈,鳳凰變烏雞了。
不記得那位大咖說過一句話,「不談延遲的性能測試都是耍流氓」。
看一個系統的延遲小不小,一個是實測,另外從構架上也能看出些端倪。就是看一下它的IO路徑是否夠短。例如,直接寫裸磁碟的總比經過文件系統層轉換再寫裸磁碟的IO路徑短很多吧,這就是為什麼Ceph想降低延遲很難的原因所在。眾所周知,Ceph的塊存儲不是直接訪問裸磁碟的,而是通過文件系統把裸磁碟轉換成塊設備給應用的。
3. 移動互聯網如何讓大數據「落地」,有哪些產品實例
問題補充:「大數據」這件事大家提了很久,可是真正能用好的產品少之又少。移動互聯網使得更多、更廣的數據不斷產生,它是否能真正促使大數據「落地」,變成每個人真正能享受到的服務?下面是來自知乎小夥伴maggie的回答:雲計算出現之前,傳統的計算機無法處理大量的非結構化數據,雲計算使得海量數據的存儲和快速分析成為可能,而每個人都擁有的智能終端(手機、電腦、智能設備)以及帶寬不斷增加的移動通信網路,使得海量數據的收集成為可能。大數據的核心在於「預測」,而雲計算使數據從「小樣本」轉變成有機會對所有可能的數據進行分析,預測將基於 「數據之間的關聯性」 而非 「為什麼是這樣的因果性」,我們只需要按照預測出來的趨勢去響應,使用這些結果。比如預測機票價格的走勢,並給出可信度,幫助用戶來決定什麼時間購買機票最省錢。它不用關心為什麼機票會有差異,是因為季節性還是因為其他什麼原因,它僅僅是預測當前的機票未來一段時間會上漲還是下降。如果機票價格有上漲的趨勢,系統就系統用戶立即購買機票。而原始的數據可以從機票預訂資料庫或者行業網站上扒下來。這項預測技術可以用在類似的相關領域。比如賓館預訂,商品購買等。比如通過汽車引擎的散熱和振動來預測引擎是否會出現故障。亞馬遜的推薦系統是很好的例子:亞馬遜從每一個客戶身上捕獲了大量的數據,歷史購買了什麼,哪些商品只是瀏覽卻沒有購買,瀏覽停留的時間,哪些商品是合並購買的,它要做的是找到產品之間的關聯性,感興趣的可以去搜索亞馬遜推薦引擎的專利。在中國,淘寶、支付寶擁有大量的用戶數據,還記得 「淘寶時光機嗎「 ?通過數據分析,把畢業- 戀愛- 遷移城市-結婚- 買房- 生子- 買車的人生軌跡串起來,我不敢說有多准,但是的確感動了我們。從數據中挖掘出背後的故事,這是一個非常有意思的關聯性數據挖掘嘗試。想想也挺可怕的,淘寶是個擁有海量用戶數據的平台,每天還有源源不斷地從移動終端、電腦上不斷增加的數據,如果把這些數據利用起來,不止可以做商品購物推薦,同時還可以對可能的關聯性做預測。在零售行業,銷售數據的統計分析,可以讓供應商監控銷售速率、數量、以及存貨情況,可以知道什麼貨物和什麼貨物擺在一起,放在什麼位置銷量最好,特定的季節,什麼產品銷量最高。公共設施領域,不再是隨機的巡檢,而是針對設施上報的數據以及故障發生的歷史數據、環境數據進行分析和預測,集中人力和物力優先檢查最有可能出現問題的那些設施,減少整體平均的故障發生率。大數據革命首先要把這些可以獲得的數據收集上來,包括未來可能被利用的信息。比如很多應用不管是不是需要位置信息,通常都會問你要位置信息,為未來能做出更多的智能反應做數據儲備。保險公司通過車險投保人的歷史數據(時間、地點、實際行駛路程)來為車險定價。廣告公司可以根據人們的居住地點、要去的地方,提供定製廣告,信息匯集起來可能會揭示某種發展趨勢。交通服務公司可以通過手機的位置來預測交通情況,和某個地方目前聚集了多少人。最近的 」棱鏡計劃「 ,從音視頻、圖片、郵件、文檔以及連接信息中分析個人可能對國家安全造成威脅的行動。大數據可用的領域實在是很多,具體有什麼好點子,哪些產品有機會,我覺著還得多去想和研究。總結起來,首先是數據收集,除了利用現有的數據渠道之外,還可能需要改造一些產品形態,使得數據更好地被量化和可被學習。然後是通過雲計算來做數據相關性的分析,這裡面有大量的演算法工作要去做,所以未來演算法人才是最具有技術挑戰的工種。
4. Spark 處理小文件
不論是Hive還是Spark SQL在使用過程中都可能會遇到小文件過多的問題。小文件過多最直接的表現是任務執行時間長,查看Spark log會發現大量的數據移動的日誌。我們可以查看log中展現的日誌信息,去對應的路徑下查看文件的大小和個數。租敬稿
通過上述命令可以查看文件的個數以及大小。count查看出的文件大小單位是B,需要轉換為MB。
在spark官方的推薦文檔中,parquet格式的文件推薦大小是128MB,小於該大小的均可以稱之為小文件,在實際的工作,往往小文件的大小僅僅為幾KB,表現為,可能文件大小為幾百MB,但是文件個數可能到達了幾十萬個。一般來說,我們可以通過簡單相除獲得文件的平均大小,如果文件數目不多,我們也可以通過下述命令獲得每個文件的大小。
1.任務執行時間長
2.真實的文件大小獨佔一個數據存儲塊,存放到DataNode節點中。同時 DataNode一般默認存三份副本,以保障數據安全。同時該文件所存放的位置也寫入到NameNode的內存中,如果有Secondary NameNode高可用節點,也可同時復制一份過去。NameNode的內存數據將會存放到硬碟中,如果HDFS發生重弊孝啟,將產生較長時間的元數據從硬碟讀到內存的過程。
3.不論在Hive還是在Spark中,每一個存儲塊都對應一個Map程序,一個Map呈現就需要一個JVM,啟動一個JVM去讀取或者寫小文件是吃力不討好的行為。在實際的生產中,為了更好的管理集群資源,一般會要求程序執行時限制Executor數量和每個Executor的核心數量,需要頻繁創建Executor來讀取寫入。
5.影響磁碟定址時間
小文件合並,本質上就是通過某種操作,將一系列小文件合並成大文件。我們知道,以MapRece為代表的大數據系統,都習慣用K-V鍵值對的形式來處理文件,最後文件落盤,也是一個rece對應一個輸出文件。所以直觀上,我們可以減少rece數量,達到減少文件數量的目的。
從Map到Rece需要一個Shuffle過程,所以我們將小文件合並理解為通過一個Shuffle,合並小文件成一個大文件。基於這樣的思想,我們的策略可以稿耐分為兩類:一類是原來的計算已經有Shuffle了,那麼我們可以認為控制輸出文件的數量;二類是強制觸發Shuffle,進行小文件合並。
1-設置參數 (一般用於Hive)
2-distribute by rand()
往動態分區插入數據時,在已經寫好的SQL末尾加上distribute by rand()
該運算元只是起到打散的效果,但是我們還要設置文件的大小,以免打散後仍然有小文件。
表示每個rece的大小,Hive可以數據總量,得到rece個數,假設hive認為會有10個rece,那麼,這里rand()則會為 x % 10
3-group by
我們知道,group by運算元會觸發Shuffle,因此只要我們設置好Shuffle時的文件個數就好,在Spark SQL中,我們可以設置partition個數,因為一個partition會對應一個文件。
上述的操作,會觸發shuffle,因此我們再設置partition個數。
則表示,shuffle後,只會產生10個partition.
4-repartition()
5-coalesce()
需要注意的是,4和5都是spark 2.4以及以後才會支持的。
5. 數據多的時候為什麼要使用redis而不用mysql
通常來說,當數據多、並發量大的時候,架構中可以引入Redis,幫助提升架構的整體性能,減少Mysql(或其他資料庫)的壓力,但不是使用Redis,就不用MySQL。
因為Redis的性能十分優越,可以支持每秒十幾萬此的讀/寫操作,並孫唯高且它還支持持久化、集群部署、分布式、主從同步等,Redis在高並發的場景下數據的安全和一致性,所以它經常用於兩個場景:
緩存
判斷數據是否適合緩存到Redis中,可以從幾個方面考慮: 會經常查詢么?命中率如何?寫操作多麼?數據大小?
我們經常採用這樣的方式將數據刷到Redis中:查詢的請求過來,現在Redis中查詢,如果查詢不到,就查詢資料庫拿到數據,再放到緩存中,這樣第二次相同的查詢請求過來,就可以直接在Redis中拿到數據;不過要注意【緩存穿透】的問題。
緩存的刷新會比較復雜,通常是修改完資料庫之後,還需要對Redis中的數據進行操作;代碼很簡單,但是需要保證這兩步為同一事務,或最終的事務一致性。
高速讀寫
常見的就是計數器,比如一篇文章的閱讀量,不可能每一次閱讀就在資料庫裡面update一次。
高並發的場景很適合使用Redis,比如雙11秒殺,庫存一共就一千件,到了秒殺的時間,通常會在極為短暫的時間內,有數萬級的請求達到伺服器,如果使用資料庫的話,很可能在這一瞬間造成資料庫的崩潰,所以通常會使用Redis(秒殺的場景會比較復雜,Redis只是其中之一,例如如果請求超過某個數量的時候,多餘的請求就會被限流)。
這種高並發的場景,是當請求達到伺服器的時候,直接山或在Redis上讀寫,請求不會訪問到資料庫;程序會在合適的時間,比如一千件庫存都被秒殺,再將數據批量寫到資料庫中。
所以通常來說,在必要的時候引入Redis,可以減少MySQL(或其他)資料庫的壓力,兩者不是替代的關系 。
我將持續分享Java開發、架構設計、程序員職業發展等方面的見解,希望能得到你的關注。
Redis和MySQL的應用場景是不同的。
通常來說,沒有說用Redis就不用MySQL的這種情況。
因為Redis是一種非關系型資料庫(NoSQL),而MySQL是一種關系型資料庫。
和Redis同類的資料庫還有MongoDB和Memchache(其實並沒有持久化數據)
那關系型資料庫現在常用的一般有MySQL,SQL Server,Oracle。
我們先來了解一下關系型資料庫和非關系型資料庫的區別吧。
1.存儲方式關系型資料庫是表格式的,因此存儲在表的行和列中。他們之間很容易關聯協作存儲,提取數據很方便。而Nosql資料庫則與其相反,他是大塊的組合在一起。通常存儲在數據集中,就像文檔、鍵值對或者圖結構。
2.存儲結構關系型資料庫對應的是結構化數據,數據表都預先定義了結構(列的定義),結構描述了數據的形式和內容。這一點對數據建模至關重要,雖然預定義結構帶來了可靠性和穩定性,但是修改這些數據比較困難。而Nosql資料庫基於動態結構,使用與非結構化數據。因為Nosql資料庫是動態結構,可以很容易適應數據類型和結構的變化。
3.存儲規范關系型資料庫的數據存儲為了更高的規范性,把數據分割為最小的關系表以避免重復,獲得精簡的空間利用。雖然管理起來很清晰,但是單個操作設計到多張表的時候,數據管理就顯得有點麻煩。而Nosql數據存儲在平面數據集中,數據經常可能會重復。單個資料庫很少被分隔開,而是存儲成了一個整體,這樣整塊數據更加便於讀寫
4.存儲擴展這可能是兩者之間最大的區別,關系型資料庫是縱向擴展,也就是說想要提高處理能力,要使用速度更快的計算機。因為數據存儲在關系表中,操作的性能瓶頸可能涉及到多個表,需要通過提升計算機性能來克服。雖然有很大的擴展空間,但是最終會達到縱向擴展的上限。而Nosql資料庫是橫向擴展的,它的存儲天然就是分布式的,可以通過給資源池添加更多的普通資料庫則尺伺服器來分擔負載。
5.查詢方式關系型資料庫通過結構化查詢語言來操作資料庫(就是我們通常說的SQL)。SQL支持資料庫CURD操作的功能非常強大,是業界的標准用法。而Nosql查詢以塊為單元操作數據,使用的是非結構化查詢語言(UnQl),它是沒有標準的。關系型資料庫表中主鍵的概念對應Nosql中存儲文檔的ID。關系型資料庫使用預定義優化方式(比如索引)來加快查詢操作,而Nosql更簡單更精確的數據訪問模式。
6.事務關系型資料庫遵循ACID規則(原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持久性(Durability)),而Nosql資料庫遵循BASE原則(基本可用(Basically Availble)、軟/柔性事務(Soft-state )、最終一致性(Eventual Consistency))。由於關系型資料庫的數據強一致性,所以對事務的支持很好。關系型資料庫支持對事務原子性細粒度控制,並且易於回滾事務。而Nosql資料庫是在CAP(一致性、可用性、分區容忍度)中任選兩項,因為基於節點的分布式系統中,很難全部滿足,所以對事務的支持不是很好,雖然也可以使用事務,但是並不是Nosql的閃光點。
7.性能關系型資料庫為了維護數據的一致性付出了巨大的代價,讀寫性能比較差。在面對高並發讀寫性能非常差,面對海量數據的時候效率非常低。而Nosql存儲的格式都是key-value類型的,並且存儲在內存中,非常容易存儲,而且對於數據的 一致性是 弱要求。Nosql無需sql的解析,提高了讀寫性能。
8.授權方式大多數的關系型資料庫都是付費的並且價格昂貴,成本較大(MySQL是開源的,所以應用的場景最多),而Nosql資料庫通常都是開源的。
所以,在實際的應用環境中,我們一般會使用MySQL存儲我們的業務過程中的數據,因為這些數據之間的關系比較復雜,我們常常會需要在查詢一個表的數據時候,將其他關系表的數據查詢出來,例如,查詢某個用戶的訂單,那至少是需要用戶表和訂單表的數據。
查詢某個商品的銷售數據,那可能就會需要用戶表,訂單表,訂單明細表,商品表等等。
而在這樣的使用場景中,我們使用Redis來存儲的話,也就是KeyValue形式存儲的話,其實並不能滿足我們的需要。
即使Redis的讀取效率再高,我們也沒法用。
但,對於某些沒有關聯少,且需要高頻率讀寫,我們使用Redis就能夠很好的提高整個體統的並發能力。
例如商品的庫存信息,我們雖然在MySQL中會有這樣的欄位,但是我們並不想MySQL的資料庫被高頻的讀寫,因為使用這樣會導致我的商品表或者庫存表IO非常高,從而影響整個體統的效率。
所以,對於這樣的數據,且有沒有什麼復雜邏輯關系(就只是隸屬於SKU)的數據,我們就可以放在Redis裡面,下單直接在Redis中減掉庫存,這樣,我們的訂單的並發能力就能夠提高了。
個人覺得應該站出來更正一下,相反的數據量大,更不應該用redis。
因為redis是內存型資料庫啊,是放在內存里的。
設想一下,假如你的電腦100G的資料,都用redis來存儲,那麼你需要100G以上的內存!
使用場景Redis最明顯的用例之一是將其用作緩存。只是保存熱數據,或者具有過期的cache。
例如facebook,使用Memcached來作為其會話緩存。
總之,沒有見過哪個大公司數據量大了,換掉mysql用redis的。
題主你錯了,不是用redis代替MySQL,而是引入redis來優化。
BAT里越來越多的項目組已經採用了redis+MySQL的架構來開發平台工具。
如題主所說,當數據多的時候,MySQL的查詢效率會大打折扣。我們通常默認如果查詢的欄位包含索引的話,返回是毫秒級別的。但是在實際工作中,我曾經遇到過一張包含10個欄位的表,1800萬+條數據,當某種場景下,我們不得不根據一個未加索引的欄位進行精確查詢的時候,單條sql語句的執行時長有時能夠達到2min以上,就更別提如果用like這種模糊查詢的話,其效率將會多麼低下。
我們最開始是希望能夠通過增加索引的方式解決,但是面對千萬級別的數據量,我們也不敢貿然加索引,因為一旦資料庫hang住,期間的所有資料庫寫入請求都會被放到等待隊列中,如果請求是通過http請求發過來的,很有可能導致服務發生分鍾級別的超時不響應。
經過一番調研,最終敲定的解決方案是引入redis作為緩存。redis具有運行效率高,數據查詢速度快,支持多種存儲類型以及事務等優勢,我們把經常讀取,而不經常改動的數據放入redis中,伺服器讀取這類數據的時候時候,直接與redis通信,極大的緩解了MySQL的壓力。
然而,我在上面也說了,是redis+MySQL結合的方式,而不是替代。原因就是redis雖然讀寫很快,但是不適合做數據持久層,主要原因是使用redis做數據落盤是要以效率作為代價的,即每隔制定的時間,redis就要去進行數據備份/落盤,這對於單線程的它來說,勢必會因「分心」而影響效率,結果得不償失。
樓主你好,首先糾正下,數據多並不是一定就用Redis,Redis歸屬於NoSQL資料庫中,其特點擁有高性能讀寫數據速度,主要解決業務效率瓶頸。下面就詳細說下Redis的相比MySQL優點。( 關於Redis詳細了解參見我近期文章:https://www.toutiao.com/i6543810796214813187/ )
讀寫異常快
Redis非常快,每秒可執行大約10萬次的讀寫速度。
Redis支持豐富的數據類型,有二進制字元串、列表、集合、排序集和散列等等。這使得Redis很容易被用來解決各種問題,因為我們知道哪些問題可以更好使用地哪些數據類型來處理解決。
原子性Redis的所有操作都是原子操作,這確保如果兩個客戶端並發訪問,Redis伺服器能接收更新的值。
豐富實用工具 支持異機主從復制Redis支持主從復制的配置,它可以實現主伺服器的完全拷貝。
以上為開發者青睞Redis的主要幾個可取之處。但是,請注意實際生產環境中企業都是結合Redis和MySQL的特定進行不同應用場景的取捨。 如緩存——熱數據、計數器、消息隊列(與ActiveMQ,RocketMQ等工具類似)、位操作(大數據處理)、分布式鎖與單線程機制、最新列表(如新聞列表頁面最新的新聞列表)以及排行榜等等 可以看見Redis大顯身手的場景。可是對於嚴謹的數據准確度和復雜的關系型應用MySQL等關系型資料庫依然不可替。
web應用中一般採用MySQL+Redis的方式,web應用每次先訪問Redis,如果沒有找到數據,才去訪問MySQL。
本質區別1、mysql:數據放在磁碟 redis:數據放在內存。
首先要知道mysql存儲在磁碟里,redis存儲在內存里,redis既可以用來做持久存儲,也可以做緩存,而目前大多數公司的存儲都是mysql + redis,mysql作為主存儲,redis作為輔助存儲被用作緩存,加快訪問讀取的速度,提高性能。
使用場景區別1、mysql支持sql查詢,可以實現一些關聯的查詢以及統計;
2、redis對內存要求比較高,在有限的條件下不能把所有數據都放在redis;
3、mysql偏向於存數據,redis偏向於快速取數據,但redis查詢復雜的表關系時不如mysql,所以可以把熱門的數據放redis,mysql存基本數據。
mysql的運行機制mysql作為持久化存儲的關系型資料庫,相對薄弱的地方在於每次請求訪問資料庫時,都存在著I/O操作,如果反復頻繁的訪問資料庫。第一:會在反復鏈接資料庫上花費大量時間,從而導致運行效率過慢;第二:反復地訪問資料庫也會導致資料庫的負載過高,那麼此時緩存的概念就衍生了出來。
Redis持久化由於Redis的數據都存放在內存中,如果沒有配置持久化,redis重啟後數據就全丟失了,於是需要開啟redis的持久化功能,將數據保存到磁碟上,當redis重啟後,可以從磁碟中恢復數據。redis提供兩種方式進行持久化,一種是RDB持久化(原理是將Reids在內存中的資料庫記錄定時mp到磁碟上的RDB持久化),另外一種是AOF(append only file)持久化(原理是將Reids的操作日誌以追加的方式寫入文件)。
redis是放在內存的~!
數據量多少絕對不是選擇redis和mysql的准則,因為無論是mysql和redis都可以集群擴展,約束它們的只是硬體(即你有沒有那麼多錢搭建上千個組成的集群),我個人覺得數據讀取的快慢可能是選擇的標准之一,另外工作中往往是兩者同是使用,因為mysql存儲在硬碟,做持久化存儲,而redis存儲在內存中做緩存提升效率。
關系型資料庫是必不可少的,因為只有關系型資料庫才能提供給你各種各樣的查詢方式。如果有一系列的數據會頻繁的查詢,那麼就用redis進行非持久化的存儲,以供查詢使用,是解決並發性能問題的其中一個手段
6. 應用Spark技術,SoData數據機器人實現快速、通用數據治理
Spark是處理海量數據的殲畢凳快速通用引擎。作為大數據處理技術,Spark經常會被人們拿來與Hadoop比較。
Hadoop已經成了大數據技術的事實標准,Hadoop MapRece也非常適合於對大規模數據集合進行批處理操作,但是其本身還存在一些缺陷。具體表現在:
1、Hadoop MapRee的表達能力有限。所有計算都需要轉換成Map和 Rece兩個操作,不能適用於所有場景,對於復雜的數據處理過程難以描述。
2、磁碟I/O開銷大。Hadoop MapRece要求每個步驟間的數據數巧序列化到磁碟,所以I/O成本很高,導致交互分析和迭代演算法開銷很大,而幾乎所有的最優化和機器學習都是迭代的。所以,Hadoop MapRece不適合於交互分析和機器學習。
3、計算延遲高。如果想要完成比較復雜的工作,就必須將一系列的MapRece作業串聯起來然後順序執行這些作業。每一個作業都是高時延的,而且只有在前一個作業完成之後下一個作業才能開始啟動。因此,Hadoop MapRece不能勝任比較復雜的、多階段的計算服務。
Spark借鑒Hadoop MapRece技術發展而來,繼承了其分布式並行計算的優點的同時,改進了MapRece的許多缺陷。具體優勢如下:
1、Spark提供廣泛的數據集操作類型(20+種),支持Java,Python和Scala API,支持互動式的Python和Scala的shell。比Hadoop更加通用。
2、Spark提供Cache機制來支持需要反復迭代的計算或者多次數據共享,減少數據讀取的I/O開銷。Spark使用內存緩存來提升性能,因此進行互動式分析也足夠快速,緩存同時提升了迭代演算法的性能,這使得Spark非常適合數據理論任務,特別是機器學習。
3、Spark提供了內存計算,把中間結果放到內存中,帶來了更高的迭代運算效率。通過支持有向無環圖(DAG)的分布式並行計算的編程框架,減少迭代過程中數據需要寫入磁碟的需求,提高處理效率。
此外,Spark還能與Hadoop無縫銜接,Spark可以使用YARN作為它的集群管理器,可以讀取HDFS、HBase等一切Hadoop的數據。
Spark在最近幾年發展迅速,相較於其他大數據平台或框架,Spark的代碼庫最為活躍。截止目前,最新發布的版本為Spark3.3.0。
也有許多數據治理工具,為了實現實時、通用的數據治理而採用Spark技術。以飛算推出的SoData數據機器人為例,是一套實時+批次、批流一體、高效的數據開發治理工具,能夠幫助企業快速實現數據應用。
相較於傳統數據加工流程,SoData數據機器人實現了流批一體數據同步機制,基氏旅於Spark和Flink框架進行深度二次開發,實現數據採集、集成、轉換、裝載、加工、落盤全流程實時+批次處理的極致體驗,秒級延遲,穩定高效平均延遲5-10s,快速響應企業數據應用需求。
除了具備Spark數據處理的優勢,SoData數據機器人的Spark體系還支持從各種數據源執行SQL生成Spark字典表,邊開發邊調試的Spark-SQL開發,支持任意結果集輸出到各類資料庫。可視化的運維、開發方式也能在極大降低數據開發、治理、應用門檻的同時,提升效率。
在某綜合醫院的信息化建設中,SoData數據機器人曾在5分鍾內完成原本需要8-9小時才能完成的數據遷移工作。
目前,SoData數據機器人已應用於金融、醫療、能源等多個行業,將持續通過創新技術,為各行業組織機構帶來更優質、快速的數據開發、治理、應用體驗。
7. 閑話國內大數據發展簡史&產業化落地
文·blogchong
之所以想要說一說這個話題,是因為下午在技術群中不經意間,就類似話題進行了比較劇烈的腦暴討論。
討論范圍包括了互聯網公開數據的挖掘、價值變現、數據獲取的合法性以及數據產業落地等相關方向。
當時就一直在思考這個問題,後續完了自己又想了幾遍,發現確實有所得,也挺多東西想表達一下的。
大數據是在2009年開始相對比較正式引入國內的,基本上與Hadoop的「入侵」國內同步。
但在那時其實並沒有實際落地的東西,除了一些大公司在試探性使用,直到2012-2013年,國外已經完成一輪「探險」,國內才陸續開始思考大數據如何落地的事了。
確實是這樣的,國內在新技術領域上,一向落後於國外半拍,而我也恰恰也是在那個時候「入坑」的。
那個時候其實很多公司企業(除了當時BAT內部使用的案例),也是在嘗試性的涉足大數據領域,一邊追逐技術的完善,一邊在探索大數據與實際業務的結合點。
直到2014年,算是大數據在國內的一個爆發點,正式的轉折點。
首先,以Hadoop為代表的生態趨於成熟,甚至結合內存處理領域、數據實時處理領域,已經形成了一套完整的大數據平台技術解決方案。
其次,已經越來越公司結束了探索性實驗,用實際的成果嘗到了大數據這種處理模式的好處,已經形成了越來越多的實際可參考的良性案例。
當然,最重要的是確實存在實際的規模數據處理的需求。其實這個需求一直存在,只是很多時候沒有找到合適的契機爆發出來。
也就是從2014開始,大數據的人才市場需求在急劇擴增,很多其他IT領域開發人員紛紛轉型到數據行業,其中以逐漸沒落的傳統IT行業為代表。
有人才市場需求,進一步促進了大數據培訓市場的發展,各種大數據培訓機構如雨後春筍般的出現。
其實這也是沒辦法的事,因為當時還沒有哪個高校開設有大數據相關的課程呢。
當然,這波浪潮同樣卷到了學術界,部分高校也意識到了這個技術大勢,陸續有不少高校開始開設大數據相關的專業課程。
2015年,隨著互聯網的發展,市場各種互聯網應用需求的飽和,導致了流量紅利的消失,讓很多企業公司不得不考慮通過數據來提升效率以及推進用戶體驗,例如推薦系統、個性化服務等。
資本市場從2014-2015年逐漸介入,進一步促進各大互聯網企業公司向數據化轉型,使得大數據這個領域進一步達到高潮。
我們知道,資本市場算是迎來半個寒冬,流量紅利的消失,o2o在15年底都死的差不多了,16年讓資本市場變得更謹慎。
但是,就算是這樣,國內很多以大數據為技術驅動的公司依然拿了不少融資,包括神策、諸葛IO、GrowingIO等第三方數據分析公司,明略數據等這種針對於服務偏傳統行業的數據公司,甚至如DataEye類似垂直領域的數據分析公司都活的好好的。
同時,在國家政策方面,2016年可謂是大數據的國家政策元年,各種國家政策開始偏向大數據。
這意味著,大數據已經從半個風口的狀態,過渡到理性、穩健的狀態,這是一個良性的狀態。
正如上面所說,目前大數據已經逐漸從「潮流」這種略帶風險性的標志狀態,過渡到穩健、良性發展的狀態。
提前「入坑」的童鞋,相信已經享受到「潮流」帶來的部分福利,包括比其他普通IT同行們略高的薪酬待遇,以及更多、更自由的選擇性等。
好吧,其中也包括我了~~ 哈哈
那麼,後續會是一種什麼樣的情況呢?
首先,數據化依然會是一個不可逆的趨勢,在資本以及政策的驅動下,更多的公司會逐漸的進行數據化,甚至包括很多傳統IT產業,一樣擋不住這個大勢。
那麼在人才市場需求上的情況呢?個人感覺需求還是在的,因為市場遠沒有達到飽和,但是福利待遇會有所下降。
這是為什麼呢?
2016-2017年,各大高校逐漸會開始投放專業的「正規軍」,是的,那些大數據專業的學生們將被正式投放到市場中了。
此外,從2014年到2016年,大數據的培訓市場一直在增加的,不管是線上的還是線下的。
這意味著,每年,哦不,應該是每幾個月都會有大量的大數據速成工投放到人才需求市場中。
最重要的一點,經過四五年的大浪淘沙,市場已經有一大批「自學成才」的「老司機」可以撐起場面了。
在人才需求以及人才的待遇上,而不是一才難求的現象了,也會逐漸的趨於良性,趨於理性(之前寫過一篇大數據招聘亂象的文章,喜歡可以看看 《你們是不是真的很缺大數據工程師?》 )。
所以,如果你從大學剛畢業出來,發現大數據沒有傳說中那麼「香饃饃」,也不要奇怪;而從大數據培訓流水線上下來的童鞋們,也需要做好准備,薪水可能無法跟你想像中那樣了,翻個幾倍之類的。
不過「老司機們」到不用太過於擔心,雖然大數據的人才市場趨於日漸飽和,但是「駕齡」足夠,「車」開的足夠溜的,依然只有那麼一小戳人。
你依然是稀缺資源,所以不要怕怕。
你看我就不怕怕,哈哈~~
雖然,這一切看似良好,但是有些東西依然值得我們更進一步的深思。
正如之前在技術群中進行腦暴討論的那樣,這幾年大數據雖然市場需求不少,但是依然難以達到產業化的狀態。
這里貼一個產業化的概念:產業化是指某種產業在市場經濟條件下,以行業需求為導向,以實現效益為目標,依靠專業服務和質量管理,形成的系列化和品牌化的經營方式和組織形式。
目前大數據的實際落地形式大部分都以輔助、加速其他業務為主,起一個催化劑,提升效率,加快速度的作用,鮮有看到以大數據作為獨立產業而存在的。
當然也有,比如上面提到的第三方數據分析商、垂直領域的DataEye,以及為企業提供大數據解決方案的明略數據等,也算是以大數據為根深立命而存在的。
但是總體來說,真的不多,而且絕大部分都是以2B的形式存在。我們知道,從格局上來看,2B的產品永遠是難以做到2C產品那種真正宏偉規模,改變產業格局的。
所以,從這點來說,雖然你市場需求放在這里,但想真正以大數據為切入點、為立足的根本做點事,其實也沒有想像中那麼容易。
糾結~~
不過作為大數據領域的半個「老司機」,依然是希望大數據這個技術領域、這個行業,有一天能夠形成獨立的、推動人類進程的一些東西。
亦如互聯網、亦如社交網路、亦如電子商務、亦如移動互聯網等!
最近一直有很多新手同行們向我請教大數據方向上的一些事,自己也一直在思考互聯網開放數據落地變現、以及大數據產業格局相關的問題。
所以,想的多了,對一些東西還是有一些看法的,藏在心中不吐不快。
也希望,上面閑話里的一些東西能夠引起你的一些共鳴,當然反駁也歡迎,歡迎一切與人格無關,與技術有關、與業態有關的探討。
下次希望有時間,能和大家一起探討一些關於互聯網開放數據落地變現相關的話題,這也是我目前一直想探索的東西,下次如果有所收獲再寫點 東西吧。
(正文完)
8. 誰能說說華為大數據一體機怎麼樣
在德國CeBIT(漢諾威消費電子、信息及通信博覽會)上,華為發布了大數據一體機,為全球的客戶提供更易部署和管理、更高性能和更低TCO的大數據解決方案,幫助客戶加速數字化轉型。
華為發布FusionCube大數據一體機
此次華為發布的FusionCube大數據一體機,使用了華為專門針對大數據應用優化的FPGA壓縮技術,可以使數據的壓縮速度從MB/s級別提升到GB/s級別,有效釋放CPU,降低落盤IO。通過該技術,有效存儲容量可提升250%,同時和傳統壓縮方案對比,可降低30%的CPU佔用率,為客戶帶來更高價值。另外,華為伺服器秉承開放、共贏的理念,與業界大數據軟體提供商廣泛開展合作,比如華為與Hortonworks建立了合作夥伴關系,加入了其MDS(Modern Data Solutions)夥伴關系項目,為雙方更加緊密的合作奠定了基礎。FusionCube大數據一體機將幫助客戶在大數據應用上提供了一站式的解決方案。
華為IT伺服器產品線總裁邱隆表示:「大數據快速的發展,能夠給客戶的數據帶來快速增值變現,華為伺服器將大數據定位為重要的戰略方向,華為伺服器在自身高質量、創新、高性價比的基礎上,致力提供一個開放的計算平台,通過和業界主流大數據廠家合作,面向客戶提供最佳性價比的大數據解決方案。華為伺服器通過與Hortonworks建立夥伴關系,實現了在大數據領域的強強聯合,將華為伺服器硬體的優勢和Hortonworks的大數據平台優勢相結合,雙方的客戶將能從這次合作中受益。通過雙方合作將給最終客戶提供簡單、高效、低TCO的大數據解決方案,幫助用戶實現數據的價值。」
9. 大數據要想落地,必備的條件是什麼
大數據要想落來地,必須有三個條件:自一是豐富的數據源,二是強大的數據挖掘和數據分析能力,三是建立完善的數據服務產業鏈,也就是商業模式。商業模式指導著公司如何賺取剩餘價值,因此確立公司在產業鏈和價值鏈中的位置,至關重要。
10. 如何保證從數據倉庫取出的數據質量
一、了解數據倉庫的表
在接到一個數據分析的任務時,第一件時間就是找到相關數據的負責人,拿到存儲數據的表和文檔。一般金融公司會有幾個部門:DEV、DE、BI、DS。作為DS的建模人員,去問誰才能獲得最准確的信息呢?
這里大部分人會選擇問DS內部的同事或者BI,因為都是做數據分析,大家也比較熟悉。但事實上,DS和BI都不是數據質量負責的人;很多時候,數據表的變動他們是不清楚的,詢問他們大概率拿到的信息都不能保證權威性。在初步了解一個數據的時候,作為DS,其實最佳的詢問對象是DE。因為DE是負責把DEV做的生產資料庫的表拉到數據倉庫或手,並構建數倉表的負責人,他們對表的結構和數據的變動是最有發言權的。
二、整理表和表之間的邏輯關系
在找到DE的負責人後,需要他們提供數據表對應的文檔,然後整理出這些表之間的邏輯關系,一衫毀嫌般數倉表都會有維度表和明細表兩大類,常見的套路就是維度表去關聯明細表。
三、理解用戶數據在數據倉庫的落庫邏輯
在熟悉了數據表裡的欄位和表的相互關系後,接下來就需要感受數據在業務邏輯中的流動和落盤。一個數據老鳥在和業務溝通時候,會在腦子里帶著表結構去詢問業務的SOP。
當業務說用戶注冊賬戶,腦子里就要想著在用戶維度表增加一行,用戶注冊的相關信息會被記錄在這個維度表裡。然後用戶填寫相關的表格提交信息,就會知道我們收集的用戶信息會按SOP流程在規定的時間落盤在用余差戶信息表中。其中哪些信息是必須非空的,哪些是可以有缺失的,缺失的時候數據表裡是None值還是默認值。
關於我們怎樣保證從數據倉庫取出的數據質量,青藤小編今天就和您分享到這里了。如果您對大數據工程有濃厚的興趣,希望這篇文章可以為您提供幫助。如果您還想了解更多關於數據分析師、大數據工程師的技巧及素材等內容,可以點擊本站的其他文章進行學習。