后臺系統可擴展性學習筆記(十二)NoSQL

文章目錄

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

NoSQL定義

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

NoSQL種類

不同于關系型數據庫中的表結構,NoSQL 數據庫支持一些更靈活的數據結構,使得某些操作更快。

鍵值存儲

鍵值存儲(Key-value store)是最簡單的 NoSQL 數據模型,只能存鍵值對兒,只能按 key 查詢,因為所存儲的值對數據庫系統不透明(類似于 BLOB),無法根據值的特征查找或建立索引。
有些鍵值數據庫能夠對 key 進行排序,從而支持范圍查詢(檢索 key 在特定區間內的數據),比如找出工號大于 100000 的新人信息。
數據模型上是個哈希表,因此能夠達到O(1)的讀寫性能,適用于簡單、或者頻繁更改的數據,經常用作內存緩存,例如MemcachedRedis

文檔存儲

文檔存儲(Document store)以文檔(XML、JSON 等半結構化數據)為中心建模,相當于增強版的鍵值存儲,面向文檔提供更精細的數據操作。與鍵值存儲最大的區別在于數據庫能夠理解并處理所存儲的值(即文檔),根據值的特征(即文檔的內部結構)查詢和建立索引。此外,文檔還支持嵌套,甚至MongoDBCouchDB等文檔數據庫還提供了類 SQL 的查詢語言,以支持復雜查詢。適用于持久化存儲,用來存放不經常更改的數據,作為關系型數據庫的一般替代方案。

寬列存儲

寬列存儲(Wide column store)中,列(column)是最小的數據單元,每一列是個名值對兒(以及用于版本控制和沖突解決的時間戳),在列之上還有一級超級列(super column):
在這里插入圖片描述
僅含列的行稱為列族(column family),含有超級列的行稱為超級列族(super column family),每一行(即,一個列族或超級列族)代表一個實體,包含該實體的所有相關信息:
在這里插入圖片描述
數據模型上是個二維 Map,特點是高性能以及良好的擴展性,因此適用于非常大的數據集,被 Twitter、Facebook 等社交網絡用來存儲海量用戶所產生的數據。

圖形數據庫

數據基于圖來建模,圖中每個節點代表一條記錄,每條邊表示節點之間的關系,因此能夠輕松描述數據對象之間的復雜關系,比如關系模型中復雜的外鍵和多對多關系

圖形數據庫的實際應用還不十分成熟,甚至還沒有一種被廣泛采用的標準化查詢語言,但其連接性優勢尤其適用于具有復雜關系的數據模型(比如社交網絡),值得期待。

NoSQL 意味著什么

采用簡單的 NoSQL 模型(如鍵值存儲),相當于把一部分工作從數據庫層轉移到了應用層。與數據庫層相比,應用層通常更容易(橫向)擴展,因此這種工作量轉移有助于提升系統的可擴展性,將復雜的數據操作拋給應用層來處理,以求更大的優化空間。
甚至事務等強一致性保證也要由應用層來處理,因為多數 NoSQL 數據庫并不提供事務支持。

ACID vs. BASE

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

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

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

  • Basically Available(基本可用):讀寫操作盡可能保證可用,但不保證任何一致性
  • Soft state(軟狀態):由于沒有一致性保證,在一段時間后,只是有可能讀到最新狀態,因為可能還沒收斂
  • Eventual consistency(最終一致性):如果系統運行正常,等待足夠長的時間后,最終能夠讀到最新狀態

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

SQL or NoSQL

相比之下,SQL 數據庫(關系型數據庫)的優勢在于:

  • 支持事務操作
  • 有明確的擴展模式
  • 開發人員、社區、工具等相對成熟

主要缺陷是:

  • 復雜的連表查詢導致數據讀取性能不佳
  • 不太容易擴展(手動分片)
  • 關系模型與 OOP 之間存在較大差異(Object-relational impedance mismatch)
  • 只支持存取結構化數據,關系模式(如表結構)必須預先定義,并且修改成本高

