熱頭條丨數據庫概述

2023-01-16 12:27:05 來源:51CTO博客

數據庫

持久化(persistence):把數據保存到可掉電式存儲設備中以供之后使用。大多數情況下,特別是企業級應用,數據持久化意味著將內存中的數據保存到硬盤上加以”固化”,而持久化的實現過程大多通過各種關系數據庫來完成。

持久化的主要作用是將內存中的數據存儲在關系型數據庫中,當然也可以存儲在磁盤文件、XML數據文件中。

數據庫與數據庫管理系統

數據庫的相關概念

DB

數據庫(Database)


(相關資料圖)

即存儲數據的“倉庫”,其本質是一個文件系統。它保存了一系列有組織的數據。

DBMS

數據庫管理系統(Database Management System)

是一種操縱和管理數據庫的大型軟件,用于建立、使用和維護數據庫,對數據庫進行統一管理和控制。用戶通過數據庫管理系統訪問數據庫中表內的數據。

SQL

結構化查詢語言(Structured Query Language)專門用來與數據庫通信的語言。

數據庫與數據庫管理系統的關系

數據庫管理系統(DBMS)可以管理多個數據庫

一般開發人員會針對每一個應用創建一個數據庫。為保存應用中實體的數據,一般會在數據庫創建多個表,以保存程序中實體用戶的數據。

數據庫管理系統、數據庫和表的關系如圖所示:

常見的數據庫管理系統排名(DBMS)

