《Designing Data-Intensive Applications》學(xué)習(xí)筆記 Chapter1-2

一、什么是 Data-Intensive applications

Data-Intensive applications是相對于 Cpu-Intensive而言的寸认,由于摩爾定律的發(fā)展,cpu已經(jīng)不是瓶頸盾戴,而隨著大數(shù)據(jù)時代的到來油吭,導(dǎo)致Data-Intensive 稱為了新的關(guān)注點

二勾扭、Data Systems 關(guān)鍵的3個三個方面

databases矫钓,queue要尔,cache等,由于目前框架都支持多種傳統(tǒng)分類的功能新娜,因此可以將他們通通當(dāng)做data systems進(jìn)行處理

  • 說一千赵辕,道一萬,對于一個 數(shù)據(jù)系統(tǒng)概龄,我們最關(guān)心的就3個还惠,reliablity,scalability私杜,maintainability

2.1 Reliablity

可持續(xù)地正確工作

設(shè)計一個 fault-tolerant 系統(tǒng)蚕键,有很多方面可以考慮,但反直覺的是歪今,人為的引發(fā)錯誤對系統(tǒng)也是有意義嚎幸。這是因為颜矿,很多情況下寄猩,嚴(yán)重的bug是源于糟糕的容錯能力,在開發(fā)骑疆,測試和生產(chǎn)上主動引發(fā)bug可以解決更嚴(yán)重的bug
例如:netflix的 chaos monkey

  • hardware fault
    通過備用電源等硬件技術(shù)可以粗略的估算一臺服務(wù)器可以平穩(wěn)工作數(shù)年田篇,但不是100%保證硬件系統(tǒng)不會宕機(jī)
  • software errors
    第一部分是系統(tǒng)錯誤,這些很難處理箍铭。如千年蟲等泊柬,帶寬等。但這些問題很少诈火,每次發(fā)生都很嚴(yán)重
  • human errors
    最常見的fault了

2.2 Scalability

面向未來擴(kuò)展的角度兽赁,處理未來增長負(fù)載的能力

舉例:twitter的2種實現(xiàn)方式:

  • 第一版twitter:所有人發(fā)出的tweet被插入一個中心化的tweets擂达,每個人讀取的時候钻趋,去tweets讀取自己發(fā)的和自己follow的人的tweet功炮,再merge返回瞧柔。
    隨著規(guī)模擴(kuò)大很難持續(xù)

  • 第二版twitter瓢湃,為每個用戶維護(hù)一個時間線述吸,假設(shè)你發(fā)了一個tweet盏求,就會推送到每個follow你twitter用戶噪漾,那個用戶就加入到自己的時間線上充活,在放入緩存
    這個潛在的問題時蜂莉,你維護(hù)的規(guī)模擴(kuò)大了蜡娶,假設(shè)某個明星有3000W的follow,此明星發(fā)一個tweet映穗,意味著要為3000W個用戶維護(hù)新增時間線內(nèi)容窖张,twitter設(shè)立了要在5s內(nèi)完成的目標(biāo)

  • 最終實現(xiàn),為大部分人采用維護(hù)單獨時間線方式蚁滋,因為一個人平均75個followee荤堪,但為少部分擁有很大規(guī)模follower的人,采用方案1的中心時間線枢赔。 read twitter的時候采用2者的結(jié)合澄阳,你關(guān)注的普通人就從你的時間線讀取,你關(guān)注的名人從中心時間線讀取踏拜,再結(jié)合在一起

關(guān)于指標(biāo):通常不采用平均時間碎赢,而是采用百分比,90%的用戶響應(yīng)時間等速梗。

2.3 Maintainability