而 NoSQL 數據庫(非關系型數據庫)的優勢集中在:

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

主要缺陷在于:

  • 缺少強一致性保證
  • 開發人員、社區、工具等沒那么成熟

因此,NoSQL 數據庫適用于:

  • 快速變化數據,如點擊流(click stream)數據或日志數據
  • 排行榜或評分數據
  • 臨時數據,如購物車數據
  • 頻繁訪問的熱點數據
  • 元數據(metadata),以及查找表(lookup tables)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/376566.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/376566.shtml
英文地址,請注明出處:http://en.pswp.cn/news/376566.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

android2.2應用開發之IccCard(sim卡或USIM卡)

tyle"margin:20px 0px 0px; font-size:14px; line-height:26px; font-family:Arial; color:rgb(51,51,51)"> 如果要做android通訊錄的聯系人的機卡混排顯示,由于手機卡類型的不同,導致手機卡存儲容量以及可以存儲信息不同,就要涉…

后臺系統可擴展性學習筆記(十三)緩存

文章目錄在哪兒加緩存緩存什么內容緩存原始查庫結果緩存數據對象怎么查詢緩存結果預留緩存模式直讀模式直寫模式回寫式緩存繞寫式緩存提前刷新模式緩存滿了如何處理參考讀寫分離、分庫分表、反范式化、采用 NoSQL……如果這些擴展手段全都上了,數據響應依舊越來越慢…

[linux]gdb調試

使用gdb可以在命令行方便地調試,并且能以命令程序的方式調試源代碼。 常用命令簡寫print-p,step-s,next-n 進入gdb //方式一 gdb test//test 為可執行文件,使用-g編譯得到 //方式二 gdb -q //不顯示版權信息 file test //file命令打開文件 退出gdb quit …

后臺系統可擴展性學習筆記(十四)異步機制與MQ

對于 Web 服務而言,提升可擴展性的主要途徑是將耗時的同步工作改成異步處理,從而允許將這些工作“外包”給多個 Worker 去做,或者提前完成能夠預知的部分。 異步機制與可擴展性之間的關系需要從(異步)并行處理的優勢說…

RegisterClientScriptBlock與 RegisterStartupScript區別

Page.ClientScript.RegisterClientScriptBlock而用Page.ClientScript.RegisterStartupScript是因為:RegisterStartupScript 把script放置在ASP.NET page的底部,而RegisterClientScriptBlock把script放置在ASP.NET page的頂部,用RegisterClien…

【Web后端筆記】SQL Server與java數據類型對應

編號數據庫類型JDBC類型JDBC索引描述1intjava.lang.Integer4 2varcharjava.lang.String12 3charjava.lang.String1 4ncharjava.lang.String1 5nvarcharjava.lang.String12 6textjava.lang.String-1 7ntextjava.lang.String-1 8tinyintjava.lang.Integer-6 9intjava.lang.Intege…

后臺系統可擴展性學習筆記

整理了一下筆記目錄,將以前學習的一些知識串聯起來了,比如cdn、負載均衡、中間件,以前只是各自了解了一點,現在大概理清了后臺系統設計中他們各自的作用。 后臺系統可擴展性學習筆記(一)概要 后臺系統可擴展…

TFS 強制刪除鎖定文件(數據庫)

TFS:TFS2010 VS:VS2012 OS:Windows2008 DB:Sqlserver2008 R2 我們在團隊開發當中,版本控制是一個不可忽略的工具。我們團隊使用的是TFS2010這個版本控制器。 但在團隊實際協作開發當中,團隊成員難免有電腦損壞或人員離職情況&…

【轉】Java:String、StringBuffer和StringBuilder的區別

1 String String:字符串常量,字符串長度不可變。Java中String是immutable(不可變)的。 String類的包含如下定義: [java]view plaincopy /** The value is used for character storage. */ private final char value[]…

Linux中exit與_exit的區別

在exit,_exit的區別 - exit()與_exit()函數的區別(Linux系統中)2012-03-20 15:19:53 分類: LINUX 注:exit()就是退出,傳入的參數是程序退出時的狀態碼,0表示正常退出,其他表示非正常退出&…

