RDBMS
Relational Database Management Systemphp
關係型數據庫系統mysql
經過表來表示關係程序員
當前主要使用兩種類型的數據庫:關係型數據庫、非關係型數據庫,咱們主要學習主流的關係型數據庫redis
所謂的關係型數據庫RDBMS,是創建在關係模型基礎上的數據庫,藉助於集合代數等數學概念和方法來處理數據庫中的數據算法
查看數據庫排名:https://db-engines.com/en/rankingsql
基於「關係模型」的數據庫管理系統稱爲關係數據庫管理系統(簡稱爲RDBMS)。
關係數據庫中所謂的「關係」,實質上是一張二維表
![](https://www.showdoc.cc/server/api/common/visitfile/sign/95919e9c8428c7522b144f345a171b84?showdoc=.jpg)
關係型數據庫,存儲的格式能夠直觀地反映實體間的關係。關係型數據庫和常見的表格比較類似,關係型數據庫中表與表之間是有不少複雜的關聯關係的。 常見的關係型數據庫有Mysql,SqlServer等。在輕量或者小型的應用中,使用不一樣的關係型數據庫對系統的性能影響不大,可是在構建大型應用時,則須要根據應用的業務需求和性能需求,選擇合適的關係型數據庫。 [2]
標準SQL語句
雖然關係型數據庫有不少,可是大多數都遵循SQL(結構化查詢語言,Structured Query Language)標準。 常見的操做有查詢,新增,更新,刪除,求和,排序等。 [2]
查詢語句:SELECT param FROM table WHERE condition 該語句能夠理解爲從 table 中查詢出知足 condition 條件的字段 param。 [2]
新增語句:INSERT INTO table (param1,param2,param3) VALUES (value1,value2,value3) 該語句能夠理解爲向table中的param1,param2,param3字段中分別插入value1,value2,value3。 [2]
更新語句:UPDATE table SET param=new_value WHERE condition 該語句能夠理解爲將知足condition條件的字段param更新爲 new_value 值。 [2]
刪除語句:DELETE FROM table WHERE condition 該語句能夠理解爲將知足condition條件的數據所有刪除。 [2]
去重查詢:SELECT DISTINCT param FROM table WHERE condition 該語句能夠理解爲從表table中查詢出知足條件condition的字段param,可是param中重複的值只能出現一次。 [2]
排序查詢:SELECT param FROM table WHERE condition ORDER BY param1該語句能夠理解爲從表table 中查詢出知足condition條件的param,而且要按照param1升序的順序進行排序。 [2]
整體來講, 數據庫的SELECT,INSERT,UPDATE,DELETE對應了咱們經常使用的增刪改查四種操做。 [2]
關係型數據庫對於結構化數據的處理更合適,如學生成績、地址等,這樣的數據通常狀況下須要使用結構化的查詢,例如join,這樣的狀況下,關係型數據庫就會比NoSQL數據庫性能更優,並且精確度更高。因爲結構化數據的規模不算太大,數據規模的增加一般也是可預期的,因此針對結構化數據使用關係型數據庫更好。關係型數據庫十分注意數據操做的事務性、一致性,若是對這方面的要求關係型數據庫無疑能夠很好的知足。 [3]
隨着近些年技術方向的不斷拓展,大量的NoSql數據庫如MongoDB、Redis、Memcache出於簡化數據庫結構、避免冗餘、影響性能的錶鏈接、摒棄複雜分佈式的目的被設計。 [5]
指的是分佈式的、非關係型的、不保證遵循ACID原則的數據存儲系統。NoSQL數據庫技術與CAP理論、一致性哈希算法有密切關係。所謂CAP理論,簡單來講就是一個分佈式系統不可能知足可用性、一致性與分區容錯性這三個要求,一次性知足兩種要求是該系統的上限。而一致性哈希算則指的是NoSQL數據庫在應用過程當中,爲知足工做需求而在一般狀況下產生的一種數據算法,該算法能有效解決工做方面的諸多問題但也存在弊端,即工做完成質量會隨着節點的變化而產生波動,當節點過多時,相關工做結果就沒法那麼準確。這一問題使整個系統的工做效率受到影響,致使整個數據庫系統的數據亂碼與出錯率大大提升,甚至會出現數據節點的內容遷移,產生錯誤的代碼信息。但儘管如此,NoSQL數據庫技術仍是具備很是明顯的應用優點,如數據庫結構相對簡單,在大數據量下的讀寫性能好;能知足隨時存儲自定義數據格式需求,很是適用於大數據處理工做。 [6]
NoSQL數據庫適合追求速度和可擴展性、業務多變的應用場景。 [5] 對於非結構化數據的處理更合適,如文章、評論,這些數據如全文搜索、機器學習一般只用於模糊處理,並不須要像結構化數據同樣,進行精確查詢,並且這類數據的數據規模每每是海量的,數據規模的增加每每也是不可能預期的,而NoSQL數據庫的擴展能力幾乎也是無限的,因此NoSQL數據庫能夠很好的知足這一類數據的存儲。NoSQL數據庫利用key-value能夠大量的獲取大量的非結構化數據,而且數據的獲取效率很高,但用它查詢結構化數據效果就比較差。 [3]
目前NoSQL數據庫仍然沒有一個統一的標準,它如今有四種大的分類:
(1)鍵值對存儲(key-value):表明軟件Redis,它的優勢可以進行數據的快速查詢,而缺點是須要存儲數據之間的關係。 [3]
(2)列存儲:表明軟件Hbase,它的優勢是對數據能快速查詢,數據存儲的擴展性強。而缺點是數據庫的功能有侷限性。 [3]
(3)文檔數據庫存儲:表明軟件MongoDB,它的優勢是對數據結構要求不特別的嚴格。而缺點是查詢性的性能很差,同時缺乏一種統一查詢語言。 [3]
(4)圖形數據庫存儲:表明軟件InfoGrid,它的優勢能夠方便的利用圖結構相關算法進行計算。而缺點是要想獲得結果必須進行整個圖的計算,並且遇到不適合的數據模型時,圖形數據庫很難使用。 [3]
1、存儲方式
傳統的關係型數據庫採用表格的儲存方式, 數據以行和列的方式進行存儲,要讀取和查詢都十分方便。而非關係型數據不適合這樣的表格存儲方式,一般以數據集的方式,大量的數據集中存儲在一塊兒,相似於鍵值對、圖結構或者文檔。 [3]
2、存儲結構
關係型數據庫按照結構化的方法存儲數據, 每一個數據表都必須對各個字段定義好(也就是先定義好表的結構),再根據表的結構存入數據,這樣作的好處就是因爲數據的形式和內容在存入數據以前就已經定義好了,因此整個數據表的可靠性和穩定性都比較高,但帶來的問題就是一旦存入數據後,若是須要修改數據表的結構就會十分困難。而NoSQL數據庫因爲面對的是大量非結構化的數據的存儲,它採用的是動態結構,對於數據類型和結構的改變很是的適應,能夠根據數據存儲的須要靈活的改變數據庫的結構。 [3]
3、存儲規範
關係型數據庫爲了不重複、規範化數據以及充分利用好存儲空間,把數據按照最小關係表的形式進行存儲,這樣數據管理的就能夠變得很清晰、一目瞭然,固然這主要是一張數據表的狀況。若是是多張表狀況就不同了,因爲數據涉及到多張數據表,數據表之間存在着複雜的關係,隨着數據表數量的增長,數據管理會愈來愈複雜。而NoSQL數據庫的數據存儲方式是用平面數據集的方式集中存放,雖然會存在數據被重複存儲,從而形成存儲空間被浪費的問題(從當前的計算機硬件的發展來看,這樣的存儲空間浪費的問題微不足道),可是因爲基本上單個數據庫都是採用單獨存放的形式,不多采用分割存放的方式,因此這樣數據每每能存成一個總體,這對於數據的讀寫提供了極大的方便。 [3]
4、擴展方式
當前社會和科學飛速發展,要支持日益增加的數據庫存儲需求固然要求數據庫有良好的擴展性能,而且要求數據庫支持更多數據併發量,擴展方式是NoSQL數據庫與關係型數據庫差異最大的地方,因爲關係型數據庫將數據存儲在數據表中,數據操做的瓶頸出如今多張數據表的操做中,並且數據表越多這個問題越嚴重,若是要緩解這個問題,只能提升處理能力,也就是選擇速度更快性能更高的計算機,這樣的方法雖然能夠必定的拓展空間,但這樣的拓展空間必定有很是有限的,也就是關係型數據庫只具有縱向擴展能力。而NoSQL數據庫因爲使用的是數據集的存儲方式,它的存儲方式必定是分佈式的,它能夠採用橫向的方式來開展數據庫,也就是能夠添加更多數據庫服務器到資源池,而後由這些增長的服務器來負擔數據量增長的開銷。 [3]
5、查詢方式
關係型數據庫採用結構化查詢語言(即SQL)來對數據庫進行查詢,SQL早已得到了各個數據庫廠商的支持,成爲數據庫行業的標準,它可以支持數據庫的CRUD(增長,查詢,更新,刪除)操做,具備很是強大的功能,SQL能夠採用相似索引的方法來加快查詢操做。NoSQL數據庫使用的是非結構化查詢語言(UnQL),它以數據集(像文檔)爲單位來管理和操做數據,因爲它沒有一個統一的標準,因此每一個數據庫廠商提供產品標準是不同的,NoSQL中的文檔Id與關係型表中主鍵的概念相似,NoSQL數據庫採用的數據訪問模式相對SQL更簡單而精確。 [3]
6、規範化
在數據庫的設計開發過程當中開發人員一般會面對同時須要對一個或者多個數據實體(包括數組、列表和嵌套數據)進行操做,這樣在關係型數據庫中,一個數據實體通常首先要分割成多個部分,而後再對分割的部分進行規範化,規範化之後再分別存入到多張關係型數據表中,這是一個複雜的過程。好消息是隨着軟件技術的發展,至關多的軟件開發平臺都提供一些簡單的解決方法,例如,能夠利用ORM層(也就是對象關係映射)來將數據庫中對象模型映射到基於SQL的關係型數據庫中去以及進行不一樣類型系統的數據之間的轉換。對於NoSQL數據庫則沒有這方面的問題,它不須要規範化數據,它一般是在一個單獨的存儲單元中存入一個複雜的數據實體。 [3]
7、事務性
關係型數據庫強調ACID規則(原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持久性(Durability)),能夠知足對事務性要求較高或者須要進行復雜數據查詢的數據操做,並且能夠充分知足數據庫操做的高性能和操做穩定性的要求。而且關係型數據庫十分強調數據的強一致性,對於事務的操做有很好的支持。關係型數據庫能夠控制事務原子性細粒度,而且一旦操做有誤或者有須要,能夠立刻回滾事務。而NoSQL數據庫強調BASE原則(基本可用(Basically Availble)、軟狀態(Soft-state)、最終一致性(Eventual Consistency)),它減小了對數據的強一致性支持,從而得到了基本一致性和柔性可靠性,而且利用以上的特性達到了高可靠性和高性能,最終達到了數據的最終一致性。NoSQL數據庫雖然對於事務操做也可使用,但因爲它是一種基於節點的分佈式數據庫,對於事務的操做不能很好的支持,也很難知足其所有的需求,因此NoSQL數據庫的性能和優勢更多的體如今大數據的處理和數據庫的擴展方面。 [3]
8、讀寫性能
關係型數據庫十分強調數據的一致性,併爲此下降讀寫性能付出了巨大的代價,雖然關係型數據庫存儲數據和處理數據的可靠性很不錯,但一旦面對海量數據的處理的時候效率就會變得不好,特別是遇到高併發讀寫的時候性能就會降低的很是厲害。而NoSQL數據庫相對關係型數據庫優點最大的偏偏是應對大數據方面,也就是對於大量的天天都產生非結構化的數據可以高性能的讀寫,這是由於NoSQL數據庫是按key-value類型進行存儲的,以數據集的方式存儲的,所以不管是擴展仍是讀寫都很是容易,而且NoSQL數據庫不須要關係型數據庫繁瑣的解析,因此NoSQL數據庫大數據管理、檢索、讀寫、分析以及可視化方面具備關係型數據庫不可比擬的優點。 [3]
9、受權方式
關係型數據庫常見的有Oracle,SQLServer,DB2,Mysql,除了Mysql大多數的關係型數據庫若是要使用都須要支付一筆價格高昂的費用,即便是免費的Mysql性能也受到了諸多的限制。而對於NoSQL數據庫,比較主流的有redis,HBase,MongoDb,memcache等產品,一般都採用開源的方式,不須要像關係型數據庫那樣,須要一筆高昂的花費。 [3]
所謂的分佈式數據庫技術,就是結合了數據庫技術與分佈式技術的一種結合。具體指的是把那些在地理意義上分散開的各個數據庫節點,但在計算機系統邏輯上又是屬於同一個系統的數據結合起來的一種數據庫技術。既有着數據庫間的協調性也有着數據的分佈性。這個系統並不注重系統的集中控制,而是注重每一個數據庫節點的自治性,此外爲了讓程序員可以在編寫程序時能夠減輕工做量以及系統出錯的可能性,通常都是徹底不考慮數據的分佈狀況,這樣的結果就使得系統數據的分佈狀況一直保持着透明性。 [7]
數據獨立性概念在分佈式數據庫管理系統中一樣是十分重要的一環,可是不只如此,分佈式數據管理系統還增長了一個叫分佈式透明性的新概念。這個新概念的做用是讓數據進行轉移時使程序正確性不受影響,就像數據並無在編寫程序時被分佈同樣。 [7]
在分佈式數據庫裏,數據冗雜是一種被須要的特性,這點和通常的集中式數據庫系統不同。第一點是爲了提升局部的應用性而要在那些被須要的數據庫節點複製數據。第二點是由於若是某個數據庫節點出現系統錯誤,在修復好以前,能夠經過操做其餘的數據庫節點裏複製好的數據來讓系統可以繼續使用,提升系統的有效性。 [7]
1、關係型數據庫核心元素
數據行(一條記錄)
數據列(字段)
數據表(數據行的集合)
數據庫(數據表的集合,一個數據庫中可以有 n 多個數據表)
2、數據庫的分類
關係型數據庫:mysql 、sqlserver、oracle、db2、accress、
非關係型數據庫:redis、kfaka、MongodDB、Hbase
參考:《非關係型數據庫資料》
常見的關係型數據庫有哪些?
經常使用的數據庫有Access、Oracle、Mysql、SQL Server、SQLite等。那麼用戶想要選擇一個數據庫,什麼樣的數據庫纔是最能知足用戶自身需求的呢?
3、Access數據庫
這款數據庫是由微軟發佈的,是一款關聯式數據序管理型系統的數據庫,一般是被用來開發Web應用程序這些應用程序都利用Asp技術在IIs上運行,可是因爲Access是小型的數據庫,在不少的使用上都有着侷限性,並且若是過多的數據庫訪問量還會形成數據庫的性能極具降低。
4、MySQL數據庫
這款數據庫是一款小型數據庫管理系統的數據庫,其開發公司是瑞典MySQLAB公司。MySQL被普遍地應用在Internet上的中小型網站中。因爲其體積小、速度快、整體擁有成本低,尤爲是開放源碼這一特色,許多中小型網站爲了下降網站整體擁有成本而選擇了MySQL做爲網站數據庫。
5、SqlServer數據庫
這款數據庫的特色是真正的客戶/服務器體系結構,而且出十是圖形化的用戶界面,使數據庫管理方式更加直觀和簡單。它還提供了豐富的編程接口工具爲用戶進行程序設計提供了更大的選擇餘。在使用上也是很是普遍的。
6、Oracle數據庫
這是一款比較典型的客戶/服務器(CLIENT/SERVER)或B/S體系結構的數據庫之一。ORACLE數據庫是目前世界上使用最爲普遍的數據庫管理系統,做爲一個通用的數據庫系統,它具備完整的數據管理功能;做爲一個關係數據庫,它是一個完備關係的產品;做爲分佈式數據庫它實現了分佈式處理功能。但它的全部知識,只要在一種機型上學習了ORACLE知識,便能在各類類型的機器上使用它。
7、SQLite數據庫
這是一款輕型的數據庫,是遵照ACID的關聯式數據庫管理系統,它的設計目標是嵌入式的,並且目前已經在不少嵌入式產品中使用了它,它佔用資源很是的低,在嵌入式設備中,可能只須要幾百K的內存就夠了。這款數據庫的運行處理速度比Mysql、PostgreSQL這兩款都要快。
8、經常使用的鏈接工具:
Mysql :phpMyAdmin、Navicat 、MySQL Workbench
Oracle:plsql
Sqlserver: