日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > windows >内容正文

windows

后台系统可扩展性学习笔记(十二)NoSQL

發(fā)布時(shí)間:2023/12/1 windows 59 豆豆
生活随笔 收集整理的這篇文章主要介紹了 后台系统可扩展性学习笔记(十二)NoSQL 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

  • NoSQL定義
  • NoSQL種類
    • 鍵值存儲(chǔ)
    • 文檔存儲(chǔ)
    • 寬列存儲(chǔ)
    • 圖形數(shù)據(jù)庫
  • NoSQL 意味著什么
    • ACID vs. BASE
  • SQL or NoSQL

NoSQL定義

不同于關(guān)系型數(shù)據(jù)庫,NoSQL 數(shù)據(jù)庫(也叫非 SQL 或非關(guān)系型數(shù)據(jù)庫)提供的數(shù)據(jù)存儲(chǔ)、檢索機(jī)制并不是基于表關(guān)系建模的。沒有了數(shù)據(jù)表,自然就沒有了多表連查(join操作)的性能顧慮,范式約束和反范式化的抉擇也就不復(fù)存在了。
對(duì)于 NOSQL,另一種有趣的理解是 Not Only SQL,在關(guān)系型數(shù)據(jù)庫之外的廣闊世界里,數(shù)據(jù)不一定非要打平存放到二維表格里,關(guān)系也不是只能用主鍵、外鍵、關(guān)系表來描述。

NoSQL種類

不同于關(guān)系型數(shù)據(jù)庫中的表結(jié)構(gòu),NoSQL 數(shù)據(jù)庫支持一些更靈活的數(shù)據(jù)結(jié)構(gòu),使得某些操作更快。

鍵值存儲(chǔ)

鍵值存儲(chǔ)(Key-value store)是最簡(jiǎn)單的 NoSQL 數(shù)據(jù)模型,只能存鍵值對(duì)兒,只能按 key 查詢,因?yàn)樗鎯?chǔ)的值對(duì)數(shù)據(jù)庫系統(tǒng)不透明(類似于 BLOB),無法根據(jù)值的特征查找或建立索引。
有些鍵值數(shù)據(jù)庫能夠?qū)?key 進(jìn)行排序,從而支持范圍查詢(檢索 key 在特定區(qū)間內(nèi)的數(shù)據(jù)),比如找出工號(hào)大于 100000 的新人信息。
數(shù)據(jù)模型上是個(gè)哈希表,因此能夠達(dá)到O(1)的讀寫性能,適用于簡(jiǎn)單、或者頻繁更改的數(shù)據(jù),經(jīng)常用作內(nèi)存緩存,例如Memcached、Redis。

文檔存儲(chǔ)

文檔存儲(chǔ)(Document store)以文檔(XML、JSON 等半結(jié)構(gòu)化數(shù)據(jù))為中心建模,相當(dāng)于增強(qiáng)版的鍵值存儲(chǔ),面向文檔提供更精細(xì)的數(shù)據(jù)操作。與鍵值存儲(chǔ)最大的區(qū)別在于數(shù)據(jù)庫能夠理解并處理所存儲(chǔ)的值(即文檔),根據(jù)值的特征(即文檔的內(nèi)部結(jié)構(gòu))查詢和建立索引。此外,文檔還支持嵌套,甚至MongoDB、CouchDB等文檔數(shù)據(jù)庫還提供了類 SQL 的查詢語言,以支持復(fù)雜查詢。適用于持久化存儲(chǔ),用來存放不經(jīng)常更改的數(shù)據(jù),作為關(guān)系型數(shù)據(jù)庫的一般替代方案。

寬列存儲(chǔ)

寬列存儲(chǔ)(Wide column store)中,列(column)是最小的數(shù)據(jù)單元,每一列是個(gè)名值對(duì)兒(以及用于版本控制和沖突解決的時(shí)間戳),在列之上還有一級(jí)超級(jí)列(super column):

僅含列的行稱為列族(column family),含有超級(jí)列的行稱為超級(jí)列族(super column family),每一行(即,一個(gè)列族或超級(jí)列族)代表一個(gè)實(shí)體,包含該實(shí)體的所有相關(guān)信息:

數(shù)據(jù)模型上是個(gè)二維 Map,特點(diǎn)是高性能以及良好的擴(kuò)展性,因此適用于非常大的數(shù)據(jù)集,被 Twitter、Facebook 等社交網(wǎng)絡(luò)用來存儲(chǔ)海量用戶所產(chǎn)生的數(shù)據(jù)。

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

數(shù)據(jù)基于圖來建模,圖中每個(gè)節(jié)點(diǎn)代表一條記錄,每條邊表示節(jié)點(diǎn)之間的關(guān)系,因此能夠輕松描述數(shù)據(jù)對(duì)象之間的復(fù)雜關(guān)系,比如關(guān)系模型中復(fù)雜的外鍵和多對(duì)多關(guān)系

