《大資料日知錄:架構與演算法》前言
像移動網際網路、o2o、可穿戴裝置等概念一樣,「大資料」從甫一提出到颶風般席捲並風靡全球,從最初的技術名詞到形成滲透各行各業的社會現象,所耗時間僅幾年而已,其興也勃焉。
那麼,大資料是否會像很多曾經火熱現在已難覓蹤跡的流行概念一樣,將來某日,人們靜心抬眼,發現風已去而水波不興,徒留夕陽下波光粼粼的漣漪,讓人不禁哀嘆其亡也忽焉?
本書的背景
目前看彷彿有此跡象,當乙個概念火爆到從街頭隨便抓乙個路人,他都能跟你滔滔不絕地侃侃而談;當乙個新名詞鋪天蓋地而來,讓你熟悉到再見一次就要吐的程度,這些確實是典型的泡沫將破的徵兆。目前業已出現越來越多的質疑聲音,在這種狂熱的氛圍下,理性的質疑是最難能可貴的,畢竟大資料歸根結底是少數派的遊戲,而現狀好像是人人都處於大資料進行時的狀態,這讓其看上去顯得不甚理性。
但是,從社會發展趨勢的角度,很明顯大資料會是目前肉眼可及的視野範圍裡能看到的最大趨勢之一。從傳統it 業到網際網路、網際網路到移動網際網路,從以智慧型手機和pad 為主要終端載體的移動網際網路到可穿戴裝置的移動網際網路,然後再到萬物互聯的物聯網,這一定是不可違抗的發展規律和前進方向。伴隨著這個趨勢必然有越來越多、形態越來越豐富的超量資料不斷產生,而大資料明顯是由此衍生出來的明確且必然的發展趨勢。
所以,歸根結底,大資料概念是個短期內炒得過熱,但是從長期來看炒得不足的領域。再過十年如果回望現在,也許會發現:我們今天正在巍峨群山的山腳徘徊,試圖找出一條通往山頂的羊腸小道,如此而已。我們當然不能盲目跟風不斷追逐切換熱點,但是忽視趨勢的力量同樣也不是乙個理性的選擇。
本書的內容
以上所述是本書誕生的大背景,目前市面上陸陸續續已經有不少講大資料的書,有面向大眾的概念普及類圖書,也有講解大資料技術的書,本書屬於第二類,專注於與大資料處理有關的架構與演算法,我相信這是一本比較全面地分門別類梳理大資料技術的書籍。從大約2010 年年底起我開始關注並收集整理這方面的技術資料,當然那時還沒有聽說過大資料的概念,現在的所謂大資料已經是後來的事情了。最初引起我關注的是與nosql 相關的技術,尤其是google 和亞馬遜的一系列相關工作,當時隱約地覺得這是一種新的技術發展趨勢,甚至是一次技術范型的大轉換,所以逐步開始投入越來越多的精力到其中,這包括將相關技術資料分門別類地進行收集、閱讀和整理,利用業餘時間開始一章一節地慢慢寫本書,以及在實際工作中盡可能地應用這些技術和系統等若干方面。
本書的寫作
斷斷續續完成本書花了大約3 年左右的時間,和最初預估的時間還是比較吻合的,這一方面是由於我可投入的時間本身就不多,但是還是希望能夠寫出一本高質量的技術書籍,所以不得不慢工出細活;另外一方面是由於大資料處理作為乙個新領域,其涉及的方方面面的技術點實在太多,而且正處於快速的發展過程中。這個領域是我接觸過的領域中知識涵蓋面最廣的,從底層的硬體開始,到涉及基礎理論、大規模資料儲存系統、分布式架構設計、各種不同適用場景下的差異化系統設計思路、機器學習與資料探勘並行演算法、層出不窮的新架構和新系統等,說無所不包有些誇張但是所需掌握知識點之多確實是很少見的。而且因為其處於快速發展的過程當中,所以各種技術紛繁蕪雜,並無乙個成熟的知識分類體系可供參考,需要不斷梳理相關知識點之間的相互區別和聯絡並進行分門別類,如何將紛雜多樣的技術梳理成清晰合理的章節內容曾讓我頭疼不已,當然發展到目前,整個大資料技術體系脈絡已經日漸明晰,我相信參考本書目錄可以清晰地發現這一點。另外乙個阻礙是可參考的資料和系統多而雜,且質量良莠不齊,需要從中汰劣餘優,盡可能選出有代表性及有發展潛力的理論、方案和系統,這也是很耗費精力的過程,儘管本書每章後只列出了很少一部分參考資料,但是實際參考的文獻與系統要數倍於此,只列出精華部分是為了縮短讀者選擇高質量文獻的過程。
事實上也是如此,最近幾年各種國際頂級會議中,中國人發表的**比例越來越高可以證明這一點,而很明顯這個趨勢還會進一步加快。之所以提這個,是因為大資料相關技術研發道理其實也是一樣的,儘管目前國內在這方面的實力和國外相比還有很大的差距,優秀的系統和技術方案往往都是google、亞馬遜、facebook、linkedin 等這些國際知名網際網路公司提出的,國內工業界的技術水準大部分還僅僅停留在能把開源的大資料系統應用起來解決手頭碰到的問題這個階段,但是我相信在不遠的將來,國內會逐步湧現出具有國際水準的大資料系統與解決方案,其中的道理與上面所舉的學術進步的例子是一樣的。目前大部分優秀系統是開源的,相關技術文獻也很容易找到,作為有進取心的技術人員,現在所缺乏的不是沒有可參考的學習資料,相反是資料太多但良莠不齊反而讓很多人無所適從,不知該如何下手。國內的技術人員只要肯下功夫、會下功夫,有好的職業發展環境和高的自我期許及技術理想,假以時日,越來越多的世界級水準的大資料處理系統出自中國人之手是完全可以指日可待的。我期望本書對於這些技術人員在全面了解吸收並掌握大資料處理的優秀技術過程中,能貢獻綿薄之力。沈利也參與了本書的部分編寫工作。
感謝我的妻子、岳父、岳母,以及爸爸、媽媽,儘管歷時3 年才得以完成本書,但是若是沒有你們的全身心支援,這本書2020 年也無法面世。
對了,還有我的女兒,親愛的雪晴,從蹣跚邁出人生第一步,到咿咿呀呀說出第一句話,我總是想起,小小的你,迷茫地站在這遍布新奇的世界裡,東張西望時無助的樣子,這總是令人心疼。
你無數人生的第一次帶給我太多歡樂,而我陪你的時間又太少太少。每次聽到你用小手咚咚敲著書房緊閉的門,這經常讓我感到惶惑,不知道這麼狠心對你是對還是錯,但是又不得不狠下心來。我相信將來一定會後悔沒有給你更多的時間,把你介紹給這色彩斑斕而殘酷的世界,囑咐它在今後的日子裡能善待你一些。我多想陪你直到你白髮蒼蒼的歲月:在初秋的午後陽光下,看到你坐在院中的婆娑樹影裡,給你的兒孫講故事,淺笑依然,仿似今天。我可以清楚地想象那時的場景,清晰得就像一切就發生在眼前。雖然我深切地知道這是永不可實現的奢望,但這個夢想會永遠放在我心裡,就像你清澈的目光和純真的笑容一樣。
時間是我們的朋友,也是我們的敵人,希望你們能夠原諒我。
張俊林2014 年3 月於北京
《大資料日知錄 架構與演算法》試讀 隨想
隨想一 大資料是什麼?做為一位技術人員,如果有人問我,大資料是什麼我該如何解答?1.現在你去蘇寧購物,蘇寧每天上萬的 量,蘇寧 提供免費的wifi,乙個月下來有幾十萬的 量,一年有上百萬的 量,這些流量背後就是活生生的資料,這些由量拼成的資料就是大資料.隨想二 大資料有什麼價值呢?拿上面的例子來說....
大資料日知錄(一)資料分片與路由
概念 目前主流的大資料儲存與計算系統通常採用橫向擴充套件 scale out 的方式支援系統可擴充套件性,即通過增加機器數目來獲得水平擴充套件能力。對於待儲存處理的海量資料,需要通過資料分片 shard partition 來將資料進行切分並分配到各個機器中去,資料分片後如何找到某條記錄的儲存位置就...
《資料結構與演算法》 前言
一 演算法 演算法是用來解決一種問題的計算方法,而選擇什麼樣的演算法就要取決於計算機的記憶體 程式設計師的編碼能力 以及演算法的高效性,而且還需要考慮很多實際的問題,並不是乙個單純的數學問題。多於表來說就沒有這些字段,但是表中的索引很好的解決了查詢效率的問題,而單向鍊錶就不行了,但是在在做插入和刪除...