System Design NoSQL - 學(xué)習(xí)筆記

引用:
系統(tǒng)設(shè)計(jì)入門

NoSQL 是鍵-值數(shù)據(jù)庫(kù)爽醋、文檔型數(shù)據(jù)庫(kù)披泪、列型數(shù)據(jù)庫(kù)圖數(shù)據(jù)庫(kù)的統(tǒng)稱踪蹬。
數(shù)據(jù)庫(kù)是非規(guī)范化的,表聯(lián)結(jié)大多在應(yīng)用程序代碼中完成恶迈。

大多數(shù) NoSQL 無(wú)法實(shí)現(xiàn)真正符合 ACID 的事務(wù)涩金,支持最終一致

BASE 通常被用于描述 NoSQL 數(shù)據(jù)庫(kù)的特性暇仲。相比 CAP 理論步做,BASE 強(qiáng)調(diào)可用性超過一致性。

  • 基本可用 - 系統(tǒng)保證可用性奈附。
  • 軟狀態(tài) - 即使沒有輸入全度,系統(tǒng)狀態(tài)也可能隨著時(shí)間變化。
  • 最終一致性 - 經(jīng)過一段時(shí)間之后斥滤,系統(tǒng)最終會(huì)變一致将鸵,因?yàn)橄到y(tǒng)在此期間沒有收到任何輸入。

鍵-值存儲(chǔ)

鍵-值存儲(chǔ)通秤悠模可以實(shí)現(xiàn) O(1) 時(shí)間讀寫顶掉,用內(nèi)存或 SSD 存儲(chǔ)數(shù)據(jù)。數(shù)據(jù)存儲(chǔ)可以按字典順序維護(hù)鍵漩符,從而實(shí)現(xiàn)鍵的高效檢索一喘。鍵-值存儲(chǔ)可以用于存儲(chǔ)元數(shù)據(jù)驱还。

鍵-值存儲(chǔ)性能很高嗜暴,通常用于存儲(chǔ)簡(jiǎn)單數(shù)據(jù)模型或頻繁修改的數(shù)據(jù),如存放在內(nèi)存中的緩存议蟆。
鍵-值存儲(chǔ)提供的操作有限闷沥,如果需要更多操作,復(fù)雜度將轉(zhuǎn)嫁到應(yīng)用程序?qū)用妗?/p>

鍵-值存儲(chǔ)是如文檔存儲(chǔ)咐容,在某些情況下舆逃,甚至是圖存儲(chǔ)等更復(fù)雜的存儲(chǔ)系統(tǒng)的基礎(chǔ)。

例如:

  • Memcached
  • Redis

文檔類型存儲(chǔ)

抽象模型:將文檔作為值的鍵-值存儲(chǔ)

文檔類型存儲(chǔ)以文檔(XML、JSON路狮、二進(jìn)制文件等)為中心虫啥,文檔存儲(chǔ)了指定對(duì)象的全部信息
文檔存儲(chǔ)根據(jù)文檔自身的內(nèi)部結(jié)構(gòu)提供 API 或查詢語(yǔ)句來(lái)實(shí)現(xiàn)查詢奄妨。

基于底層實(shí)現(xiàn)涂籽,文檔可以根據(jù)集合、標(biāo)簽砸抛、元數(shù)據(jù)或者文件夾組織评雌。盡管不同文檔可以被組織在一起或者分成一組,但相互之間可能具有完全不同的字段直焙。

文檔類型存儲(chǔ)具備高度的靈活性景东,常用于處理偶爾變化的數(shù)據(jù)

例如:

  • MongoDB
  • CouchDB
  • Amazon DynamoDB
    它是完全托管的云數(shù)據(jù)庫(kù)奔誓,支持文檔鍵值存儲(chǔ)模型斤吐。它擁有靈活的數(shù)據(jù)模型、可靠的性能以及自動(dòng)的吞吐容量擴(kuò)展功能厨喂。
  • Elastic Search

列型存儲(chǔ)

列型存儲(chǔ)

抽象模型:嵌套的 ColumnFamily<RowKey, Columns<ColKey, Value, Timestamp>> 映射

類型存儲(chǔ)的基本數(shù)據(jù)單元是列 Column(名 ColKey/值 Value 對(duì))曲初。列可以在列族 Column Family(類似于 SQL 的數(shù)據(jù)表)中被分組。超級(jí)列族再分組普通列族杯聚。

你可以使用行鍵 RowKey 獨(dú)立訪問每一列臼婆,具有相同行鍵值 RowKey 的列組成一行。

每個(gè)值都包含版本的時(shí)間戳用于解決版本沖突幌绍。

Google 發(fā)布了第一個(gè)列型存儲(chǔ)數(shù)據(jù)庫(kù) Bigtable颁褂,它影響了 Hadoop 生態(tài)系統(tǒng)中活躍的開源數(shù)據(jù)庫(kù) HBase 和 Facebook 的 Cassandra。像 BigTable傀广,HBase 和 Cassandra 這樣的存儲(chǔ)系統(tǒng)將鍵以字母順序存儲(chǔ)颁独,可以高效地讀取鍵列。

列型存儲(chǔ)具備高可用性和高可擴(kuò)展性伪冰。通常被用于大數(shù)據(jù)相關(guān)存儲(chǔ)誓酒。

關(guān)于 Bigtable:
Cloud Bigtable 是 Google 面向大數(shù)據(jù)領(lǐng)域的 NoSQL 數(shù)據(jù)庫(kù)服務(wù)。它也是為 Google 搜索贮聂、Analytics(分析)靠柑、地圖和 Gmail 等眾多核心 Google 服務(wù)提供支撐的數(shù)據(jù)庫(kù)。