圖形數(shù)據(jù)庫的實(shí)際應(yīng)用還不十分成熟,甚至還沒有一種被廣泛采用的標(biāo)準(zhǔn)化查詢語言,但其連接性優(yōu)勢(shì)尤其適用于具有復(fù)雜關(guān)系的數(shù)據(jù)模型(比如社交網(wǎng)絡(luò)),值得期待。

NoSQL 意味著什么

采用簡(jiǎn)單的 NoSQL 模型(如鍵值存儲(chǔ)),相當(dāng)于把一部分工作從數(shù)據(jù)庫層轉(zhuǎn)移到了應(yīng)用層。與數(shù)據(jù)庫層相比,應(yīng)用層通常更容易(橫向)擴(kuò)展,因此這種工作量轉(zhuǎn)移有助于提升系統(tǒng)的可擴(kuò)展性,將復(fù)雜的數(shù)據(jù)操作拋給應(yīng)用層來處理,以求更大的優(yōu)化空間。
甚至事務(wù)等強(qiáng)一致性保證也要由應(yīng)用層來處理,因?yàn)槎鄶?shù) NoSQL 數(shù)據(jù)庫并不提供事務(wù)支持。

ACID vs. BASE

關(guān)于這兩者的定義解釋可以看看我以前的文章:
BASE理論(基本可用策略+ 最終一致性實(shí)現(xiàn)) 和 什么是ACID理論(二階段、三階段提交、TCC)
不同于關(guān)系型數(shù)據(jù)庫中追求的ACID(事務(wù)的 4 大特性):

  • Atomicity(原子性):一系列操作要么全部成功要么失敗全部回滾
  • Consistency(一致性):事務(wù)執(zhí)行前后數(shù)據(jù)庫都必須處于一致性狀態(tài)(滿足既定的所有一致性約束)
  • Isolation(隔離性):并發(fā)事務(wù)操作的結(jié)果狀態(tài)與按順序執(zhí)行一樣
  • Durability(持久性):事務(wù)一旦提交,對(duì)數(shù)據(jù)的改變就是永久性的,遭遇故障也不會(huì)丟失已提交的結(jié)果

NoSQL 在CAP 的抉擇中對(duì) C 做了妥協(xié),允許最終一致性,即BASE:

  • Basically Available(基本可用):讀寫操作盡可能保證可用,但不保證任何一致性
  • Soft state(軟狀態(tài)):由于沒有一致性保證,在一段時(shí)間后,只是有可能讀到最新狀態(tài),因?yàn)榭赡苓€沒收斂
  • Eventual consistency(最終一致性):如果系統(tǒng)運(yùn)行正常,等待足夠長(zhǎng)的時(shí)間后,最終能夠讀到最新狀態(tài)

也就是說,在分布式環(huán)境下,(大多數(shù))NoSQL 數(shù)據(jù)庫僅保證最終一致性,可能無法立即讀到最新的數(shù)據(jù)。

SQL or NoSQL

相比之下,SQL 數(shù)據(jù)庫(關(guān)系型數(shù)據(jù)庫)的優(yōu)勢(shì)在于:

  • 支持事務(wù)操作
  • 有明確的擴(kuò)展模式
  • 開發(fā)人員、社區(qū)、工具等相對(duì)成熟

主要缺陷是:

  • 復(fù)雜的連表查詢導(dǎo)致數(shù)據(jù)讀取性能不佳
  • 不太容易擴(kuò)展(手動(dòng)分片)
  • 關(guān)系模型與 OOP 之間存在較大差異(Object-relational impedance mismatch)
  • 只支持存取結(jié)構(gòu)化數(shù)據(jù),關(guān)系模式(如表結(jié)構(gòu))必須預(yù)先定義,并且修改成本高

而 NoSQL 數(shù)據(jù)庫(非關(guān)系型數(shù)據(jù)庫)的優(yōu)勢(shì)集中在:

  • 不存在復(fù)雜的連表查詢
  • 容易擴(kuò)展(一些 NoSQL 數(shù)據(jù)庫支持自動(dòng)分片)
  • 與 OOP 數(shù)據(jù)模型一致,易于使用
  • 不必預(yù)先定義數(shù)據(jù)模式,支持存取快速變化的結(jié)構(gòu)化、半結(jié)構(gòu)化和非結(jié)構(gòu)化數(shù)據(jù)
  • 讀寫性能(IOPS)很高,適合數(shù)據(jù)密集型工作

主要缺陷在于:

  • 缺少?gòu)?qiáng)一致性保證
  • 開發(fā)人員、社區(qū)、工具等沒那么成熟

因此,NoSQL 數(shù)據(jù)庫適用于:

  • 快速變化數(shù)據(jù),如點(diǎn)擊流(click stream)數(shù)據(jù)或日志數(shù)據(jù)
  • 排行榜或評(píng)分?jǐn)?shù)據(jù)
  • 臨時(shí)數(shù)據(jù),如購(gòu)物車數(shù)據(jù)
  • 頻繁訪問的熱點(diǎn)數(shù)據(jù)
  • 元數(shù)據(jù)(metadata),以及查找表(lookup tables)

總結(jié)

以上是生活随笔為你收集整理的后台系统可扩展性学习笔记(十二)NoSQL的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。