C(Chapter) C-01.資料庫概述 1.為什麼要用資料庫 持久化(persistence):把數據保存到可掉電式存儲設備(硬碟)中以供之後使用。大多數情況下,特別是企業應用,數據持久化是將記憶體中的數據保存到硬碟上加以"固化",而持久化的實現過程大多使用各種關係資料庫來完成。 持久化的主要作用 ...
C(Chapter)
C-01.資料庫概述
1.為什麼要用資料庫
- 持久化(persistence):把數據保存到可掉電式存儲設備(硬碟)中以供之後使用。大多數情況下,特別是企業應用,數據持久化是將記憶體中的數據保存到硬碟上加以"固化",而持久化的實現過程大多使用各種關係資料庫來完成。
- 持久化的主要作用是將記憶體中的數據存到關係型資料庫中,當然也可以存儲在磁碟文件,XML數據文件中。
2.資料庫與資料庫管理系統
2.1 資料庫的相關概念
DB:資料庫(Database)。存儲數據的倉庫,其本質是一個文件系統。保存了一系列有組織的數據。
DBMS:資料庫管理系統(Database Management System)。是一種操作和管理資料庫的大型軟體,用於建立,使用和維護資料庫,對資料庫進行統一的管理和控制。用戶通過資料庫管理和訪問資料庫中表的數據。
SQL:結構化查詢語言(Structured Query Language)。專門用來與資料庫交互的語言。
2.2 資料庫和資料庫管理系統的關係
資料庫管理系統(DBMS)可以管理多個資料庫,一般開發人員會針對每一個應用創建一個資料庫。為保存應用中實體的數據,一般會在資料庫中創建多個表,以保存程式中用戶的數據。
3.MySQL優勢
為什麼很多廠商選擇MySQL?
- 1.開放源代碼,使用成本低。
- 2.性能卓越,服務穩定。
- 3.軟體體積小,使用簡單,並且易於維護。
- 4.歷史悠久,社區用戶活躍,遇到問題容易解決。
- 5.很多互聯網公司再用,經過了時間的考驗。
4.RDBMS與非RDBMS
RDBMS(Relationship Database Management System)
4.1 關係型資料庫(RDBMS)
4.1.1 實質
- 關係型資料庫是最古老的資料庫類型,關係型資料庫模型是把複雜的數據結構歸結為簡單的二元關係(二維表格)。
- 關係型資料庫以行(row)和列(column)的形式存儲數據,以便於用戶理解。這一系列的行和列被稱為表(table),一組表組成了一個庫(database)。
- 表和表之間的數據記錄有關係(relationship)。現實世界里的各種實體以及實體之間的各種關係均用關係模型來表示。關係型資料庫,就是建立在關係模型基礎上的資料庫。
- SQL就是關係型資料庫的交互語言。
4.1.2 優勢
- 複雜查詢 可以用SQL語句方便的在一個表以及各個表之間,做非常複雜的數據查詢。
- 事務支持 使得對於安全性很高的數據訪問要求得以實現。
4.2 非關係型資料庫(非DBMS)
4.2.1 介紹
非關係型資料庫,可以看成關係型資料庫的簡化版本
,基於鍵值對存儲數據,不需要經過SQL層的解析,性能非常高
。同時,減少了很多不常用的功能,進一步提高了性能。
目前主流的非關係型資料庫都是免費的。
4.2.2 有那些非關係型資料庫
相比於SQL,NoSQL泛指非關係型資料庫,包括了鍵值型資料庫,文檔型資料庫,搜索引擎和列存儲等,還有圖形資料庫。也只有NoSQL才能將這些資料庫都概括。
鍵值型資料庫
鍵值型資料庫,通過key-value鍵值的方式來存儲數據,其中key和value可以是簡單的對象,也可以是複雜的對象。key作為唯一的標識符,優點是查找速度快,而且明顯優於關係型資料庫,確定是無法像關係型資料庫一樣使用條件過濾(比如WHERE),如果不知道去哪裡找數據,就會遍歷所有的鍵,消耗大量的CPU資源。
鍵值型資料庫典型的使用場景就是作為記憶體緩存。Redis是最流行的鍵值型資料庫。
文檔型資料庫
可以存放文檔,可以是xml格式,json格式。再資料庫中文檔作為處理信息的基本單位,一個文檔相當於一條記錄。文檔資料庫所存放的文檔,就相當於鍵值資料庫所存放的值。MongoDB是最流行的文檔型資料庫。此外還有CouchDB等。
搜索引擎資料庫
關係型資料庫雖然採用了索引提升了檢索效率,但是針對全文索引效率卻較低。搜索引擎資料庫是應用在搜索引擎領域的數據存儲形式,由於搜索引擎會爬取大量的數據,並以特定的格式進行存儲,這樣在檢索的時候,才能保證性能最優。核心原理是倒排索引
。
典型產品:ES(Elasticsearch),Solr,Splunk等。
列式資料庫
列式資料庫是相對於行式存儲的資料庫,Oracle,MySQL,SQL Server等資料庫都是採用的行式存儲(Row-based),而列式資料庫是將數據按照列存儲到資料庫中,這樣做的好處是可以大量降低系統的I/O,適合於分散式文件系統,不足在於功能相對有限。
典型產品:HBase。
圖形資料庫
圖形資料庫,利用了圖這種數據結構存儲了實體(對象)之間的關係,圖形資料庫最典型的例子就是社交網路中人與人的關係,數據模型主要是以節點和邊(關係)來實現,特點在於能高效的解決複雜的關係問題。
圖形資料庫顧名思義,就是一種存儲圖形關係的資料庫,它利用了圖這種數據結構,存儲了實體(對象)之間的關係。關係型數據用於存儲明確關係的數據,但對於複雜關係的數據存儲卻有些力不從心。如社交網路中人物之間的關係,如果使用關係型資料庫會非常複雜,用圖形資料庫將非常簡單。
典型產品:Neo4J,InfoGrid等。
4.2.3 NoSQL的演變
NoSQL對SQL做出了很好的補充,比如實際開發中,有很多業務需求,其實並不需要完整的關係型資料庫功能,非關係型資料庫的功能就足夠使用了。這種情況下,使用性能更高
,成本更低的
的非關係型資料庫當然是更好的選擇,比如:排行榜,定時器等。
5.關係型資料庫設計規則
- 關係型資料庫的典型數據結構就是
數據表
,這些數據表的組成都是結構化的(Structured)。 - 將數據放到表中,表再放到庫中。
- 一個資料庫中可以有多個表,每個表都有一個名字,用來標識自己。表名具有唯一性。
- 表具有一些特性,這些特性定義了數據在表中如何存儲,類似Java中“類”的設計。
5.1 表,記錄,欄位
- E-R(entity-relationship,實體-聯繫),模型中有三個主要概念是:
實體集
,屬性
,聯繫集
。 - 一個實體集(Class)對應資料庫中的一張表(Table),一個實體(Instance)則對應於資料庫表中的一行(Row),也稱為一條記錄(Record)。一個屬性(Attribute)對應於資料庫中的一列(Cloumn),也成為一個欄位(Field)。
- ORM思想(Object Relational Mapping)體現:資料庫中的一張表 <----> Java中一個類,表中的一條數據 <----> 類的一個對象(實體),
表中的一個列 <----> 類中的一個欄位,屬性(Field)。
5.2 表的關聯關係
- 表與表之間的數據記錄有關係。現實世界的實體及實體之間的關係均用關係模型來表示。
- 四種,一對一關係,一對多關係,多對多關係,自我引用。
學習視頻是尚矽谷宋紅康老師主講的b站視頻,BV1iq4y1u7vj
只是為了記錄自己的學習歷程,且本人水平有限,不對之處,請指正。