legacy-system是一個令人頭痛的問題肮塞,你無法避免可能接收別人的爛代碼,但要盡量避免自己也對別人造成這樣的問題姻锁。
最重要是關(guān)注3方面:

  • Operability
    即操作順暢:這塊其實可以參考ElasticSearch
    進(jìn)程狀態(tài)枕赵,heathly,錯誤的追蹤位隶,安全系統(tǒng)拷窜,相應(yīng)的輔助控制插件,即你可能關(guān)心的涧黄,最好都有相應(yīng)的支持
  • Simplicity
    從代碼到模塊設(shè)計到架構(gòu)篮昧,關(guān)鍵點就是抽象,抽象可明晰這個環(huán)節(jié)各個組成的功能范圍笋妥,減少復(fù)雜性
  • Evolvablity/entensibility

三懊昨、數(shù)據(jù)模型和查詢語言

3.1 數(shù)據(jù)庫模型

  • relational database
  • NoSQL--not only SQL
    優(yōu)點:1、scalability春宣,更大的吞吐量 2酵颁、商業(yè)上免費 3.傳統(tǒng)數(shù)據(jù)庫不支持的特殊查詢 4、不需要嚴(yán)格的關(guān)系型表月帝,使用更為靈活

3.2 Object-Relation Mismatch

指的就是 Object-oriented progreamming 和 SQL data model之前的錯位
因此產(chǎn)生了許多 ORM框架(Object-relational mapping)
舉例了一個 one-to-many 例子


image.png

每一個簡歷選項躏惋,如工作經(jīng)歷,可能還有很多
演變歷程
1.傳統(tǒng)數(shù)據(jù)庫:一個主表嫁赏,然后通過外鍵關(guān)聯(lián)其他表
2.later:數(shù)據(jù)庫支持row存儲 multi-valued data其掂,大大減少關(guān)聯(lián)的復(fù)雜度
3.第三種選擇:一個document包含所有,在one-to-many的情景中潦蝇,大大減少了復(fù)雜度

3.3 many-to-one 和 Many-to-many 關(guān)系的處理

Join 成本款熬,傳統(tǒng)數(shù)據(jù)庫新增數(shù)據(jù) join是非常簡單的深寥,但document并不是特別容易,設(shè)計時需要適合應(yīng)用贤牛,盡量 join-free


image.png

如這個例子惋鹅,將變動的工作經(jīng)歷,單獨作為了一個entity的引用殉簸,以減少整個大文檔的變動闰集。這在我理解中其實也是和關(guān)系型數(shù)據(jù)庫一樣,進(jìn)行了外鍵連接般卑,還有更為復(fù)雜的many-to-many關(guān)系武鲁,必須實際考慮修改的頻率,文檔的大小蝠检,服務(wù)器性能等因為沐鼠。
在這個簡歷的例子中,由于簡歷并不是一個更新頻率高的文檔叹谁,其實整個文檔重建的刷入性能消耗一點時間是完全可以接受的饲梭,并不需要特殊處理。使用文檔焰檩,加速查詢時的速度才是關(guān)鍵的

3.4 Query Languages for Data

這里將查詢分為2類憔涉,一類是 declarative query,如SQL析苫,CSS等兜叨,另一類是利用 imperative code去查詢?nèi)鏹ava等
2者的區(qū)別

  • imperative code:如java使用DOM時,你知道每一步是如何解析的藤违,知道每一個細(xì)節(jié)
  • declarative query:你只是提供了你所需數(shù)據(jù)的條件浪腐,符合這些的都會返回纵揍,數(shù)據(jù)引擎對于你封裝了實現(xiàn)細(xì)節(jié)顿乒,你不用去關(guān)心底層到底是如何得到這些數(shù)據(jù)的
  • MapReduce 的query
    MapReduce作為處理數(shù)據(jù)流的理念流行起來,那么對此應(yīng)該如何進(jìn)行查詢
    MapReduce是介于 imperative code 和 imperative code 的一個維度 ,就是一個進(jìn)化未完成的東西泽谨,較低層次的編程模型
    MongoDB的例子
db.observations.mapReduce(
function map() {
      var year = this.observationTimestamp.getFullYear();
      var month = this.observationTimestamp.getMonth() + 1;
      emit(year + "-" + month, this.numAnimals);
      },
function reduce(key, values) {
    return Array.sum(values);
      },
      {
    query: { family: "Sharks" },
    out: "monthlySharkReport"
     }
);