光標閃爍問題的解決辦法

在調用Windows API函數SetCursor設置光標時,可能會碰到閃爍的問題:移動鼠標,光標在Class Cursor(即注冊窗口類時指定的Cursor)與預設Cursor之間閃爍。 在MSDN上有關SetCursor函數的備注中強調,如果Class Cursor非空,那…

視頻編解碼基礎

文章目錄前戲編解碼技術流程主流視頻編碼標準視頻傳輸面臨的問題視頻傳輸差錯控制視頻傳輸Qos質量保證參數人類視覺系統HVS 以及相應編碼措施正餐編碼層次與碼流結構PB幀編碼IBBP序列編碼結構圖像編碼結構條帶編碼結構宏塊編碼結構塊編碼結構預測技術碼率控制實例H264前戲 編解…

XShell 屏幕鎖定的恢復方法(Ctrl+Q)

操作XShell過程中很多時間大家會習慣性的按CtrlS進行保存. CtrlS在XShell的作用是屏幕鎖定,很多朋友會無法操作,會直接把窗口關閉。 解決方法: 快捷鍵 CtrlQ 即能完成解鎖!轉載于:https://www.cnblogs.com/liangle/p/3173475.html

adb端口被占用

程序不能執行,kill掉任務管理器里面adb服務,重新連接設備仍然有錯 查到可能是adb端口被占用 查看adb用的是哪個端口:C:\Users\wanglin>adb nodaemon server 查看誰占用了這個端口:C:\Users\wanglin>netstat -ano | findstr …

實時語音通訊丟包補償技術

文章目錄基于發送端丟包補償技術原理與媒體無關的前向差錯糾正媒體相關前向差錯糾正交織技術基于接受端丟包補償技術基于插入方法基于插值方法基于重構的方法應用建議非交互式交互式拓展閱讀參考丟包補償技術可以分為兩類:基于發送端補償、基于接受端補償 基于發送…

取得裝置可以顯示頁面的寬度

利用html中的div元素取得<div id"divGetWidth" width100%></div>Jquery:var width$(#divGetWidth).width(); //獲取元素寬度 Javascript:var objdocument.getElementById(divGetWidth);var width obj.offsetWidth轉載于:https://www.cnblogs.…

Xcode添加靜態庫以及編譯選項配置常見問題

本文轉載至 http://www.cnblogs.com/Quains/archive/2013/08/22/3276425.html 一,Xcode編譯出現Link錯誤,出現"duplicate symbols for architecture i386 clang"提示.問題:鏈接時,項目有重名文件.解決:根據錯誤提示,做如下檢查:1.Taraget->Build Settings->Li…

關于并發概念的一些筆記

目錄1、基于鎖的并發數據結構1、并發計數器2、懶惰計數器3、并發鏈表4、并發隊列5、并發散列表總結2、條件變量使用&#xff08;POSIX&#xff09;生產者/消費者 &#xff08;有界緩沖區問題&#xff09;覆蓋條件擴展3、信號量使用二值信號量&#xff08;鎖&#xff09;0值信號…

MYSQL常見出錯代碼 mysql error number

1016錯誤&#xff1a;文件無法打開&#xff0c;使用后臺修復或者使用phpmyadmin進行修復。1044錯誤&#xff1a;數據庫用戶權限不足&#xff0c;請聯系空間商解決1045錯誤&#xff1a;數據庫服務器/數據庫用戶名/數據庫名/數據庫密碼錯誤&#xff0c;請聯系空間商檢查帳戶。105…

建立apk定時自動打包系統第三篇——代碼自動更新、APP自動打包系統

我們的思路是每天下班后團隊各成員在指定的時間&#xff08;例如下午18:30&#xff09;之前把各自的代碼上傳到SVN&#xff0c;然后服務器在指定的時間&#xff08;例如下午18:30&#xff09;更新代碼、執行ant 打包命令、最后將apk包存放在指定目錄&#xff08;或者上傳指定ft…