2022年數據庫的歡迎程度數據統計結果如下:(數據來源:??https://db-engines.com/en/ranking)??

相應的走勢圖如下:(數據來源:??https://db-engines.com/en/ranking_trend)??

常見的數據庫簡介

Oracle

商用(收費)數據庫軟件

SQL Server

SQL Server 是微軟開發的大型商業數據庫,誕生于 1989 年。C#、.net等語言常使用,與WinNT完全集成,也可以很好地與Microsoft BackOffice產品集成。

DB2

IBM公司的數據庫產品, 收費。常應用在銀行系統中。

PostgreSQL

PostgreSQL 的穩定性極強,最符合SQL標準,開放源碼,具備商業級DBMS質量。PG對數據量大的文本以及SQL處理較快。

SQLite

嵌入式的小型數據庫,應用在手機端。 零配置,SQlite3不用安裝,不用配置,不用啟動,關閉或者配置數據庫實例。當系統崩潰后不用做任何恢復操作,再下次使用數據庫的時候自動恢復。

informix

IBM公司出品,取自Information 和Unix的結合,它是第一個被移植到Linux上的商業數據庫產品。僅運行于unix/linux平臺,命令行操作。 性能較高,支持集群,適應于安全性要求極高的系統,尤其是銀行,證券系統的應用。

MySQL介紹

概述

MySQL是一個開放源代碼的關系型數據庫管理系統,由瑞典MySQL AB(創始人Michael Widenius)公司1995年開發。2008被Sun 收購,2009年Sun被Oracle 收購。MySQL 的創造者擔心 MySQL 有閉源的風險,創建MySQL 的分支項目 MariaDB。

MySQL采用了??GPL(GNU General Public License)?? 協議。

MySQL支持大型數據庫,支持5000萬條記錄的數據倉庫,32位系統表文件最大可支持4GB ,64位系統支持最大的表文件為8TB 。

MySQL可以允許運行于多個系統上,并且支持多種語言。這些編程語言包括C、C++、Python、Java、Perl、PHP和Ruby等。

發展歷史圖

MySQL從5.7版本直接跳躍發布了8.0版本,在功能上做了顯著的改進與增強,開發者對MySQL的源代碼進行了重構,最突出的一點是對MySQL Optimizer優化器進行了改進。

RDBMS與非RDBMS

關系型數據庫(RDBMS)

例如:??Oracle??、??MySQL?? 和 ??SQL Server??等等。

這種類型的數據庫是最古老的數據庫類型,關系型數據庫模型是把復雜的數據結構歸結為簡單的??二元關系??(即二維表格形式)。

關系型數據庫以行(row) 和列(column) 的形式存儲數據,以便于用戶理解。這一系列的行和列被稱為表(table) ,一組表組成了一個庫(database)。

表與表之間的數據記錄有關系(relationship)。關系型數據庫,就是建立在關系模型基礎上的數據庫。SQL 就是關系型數據庫的查詢語言

優勢

復雜查詢:可以用SQL語句方便的在一個表以及多個表之間做非常復雜的數據查詢。

事務支持:使得對于安全性能很高的數據訪問要求得以實現。

非關系型數據庫(非RDBMS)

非關系型數據庫,可看成傳統關系型數據庫的功能閹割版本,基于鍵值對存儲數據,不需要經過SQL層的解析, 性能非常高。同時,通過減少不常用的功能,進一步提高性能。

鍵值型數據庫

鍵值型數據庫通過 Key-Value 鍵值的方式來存儲數據,其中 Key 和 Value 可以是簡單的對象,也可以是復雜的對象。Key 作為唯一的標識符,優點是查找速度快,在這方面明顯優于關系型數據庫,缺點是無法像關系型數據庫一樣使用條件過濾(比如 WHERE),如果你不知道去哪里找數據,就要遍歷所有的鍵,這就會消耗大量的計算。

鍵值型數據庫典型的使用場景是作為??內存緩存???。??Redis??是最流行的鍵值型數據庫。

文檔型數據庫

此類數據庫可存放并獲取文檔,可以是XML、JSON等格式。在數據庫中文檔作為處理信息的基本單位,一個文檔就相當于一條記錄。文檔數據庫所存放的文檔,就相當于鍵值數據庫所存放的“值”。

MongoDB是最流行的文檔型數據庫。此外,還有CouchDB等。

搜索引擎數據庫

雖然關系型數據庫采用了索引提升檢索效率,但是針對全文索引效率卻較低。搜索引擎數據庫是應用在搜索引擎領域的數據存儲形式,由于搜索引擎會爬取大量的數據,并以特定的格式進行存儲,這樣在檢索的時候才能保證性能最優。核心原理是“倒排索引”。

典型產品:Solr、Elasticsearch、Splunk 等。

列式數據庫

列式數據庫是相對于行式存儲的數據庫,Oracle、MySQL、SQL Server 等數據庫都是采用的行式存儲(Row-based),而列式數據庫是將數據按照列存儲到數據庫中,這樣做的好處是可以大量降低系統的I/O,適合于分布式文件系統,不足在于功能相對有限。

典型產品:HBase等。

圖形數據庫

圖形數據庫,利用了圖這種數據結構存儲了實體(對象)之間的關系。圖形數據庫最典型的例子就是社交網絡中人與人的關系,數據模型主要是以節點和邊(關系)來實現,特點在于能高效地解決復雜的關系問題。

典型產品:Neo4J、InfoGrid等。

有些情況下,使用??性能更高??、??成本更低??的非關系型數據庫是更明智的選擇。比如:日志收集、排行榜、定時器等。

關系型數據庫設計規則

關系型數據庫的典型數據結構就是 ??數據表?? ,這些數據表的組成都是結構化的(Structured)。

一個數據庫中可以有多個表,每個表都有一個名字,用來標識自己。表名具有唯一性。

表、記錄、字段

E-R(entity-relationship,實體-聯系)模型中有三個主要概念是: 實體集屬性聯系集

一個實體集(class)對應于數據庫中的一個表(table)一個實體(instance)則對應于數據庫表中的一行(row),也稱為一條記錄(record)。一個屬性(attribute)對應于數據庫表中的一列(column),也稱為一個字段(field)。

ORM思想 (Object Relational Mapping)體現

數據庫中的一個表 <---> Java或Python中的一個類表中的一條數據 <---> 類中的一個對象(或實體)表中的一個列 <----> 類中的一個字段、屬性(field)

表的關聯關系

表與表之間的數據記錄有關系(relationship)。現實世界中的各種實體以及實體之間的各種聯系均用關系模型來表示。

四種:一對一關聯、一對多關聯、多對多關聯、自我引用

一對一關聯(one-to-one)

在實際的開發中應用不多,因為一對一可以創建成一張表。

兩種建表原則:

外鍵唯一:主表的主鍵和從表的外鍵(唯一),形成主外鍵關系,外鍵唯一。外鍵是主鍵:主表的主鍵和從表的主鍵,形成主外鍵關系。
一對多關系(one-to-many)

一對多建表原則:在從表(多方)創建一個字段,字段作為外鍵指向主表(一方)的主鍵

多對多(many-to-many)

要表示多對多關系,必須創建第三個表,該表通常稱為??聯接表??,它將多對多關系劃分為兩個一對多關系。將這兩個表的主鍵都插入到第三個表中。

自我引用(Self reference)

面試題

1.談談了解的常見的數據庫

答:Oracle、MySQl、SQL Server、DB2、PGSQL;Redis、MongoDB、ES等等

2.談談你對MySQL歷史、特點的理解

答:

歷史:由瑞典的MySQL AB 公司創立,1995開發出的MySQL2008年,MySQL被SUN公司收購2009年,Oracle收購SUN公司,進而Oracle就獲取了MySQL2016年,MySQL8.0.0版本推出特點:開源的、關系型的數據庫支持千萬級別數據量的存儲,大型的數據庫

3.說說你對DB、DBMS、SQL的理解

答:

DB:database,看做是數據庫文件。DBMS:數據庫管理系統。

MySQL數據庫服務器中安裝了MySQL DBMS, 使用MySQL DBMS 來管理和操作DB,使用的是SQL語言。

4.你知道哪些非關系型數據庫?

鍵值型數據庫:Redis文檔型數據庫:MongoDB搜索引擎數據庫:ES、Solr列式數據庫:HBase圖形數據庫:InfoGrid

5.表與表的記錄之間存在哪些關聯關系?

ORM思想:Object-Relational Mapping,它的作用是在關系型數據庫和對象之間作一個映射,這樣,我們在具體的操作數據庫的時候,就不需要再去和復雜的SQL語句打交道,只要像平時操作對象一樣操作它就可以了。表,數據,字段。表與表的記錄之間的關系:一對一關系、一對多關系、多對多關系、自關聯。

標簽: 數據庫管理系統 搜索引擎 圖形數據庫

上一篇:振弦采集模塊配置工具VMTool生成寄存器值
下一篇:【深入淺出Spring原理及實戰】「源碼調試分析」結合DataSourceRegister深入分析ImportBeanDefinitionRegistrar的源碼運作流程