3.5 Graph-Like Data Models

many-to-many的關(guān)系璧榄,一般不選用document 模型,而使用relational database吧雹,但如果你的數(shù)據(jù)大部分全是many-to-many骨杂,哪怕你用了relational database,你的查詢?nèi)匀皇菑?fù)雜的雄卷。為應(yīng)對這種情況搓蚪,有專門的 graph-like Data Models進(jìn)行處理

Graph-Like Data Models 基本組成

  • node (entities)
  • edge (relationships)

舉例:
Social graphs
Vertices are people, and edges indicate which people know each other.
The web graph
Vertices are web pages, and edges indicate HTML links to other pages.
Road or rail networks
Vertices are junctions, and edges represent the roads or railway lines between
them.
為了集中重點,此部分寫在數(shù)據(jù)庫系列中

因為這塊圖不怎么了解丁鹉,寫在另一個篇中
http://www.reibang.com/p/830e7664f8b1

四妒潭、總結(jié)

主要講了3種數(shù)據(jù)模型悴能,relational,document雳灾,graph漠酿,這些是主要的,但為了很多特殊的用途谎亩,還有許多其他的模型
如基因組炒嘲,物理研究大數(shù)據(jù),全文搜索等

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末匈庭,一起剝皮案震驚了整個濱河市夫凸,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌阱持,老刑警劉巖寸痢,帶你破解...
    沈念sama閱讀 222,104評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異紊选,居然都是意外死亡啼止,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評論 3 399
  • 文/潘曉璐 我一進(jìn)店門兵罢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來献烦,“玉大人,你說我怎么就攤上這事卖词」牵” “怎么了?”我有些...
    開封第一講書人閱讀 168,697評論 0 360
  • 文/不壞的土叔 我叫張陵此蜈,是天一觀的道長即横。 經(jīng)常有香客問我,道長裆赵,這世上最難降的妖魔是什么东囚? 我笑而不...
    開封第一講書人閱讀 59,836評論 1 298
  • 正文 為了忘掉前任,我火速辦了婚禮战授,結(jié)果婚禮上页藻,老公的妹妹穿的比我還像新娘。我一直安慰自己植兰,他們只是感情好份帐,可當(dāng)我...
    茶點故事閱讀 68,851評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著楣导,像睡著了一般废境。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,441評論 1 310
  • 那天噩凹,我揣著相機(jī)與錄音朦促,去河邊找鬼。 笑死栓始,一個胖子當(dāng)著我的面吹牛务冕,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播幻赚,決...
    沈念sama閱讀 40,992評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼禀忆,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了落恼?” 一聲冷哼從身側(cè)響起箩退,我...
    開封第一講書人閱讀 39,899評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎佳谦,沒想到半個月后戴涝,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,457評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡钻蔑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,529評論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了咪笑。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,664評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖扬虚,靈堂內(nèi)的尸體忽然破棺而出辜昵,到底是詐尸還是另有隱情,我是刑警寧澤贷洲,帶...
    沈念sama閱讀 36,346評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站诵叁,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏碑诉。R本人自食惡果不足惜进栽,卻給世界環(huán)境...
    茶點故事閱讀 42,025評論 3 334
  • 文/蒙蒙 一快毛、第九天 我趴在偏房一處隱蔽的房頂上張望格嗅。 院中可真熱鬧唠帝,春花似錦、人聲如沸襟衰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽苔悦。三九已至,卻和暖如春灾挨,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背劳澄。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評論 1 272
  • 我被黑心中介騙來泰國打工秒拔, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留砂缩,地道東北人三娩。 一個月前我還...
    沈念sama閱讀 49,081評論 3 377
  • 正文 我出身青樓雀监,卻偏偏與公主長得像眨唬,于是被迫代替她去往敵國和親匾竿。 傳聞我的和親對象是個殘疾皇子蔚万,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,675評論 2 359

推薦閱讀更多精彩內(nèi)容