網站首頁 編程語言 正文
一、關系型數據庫
1、概念
關系型數據庫:是指采用了關系模型來組織數據的數據庫,是目前各類數據庫中使用最為廣泛的數據庫系統。簡單的說,關系模型指的就是二維表格模型,一個關系型數據庫就是由二維表及其之間的聯系所組成的一個數據組織。現在使用的主流數據庫都是關系型數據庫,比如SQL Server、Mysql、Oracle、DB2、Sybase等。
關系模型中常用的概念:
關系:可以理解為一張二維表,每個關系都具有一個關系名,就是通常說的表名。
元組:可以理解為二維表中的一行,在數據庫中經常被稱為記錄。
屬性:可以理解為二維表中的一列,在數據庫中經常被稱為字段。
域:? 屬性的取值范圍,也就是數據庫中某一列的取值限制。
關鍵字:一組可以唯一標識元組的屬性,數據庫中常稱為主鍵,由一個或多個列組成。
關系模式:指對關系的描述。其格式為:關系名(屬性1、屬性2......屬性N),在數據庫中稱為表結構。
2、關系型數據庫的特點
關系數據庫是支持關系模型的數據庫系統。而關系模型是由二維表來表示實體和實體間聯系的模型。使用二維表存儲數據,對使用者來說很直觀,更容易理解。使用關系數據庫的優勢主要表現在以下幾個特性:
(1)操作方便性。通過開發應用程序和數據庫連接,用戶能方便的對數據庫中數據進行操作,特別對沒有數據庫基礎的人,也可以通過數據庫管理系統,直接在數據庫中操作。
(2)易于維護性。關系數據庫在完整性約束中提供了實體完整性、參照完整性和用戶定義的完整性,通過完整性約束可以大大降低數據存儲的冗余及數據不一致的概率。
(3)訪問數據的靈活性。關系數據庫中提供了諸如視圖、存儲過程、觸發器、索引等對象,使數據的訪問更加靈活。
3、關系型數據庫的瓶頸
(1)對數據庫高并發讀寫的需求
Web2.0網站要根據用戶個性化信息來實時生成動態頁面和提供動態信息,無法使用動態頁面靜態化技術,因此數據庫的并發負載非常高,往往要達到每秒上萬次的讀寫請求,此時,服務器上的磁盤根本無法承受如此之多的讀寫請求。
(2)對海量數據的高效率存儲和訪問的需求
對于大型的社交網站,每天用戶產生海量的用戶動態,隨著用戶的不斷增減,一個數據表中的記錄可能有幾億條,對于關系型數據庫來說,在一個有上億條記錄的表里面進行SQL查詢,效率是及其低下的。
(3)高擴展性和可用性
在基于web的結構當中,數據庫是最難進行橫向擴展的,當一個應用系統的用戶量和訪問量與日俱增的時候,數據庫沒有辦法像web server那樣簡單的通過添加更多的硬件和服務節點來擴展性能和負載能力。
4、關系型數據遵循ACID原則
事務在英文中是transaction,和現實世界中的交易很類似,它有如下四個特性:
1、A (Atomicity) 原子性
原子性很容易理解,也就是說事務里的所有操作要么全部做完,要么都不做,事務成功的條件是事務里的所有操作都成功,只要有一個操作失敗,整個事務就失敗,需要回滾。比如銀行轉賬,從A賬戶轉100元至B賬戶,分為兩個步驟:1)從A賬戶取100元;2)存入100元至B賬戶。這兩步要么一起完成,要么一起不完成,如果只完成第一步,第二步失敗,錢會莫名其妙少了100元。
2、C (Consistency) 一致性
一致性也比較容易理解,也就是說數據庫要一直處于一致的狀態,事務的運行不會改變數據庫原本的一致性約束。例如現有完整性約束a+b=10,如果一個事務改變了a,那么必須得改變b,使得事務結束后依然滿足a+b=10,否則事務失敗。
3、I (Isolation) 獨立性
所謂的獨立性是指并發的事務之間不會互相影響,如果一個事務要訪問的數據正在被另外一個事務修改,只要另外一個事務未提交,它所訪問的數據就不受未提交事務的影響。比如現有有個交易是從A賬戶轉100元至B賬戶,在這個交易還未完成的情況下,如果此時B查詢自己的賬戶,是看不到新增加的100元的。
4、D (Durability) 持久性
持久性是指一旦事務提交后,它所做的修改將會永久的保存在數據庫上,即使出現宕機也不會丟失。
二、NoSQL數據庫
NoSQL是用于指代那些非關系型的、分布式的、且一般不保證遵循ACID原則的非關系型的數據庫。NoSQL有時也稱作Not Only SQL的縮寫,是對不同于傳統的關系型數據庫的數據庫管理系統的統稱。NoSQL用于超大規模數據的存儲。(例如谷歌或Facebook每天為他們的用戶收集萬億比特的數據)。這些類型的數據存儲不需要固定的模式,無需多余操作就可以橫向擴展。非關系型數據庫提出了另外一種概念,例如:以鍵值對的方式進行存儲,且結構不固定,每一個元組可以有不一樣的字段,每個元組可以根據需要增加一些自己的鍵值對,這樣就不會局限于固定的結構,可以減少一些時間和空間的開銷。使用這種方式,用戶可以根據需要去添加自己需要的字段。但非關系型數據庫由于很少的約束,他也不能夠提供像SQL所提供的where這種對于字段屬性值情況的查詢。并且難以體現設計的完整性。它只適合存儲一些較為簡單的數據,對于需要進行較復雜查詢的數據,SQL數據庫顯的更為合適。
1、分布式系統
分布式系統(distributed system)由多臺計算機和通信的軟件組件通過計算機網絡連接(本地網絡或廣域網)組成。
分布式系統是建立在網絡之上的軟件系統。正是因為軟件的特性,所以分布式系統具有高度的內聚性和透明性。
因此,網絡和分布式系統之間的區別更多的在于高層軟件(特別是操作系統),而不是硬件。
分布式系統可以應用在在不同的平臺上如:Pc、工作站、局域網和廣域網上等。
2、分布式計算的優點
可靠性(容錯) :
分布式計算系統中的一個重要的優點是可靠性。一臺服務器的系統崩潰并不影響到其余的服務器。
可擴展性:
在分布式計算系統可以根據需要增加更多的機器。
資源共享:
共享數據是必不可少的應用,如銀行,預訂系統。
靈活性:
由于該系統是非常靈活的,它很容易安裝,實施和調試新的服務。
更快的速度:
分布式計算系統可以有多臺計算機的計算能力,使得它比其他系統有更快的處理速度。
開放系統:
由于它是開放的系統,本地或者遠程都可以訪問到該服務。
更高的性能:
相較于集中式計算機網絡集群可以提供更高的性能(及更好的性價比)。
3、分布式計算的缺點
故障排除:
故障排除和診斷問題。
軟件:
更少的軟件支持是分布式計算系統的主要缺點。
網絡:
網絡基礎設施的問題,包括:傳輸問題,高負載,信息丟失等。
安全性:
開發系統的特性讓分布式計算系統存在著數據的安全性和共享的風險等問題。
4、關系型數據庫和非關系型數據庫的比較
4.1、關系型數據庫
- 高度組織化結構化數據?
- 結構化查詢語言(SQL) (SQL)?
- 數據和關系都存儲在單獨的表中。?
- 數據操縱語言,數據定義語言?
- 嚴格的一致性
- 基礎事務
4.2、NoSQL
- 代表著不僅僅是SQL
- 沒有聲明性查詢語言
- 沒有預定義的模式
-鍵 - 值對存儲,列存儲,文檔存儲,圖形數據庫
- 最終一致性,而非ACID屬性
- 非結構化和不可預知的數據
- CAP定理?
- 高性能,高可用性和可伸縮性
關系型數據庫的最大特點就是事務的一致性:傳統的關系型數據庫讀寫操作都是事務的,具有ACID的特點,這個特性使得關系型數據庫可以用于幾乎所有對一致性有要求的系統中,如典型的銀行系統。
但是,在網頁應用中,尤其是SNS應用中,一致性卻不是顯得那么重要,用戶A看到的內容和用戶B看到同一用戶C內容更新不一致是可以容忍的,或者說,兩個人看到同一好友的數據更新的時間差那么幾秒是可以容忍的,因此,關系型數據庫的最大特點在這里已經無用武之地,起碼不是那么重要了。
相反地,關系型數據庫為了維護一致性所付出的巨大代價就是其讀寫性能比較差,而像微博、facebook這類SNS的應用,對并發讀寫能力要求極高,關系型數據庫已經無法應付(在讀方面,傳統上為了克服關系型數據庫缺陷,提高性能,都是增加一級memcache來靜態化網頁,而在SNS中,變化太快,memchache已經無能為力了),因此,必須用新的一種數據結構存儲來代替關系數據庫。
關系數據庫的另一個特點就是其具有固定的表結構,因此,其擴展性極差,而在SNS中,系統的升級,功能的增加,往往意味著數據結構巨大變動,這一點關系型數據庫也難以應付,需要新的結構化數據存儲。
于是,非關系型數據庫應運而生,由于不可能用一種數據結構化存儲應付所有的新的需求,因此,非關系型數據庫嚴格上不是一種數據庫,應該是一種數據結構化存儲方法的集合。
必須強調的是,數據的持久存儲,尤其是海量數據的持久存儲,還是需要使用關系型數據庫的。
5、NoSQL的優點/缺點
優點:
- - 高可擴展性
- - 分布式計算
- - 低成本
- - 架構的靈活性,半結構化數據
- - 沒有復雜的關系
缺點:
- - 沒有標準化
- - 有限的查詢功能(到目前為止)
- - 最終一致是不直觀的程序
原文鏈接:https://www.cnblogs.com/dotnet261010/p/7448050.html
相關推薦
- 2023-07-02 Pandas數據查詢的集中實現方法_python
- 2021-12-15 Redis可視化工具Redis?Desktop?Manager的具體使用_Redis
- 2022-12-01 SQL?Server主鍵與外鍵設置以及相關理解_MsSql
- 2023-11-14 使用python獲取指定進程的CPU/內存情況;Python獲取指定進程的CPU和內存使用情況
- 2022-04-17 uniapp文本支持換行,后端返回一串文本
- 2023-11-25 全局后置路由守衛(afterEach)
- 2022-07-15 利用apache?ftpserver搭建ftp服務器的方法步驟_Linux
- 2022-07-24 用來將對象持久化的python?pickle模塊_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支