Bigtable 的設(shè)計(jì)目標(biāo)是以穩(wěn)定的低延遲高吞吐性能處理巨量的工作負(fù)載吓懈,因此它是運(yùn)營(yíng)和分析型應(yīng)用(包括 IoT 物聯(lián)網(wǎng)歼冰、用戶分析和金融數(shù)據(jù)分析)的理想之選。

一個(gè)簡(jiǎn)單的例子參見 Example: HBase APIs for Java "Hello World" Application

圖數(shù)據(jù)庫(kù)

圖數(shù)據(jù)庫(kù)

在圖數(shù)據(jù)庫(kù)中耻警,一個(gè)節(jié)點(diǎn)對(duì)應(yīng)一條記錄隔嫡,一個(gè)弧對(duì)應(yīng)兩個(gè)節(jié)點(diǎn)之間的關(guān)系甸怕。
圖數(shù)據(jù)庫(kù)被優(yōu)化用于表示外鍵繁多的復(fù)雜關(guān)系或多對(duì)多關(guān)系。

圖數(shù)據(jù)庫(kù)為存儲(chǔ)復(fù)雜關(guān)系的數(shù)據(jù)模型腮恩,如社交網(wǎng)絡(luò)梢杭,提供了很高的性能。它們相對(duì)較新秸滴,尚未廣泛應(yīng)用式曲,查找開發(fā)工具或者資源相對(duì)較難。許多圖只能通過 REST API 訪問缸榛。

例如:

SQL 還是 NoSQL

選取 SQL 的原因:

  • 結(jié)構(gòu)化數(shù)據(jù)吝羞,嚴(yán)格的模式
  • 關(guān)系型數(shù)據(jù)
  • 需要復(fù)雜的聯(lián)結(jié)操作
  • 事務(wù)
  • 清晰的擴(kuò)展模式
  • 既有資源更豐富:開發(fā)者、社區(qū)内颗、代碼庫(kù)钧排、工具等
  • 通過索引進(jìn)行查詢非常快

選取 NoSQL 的原因:

  • 半結(jié)構(gòu)化數(shù)據(jù)均澳,動(dòng)態(tài)或靈活的模式
  • 非關(guān)系型數(shù)據(jù)
  • 不需要復(fù)雜的聯(lián)結(jié)操作
  • 存儲(chǔ) TB (甚至 PB)級(jí)別的數(shù)據(jù)
  • 高數(shù)據(jù)密集的工作負(fù)載
  • IOPS 高吞吐量

適合 NoSQL 的示例數(shù)據(jù):

  • 埋點(diǎn)數(shù)據(jù)和日志數(shù)據(jù)
  • 排行榜或者得分?jǐn)?shù)據(jù)
  • 臨時(shí)數(shù)據(jù)恨溜,如購(gòu)物車
  • 頻繁訪問的(“熱”)表
  • 元數(shù)據(jù)/查找表
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市找前,隨后出現(xiàn)的幾起案子糟袁,更是在濱河造成了極大的恐慌,老刑警劉巖躺盛,帶你破解...
    沈念sama閱讀 217,734評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件项戴,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡槽惫,警方通過查閱死者的電腦和手機(jī)周叮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)界斜,“玉大人仿耽,你說我怎么就攤上這事「鬓保” “怎么了项贺?”我有些...
    開封第一講書人閱讀 164,133評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)峭判。 經(jīng)常有香客問我开缎,道長(zhǎng),這世上最難降的妖魔是什么朝抖? 我笑而不...
    開封第一講書人閱讀 58,532評(píng)論 1 293
  • 正文 為了忘掉前任啥箭,我火速辦了婚禮谍珊,結(jié)果婚禮上治宣,老公的妹妹穿的比我還像新娘急侥。我一直安慰自己,他們只是感情好侮邀,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評(píng)論 6 392
  • 文/花漫 我一把揭開白布坏怪。 她就那樣靜靜地躺著,像睡著了一般绊茧。 火紅的嫁衣襯著肌膚如雪铝宵。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,462評(píng)論 1 302
  • 那天华畏,我揣著相機(jī)與錄音鹏秋,去河邊找鬼。 笑死亡笑,一個(gè)胖子當(dāng)著我的面吹牛侣夷,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播仑乌,決...
    沈念sama閱讀 40,262評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼百拓,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了晰甚?” 一聲冷哼從身側(cè)響起衙传,我...
    開封第一講書人閱讀 39,153評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎厕九,沒想到半個(gè)月后蓖捶,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,587評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡扁远,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評(píng)論 3 336
  • 正文 我和宋清朗相戀三年腺阳,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片穿香。...
    茶點(diǎn)故事閱讀 39,919評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡亭引,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出皮获,到底是詐尸還是另有隱情焙蚓,我是刑警寧澤,帶...
    沈念sama閱讀 35,635評(píng)論 5 345
  • 正文 年R本政府宣布洒宝,位于F島的核電站购公,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏雁歌。R本人自食惡果不足惜宏浩,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望靠瞎。 院中可真熱鬧比庄,春花似錦求妹、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至神凑,卻和暖如春净神,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背溉委。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工鹃唯, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人瓣喊。 一個(gè)月前我還...
    沈念sama閱讀 48,048評(píng)論 3 370
  • 正文 我出身青樓俯渤,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親型宝。 傳聞我的和親對(duì)象是個(gè)殘疾皇子八匠,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評(píng)論 2 354

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