更新時間:2020-09-18 來源:黑馬程序員 瀏覽量:
根據(jù)存儲數(shù)據(jù)時所用數(shù)據(jù)模型的不同,當(dāng)今互聯(lián)網(wǎng)中的的數(shù)據(jù)庫主要分為兩種:關(guān)系型數(shù)據(jù)庫和非關(guān)系型數(shù)據(jù)庫。
關(guān)系型數(shù)據(jù)庫是指采用關(guān)系模型(即二維表格形式)組織數(shù)據(jù)的數(shù)據(jù)庫系統(tǒng),它由數(shù)據(jù)表和數(shù)據(jù)表之間的關(guān)系組成,主要包含以下核心元素:
數(shù)據(jù)行:一條記錄,相當(dāng)于Python對象;
數(shù)據(jù)列:字段,相當(dāng)于Python對象的屬性;
數(shù)據(jù)表:數(shù)據(jù)行的集合;
數(shù)據(jù)庫:數(shù)據(jù)表的集合。
下面看一個數(shù)據(jù)表的示例,如圖1所示。
關(guān)系型數(shù)據(jù)庫經(jīng)歷了幾十年的發(fā)展,技術(shù)比較成熟,因其具有容易理解、操作簡單、便于維護(hù)的特點(diǎn),而被廣泛應(yīng)用到各個行業(yè)的數(shù)據(jù)管理中。目前,主流的關(guān)系型數(shù)據(jù)庫有Oracle、MySQL、IBM Db2、PostgreSQL、Microsoft SQL Server、Microsoft Access等,其中使用較多的有Oracle和MySQL數(shù)據(jù)庫。
非關(guān)系型數(shù)據(jù)庫也被稱為NoSQL(Not Only SQL)數(shù)據(jù)庫,是指非關(guān)系型的、分布式的數(shù)據(jù)存儲系統(tǒng)。與關(guān)系型數(shù)據(jù)庫相比,非關(guān)系型數(shù)據(jù)庫無需事先為要存儲的數(shù)據(jù)建立字段,它沒有固定的結(jié)構(gòu),既可以擁有不同的字段,也可以存儲各種格式的數(shù)據(jù)。
非關(guān)系型數(shù)據(jù)庫的種類繁多。按照不同的數(shù)據(jù)模型,非關(guān)系型數(shù)據(jù)庫主要可以分為列存儲數(shù)據(jù)庫、鍵值存儲數(shù)據(jù)庫、文檔型數(shù)據(jù)庫,下面分別介紹這些數(shù)據(jù)庫各自的特征及適用范圍。
(1) 鍵值(Key-Value)存儲數(shù)據(jù)庫
鍵值存儲數(shù)據(jù)庫采用鍵值結(jié)構(gòu)存儲數(shù)據(jù),每個鍵分別對應(yīng)一個特定的值。這類數(shù)據(jù)庫具有易部署、查詢速度快、存儲量大、高并發(fā)操作等特點(diǎn),適用于處理大量數(shù)據(jù)的高訪問負(fù)載和一些日志系統(tǒng)等。
鍵值存儲數(shù)據(jù)庫的典型代表有Redis、Flare、MemcacheDB等。
(2) 列式(Column-Oriented)存儲數(shù)據(jù)庫
列式存儲數(shù)據(jù)庫采用列式結(jié)構(gòu)存儲數(shù)據(jù),將同一列數(shù)據(jù)存儲到一起。這類數(shù)據(jù)庫具有查詢速度快、可擴(kuò)展性強(qiáng)等特點(diǎn),更容易進(jìn)行分布式擴(kuò)展,適用于分布式的文件系統(tǒng)。
列式存儲數(shù)據(jù)庫的典型代表有Hbase、Cassandra等。
(3) 文檔型(Document-Oriented)存儲數(shù)據(jù)庫
文檔型存儲數(shù)據(jù)庫的結(jié)構(gòu)與鍵值存儲數(shù)據(jù)庫類似,采用文檔(如JSON或XML等格式)結(jié)構(gòu)存儲數(shù)據(jù),每個文檔中包含多個鍵值對。這類數(shù)據(jù)庫的數(shù)據(jù)結(jié)構(gòu)要求并不嚴(yán)格,具有表結(jié)構(gòu)可變、查詢速度更快的特點(diǎn),適用于Web應(yīng)用的場景。
文檔型數(shù)據(jù)庫的典型代表有MongoDB、CouchDB等。
為了讓讀者更好地理解文檔型數(shù)據(jù)庫的數(shù)據(jù)結(jié)構(gòu),這里以MongoDB為例進(jìn)行介紹。MongoDB數(shù)據(jù)庫主要包含3個核心元素,分別為文檔、集合和數(shù)據(jù)庫,各個元素的介紹如下。
·文檔:由JSON或XML數(shù)據(jù)構(gòu)成的對象,對應(yīng)關(guān)系數(shù)據(jù)庫中的行;
·集合:文檔的物理容器,對應(yīng)關(guān)系數(shù)據(jù)庫中的表;
·數(shù)據(jù)庫:集合的物理容器,一個數(shù)據(jù)庫中可以包含多個文檔;
在眾多數(shù)據(jù)庫中,MySQL、MongoDB和Redis都是比較突出的,應(yīng)用也比較廣泛。針對這些主流的數(shù)據(jù)庫,Python提供了包或模塊實(shí)現(xiàn)程序與數(shù)據(jù)庫交互。例如,使用pymysql庫操作MySQL數(shù)據(jù)庫,使用pymongo模塊操作MongoDB數(shù)據(jù)庫,使用redis模塊操作Redis數(shù)據(jù)庫。
猜你喜歡:
數(shù)據(jù)庫是什么?數(shù)據(jù)庫由哪幾部分組成?
什么是關(guān)系型數(shù)據(jù)庫和非關(guān)系型數(shù)據(jù)庫?