1. 程式人生 > >SQLite、MySQL和PostgreSQL 三種關係資料庫哪個好?

SQLite、MySQL和PostgreSQL 三種關係資料庫哪個好?

轉自:https://www.ssdax.com/2188.html

關係型資料庫的使用已經有相當長的時間了。它們變得流行起來託了管理系統的福,關係模型被實現得相當的好,並且被證明是操作資料的好方法(特別是事務性強的應用)。

在這篇DigitalOcean文章中,我們將嘗試理解一些最常用、最流行的關係型資料庫管理系統(RDBMS)的核心區別。我們將會探索最底層的區別——特性與功能,它們如何工作,在哪方面更出色,以幫助程式設計師選擇合適的RDBMS。


目錄:

一、資料庫管理系統
1、關係型資料庫管理系統
2、關係與資料型別
3、重要的和流行的關係型資料庫

二、SQLite
1、SQLite支援的資料型別
2、SQLite的優勢
3、SQLite的劣勢
4、何時使用SQLite
5、何時不用SQLite

三、MySQL
1、MySQL支援的資料型別
2、MySQL的優勢
3、MySQL的劣勢
4、何時使用MySQL
5、何時不用MySQL

四、PostgreSQL
1、PostgreSQL支援的資料型別
2、PostgreSQL的優勢
3、PostgreSQL的劣勢
4、何時使用PostgreSQL
5、何時不用PostgreSQL

一、資料庫管理系統

資料庫是有組織地儲存模型資料的空間,儲存各種型別的資訊(資料)。每個資料庫,除了無模式型的,都有一個模型,提供資料的結構描述。資料庫管理系統是管理資料庫結構、大小和排序的應用(或庫)。

1、關係型資料庫管理系統

關係型資料庫系統實現了關係模型,並用它來處理資料。關係模型在表中將資訊與欄位關聯起來(也就是schemas),從而儲存資料。

這種資料庫管理系統需要結構(例如表)在儲存資料之前被定義出來。有了表,每一列(欄位)都儲存一個不同型別(資料型別)的資訊。資料庫中的每個記錄,都有自己唯一的key,作為屬於某一表的一行,行中的每一個資訊都對應了表中的一列——所有的關係一起,構成了關係模型。

2、關係和資料型別

關係可以被看做是包含一系列共同表示被保持資料庫以及相關資訊的屬性的數學集合. 這種型別的識別和採集方法可以讓關係型資料庫以它們自己的方式運作.

在定義一個可以向其中插入資料的表時,每一個形成一條記錄的元素(例如: 屬性)都必須同定義的資料型別相匹配(例如:一個integer, 一個date 等等.). 不同的關係型資料庫管理系統實現了不同的資料型別 -- 它們不總是能直接互相轉換的.

與限制的協作,就像我們之前已經介紹過的,在關係資料庫的使用中是很普遍的。事實上,限制形成了關係的核心.

3、重要和流行的關係型資料庫

本文中,我們將會介紹三種主要而且重要的開源關係型資料庫管理系統,是他們影響了應用開發世界。

SQLite一個強大的嵌入式關係型資料庫管理系統
MySQL最流行的RDBMS
PostgreSQL最先進SQL型開源objective-RDBMS

注: 開源應用總是可以自由使用的。大多數時候,複製工程(利用程式碼)建立新應用也是被允許的。如果你對DBMS感興趣,你可以看看一些基於這些工程的分支專案,例如MariaDB。

二、SQLite

SQLite是非凡的資料庫,他可以程序在使用它的應用中。作為一個自包含、基於檔案的資料庫,SQLite提供了出色的工具集,可以處理所有型別的資料,沒有什麼限制,而且比起伺服器執行的程序型伺服器使用起來輕鬆許多。

一個應用使用SQLite時,它的功能直接被整合在其中,應用會直接訪問包含資料的檔案(即SQLite資料庫),而不是通過一些埠(port, socket)來互動。感謝這種底層技術,這使SQLite變得非常快速和高效,並且十分強大。

1、SQLite支援的資料型別

NULLNULL值
INTEGER有符號整數,按照設定用1、2、3、4、6或8位元組儲存
REAL浮點數,使用8位元組IEEE浮點數方式儲存
TEXT文字字串,使用資料庫編碼儲存(UTF-8, UTF-16BE 或 UTF-16LE)
BLOB二進位制大物件,怎麼輸入就怎麼儲存

2、SQLite 的優點

基於檔案整個資料庫都包含在磁碟上的一個檔案中,因此它有很好的遷移性
標準化儘管它看起來像個“簡化版”的資料庫,SQLite 確實支援 SQL。它略去了一些功能(RIGHT OUTER JOIN 和 FOR EACH STATEMENT),但是,又同時增加了一些其他功能
對開發乃至測試都很棒在絕大多數應用的開發階段中,大部分人都非常需要解決方案能有併發的靈活性。SQLite 含有豐富功能基礎,所能提供的超乎開發所需,並且簡潔到只需一個檔案和一個 C 連結庫

3、SQLite的缺點

沒有使用者管理高階資料庫都能支援使用者系統,例如,能管理資料庫連線對資料庫和表的訪問許可權。但由於 SQLite 產生的目的和本身性質(沒有多使用者併發的高層設計),它沒有這個功能
缺乏額外優化效能的靈活性仍然是從設計之初,SQLite 就不支援使用各種技巧來進行額外的效能優化。這個庫容易配置,容易使用。既然它並不複雜,理論上就無法讓它比現在更快,其實現在它已經很快了

4、什麼時候要用 SQLite

嵌入式應用所有需要遷移性,不需要擴充套件的應用,例如,單使用者的本地應用,移動應用和遊戲
代替磁碟訪問在很多情況下,需要頻繁直接讀/寫磁碟檔案的應用,都很適合轉為使用 SQLite ,可以得益於 SQLite 使用 SQL 帶來的功能性和簡潔性
測試它能秒殺大部分專門針對應用業務邏輯(也就是應用的主要目的:能完成功能)的測試

5、什麼時候不要用SQLite

多使用者應用如果你在開發的應用需要被多使用者訪問,而且這些使用者都用同一個資料庫,那麼相比 SQLite 最好還是選擇一個功能完整的關係型資料庫(例如 MySQL)
需要大面積寫入資料的應用SQLite 的缺陷之一是它的寫入操作。這個資料庫同一時間只允許一個寫操作,因此吞吐量有限

三、MySQL

MySQL 在所有大型資料庫伺服器中最流行的一個. 它的特性豐富,產品的開源性質使得其驅動了線上大量的網站和應用程式. 要入手 MySQL 相對簡單,開發人員可以在網際網路上面訪問到大量有關這個資料庫的資訊.

注意: 由於這個產品的普及性,大量的第三方應用、工具和整合庫對於操作這個RDBCMS的方方面面大有幫助.

Mysql沒有嘗試去實現SQL標準的全部,而是為使用者提供了很多有用的功能. 作為一個獨立的資料庫伺服器,應用程式同Mysql守護程序的互動,告訴它去訪問資料庫自身 -- 這一點不像 SQLite.

1、MySQL支援的資料型別

TINYINT一個非常小的整數
SMALLINT一個小整數
MEDIUMINT一箇中間大小的整數
INT or INTEGER一個正常大小的整數
BIGINT一個大的整數
FLOAT一個小的 (單精度) 浮點數,不能是無符號的那種
DOUBLE, DOUBLE PRECISION, REAL一個正常大小 (雙精度) 的浮點數,不能使無符號的那種
DECIMAL, NUMERIC沒有被包裝的浮點數。不能使無符號的那種
DATE一個日期
DATETIME一個日期和時間的組合
TIMESTAMP一個時間戳
TIME一個時間
YEAR一個用兩位或者4位數字格式表示的年份(預設是4位)
CHAR一個固定長度的字串,儲存時總是在其固定長度的空間裡右對齊
VARCHAR一個可變長度的字串
TINYBLOB, TINYTEXT一個BLOB或者TEXT列,最大長度255 (2^8 - 1)個字元
BLOB, TEXT一個BLOB或者TEXT列,最大長度 65535 (2^16 - 1)個字元
MEDIUMBLOB, MEDIUMTEXT一個BLOB或者TEXT列,最大長度 16777215 (2^24 - 1)個字元
LONGBLOB, LONGTEXT一個BLOB或者TEXT列,最大長度4294967295 (2^32 - 1) 個字元
ENUM一個列舉型別
SET一個集合

2、MySQL的優點

容易使用安裝MySQL非常容易。第三方庫,包括視覺化(也就是有GUI)的庫讓上手使用資料庫非常簡單
功能豐富MySQL 支援大部分關係型資料庫應該有的 SQL 功能——有些直接支援,有些間接支援
安全MYSQL 有很多安全特性,其中有些相當高階
靈活而強大MySQL 能處理很多資料,此外如有需要,它還能“適應”各種規模的資料
快速放棄支援某些標準,讓 MySQL 效率更高並能使用捷徑,因此帶來速度的提升

3、MySQL的缺點

已知的侷限從設計之初,MySQL 就沒打算做到全知全能,因此它有一些功能侷限,無法滿足某些頂尖水平應用的需求
可靠性問題MySQL 對於某些功能的實現方式(例如,引用,事務,資料稽核等) 使得它比其他一些關係型資料庫略少了一些可靠性
開發停滯儘管 MySQL 理論上仍是開源產品,也有人抱怨它誕生之後更新緩慢。然而,應該注意到有一些基於 MySQL 並完整整合的資料庫(如 MariaDB),在標準的 MySQL 基礎上帶來了額外價值

4、何時使用 MySQL?

分散式操作當你需要的比SQLite可以提供的更多時,把MySQL包括進你的部署棧,就像任何一個獨立的資料庫伺服器,會帶來大量的操作自由和一些先進的功能
高安全性MySQL的安全功能,用一種簡單的方式為資料訪問(和使用)提供了可靠的保護
Web網站 和 Web應用絕大多數的網站(和Web應用程式)可以忽視約束性地簡單工作在MySQL上。這種靈活的和可擴充套件的工具是易於使用和易於管理的——這被證明非常有助於長期執行
定製解決方案如果你工作在一個高度量身定製的解決方案上,MySQL能夠很容易地尾隨和執行你的規則,這要感謝其豐富的配置設定和操作模式

5、何時不用 MySQL?

SQL 服從性因為 MySQL 沒有[想要]實現 SQL 的全部標準,所以這個工具不完全符合SQL。如果你需要對這樣的關係資料庫管理系統進行整合,從MySQL進行切換是不容易的
併發即使MySQL和一些儲存引擎能夠真地很好執行讀取操作,但併發讀寫還是有問題的

相關推薦

SQLiteMySQLPostgreSQL 關係資料庫哪個

轉自:https://www.ssdax.com/2188.html關係型資料庫的使用已經有相當長的時間了。它們變得流行起來託了管理系統的福,關係模型被實現得相當的好,並且被證明是操作資料的好方法(特別是事務性強的應用)。在這篇DigitalOcean文章中,我們將嘗試理解一

用華為eNSP模擬器配置HybridTrunkAccess鏈路類型端口

acc 數據包 相互 子網劃分 幫助 system-v 兩個 5.0 能夠   上一篇文章寫到三層交換機實現多個VLAN之間互相通訊,有朋友提問要如何進行配置,可有案例分析。其實那天我在寫的時候也有做過模擬,只是後來沒有保存。今天重新模擬一次,並附上詳細配置命令,希望能夠幫

Apache PreforkWorkerEventMPM分析

更多 可用 make ret 負載 install 插入 mic per 三種MPM介紹   Apache 2

matlab生成隨機數的randrandirandn形式

matlab中關於隨機數的產生有3種庫函式,下面我們來看看它們的形式:   1、rand(…)    它是生成0~1之間(開環,不包含0和1兩個數)均勻分佈的偽隨機數,也就是無窮次試驗其中每個數產生的概率是一樣的。    它的函式格式如下: <span sty

DASSANNAS伺服器儲存方式

一、儲存的分類 根據伺服器型別分為:封閉系統的儲存和開放系統的儲存, 封閉系統主要指大型機, 開放系統指基於Windows、UNIX、Linux等作業系統的伺服器; 開放系統的儲存分為: 內建儲存 外掛儲存 外掛儲存根據連線的方式分為: 直連式儲存

解讀x86ARMMIPS主流晶片架構

指令集可分為複雜指令集(CISC)和精簡指令集(RISC)兩部分,代表架構分別是x86、ARM和MIPS。   ARMRISC是為了提高處理器執行速度而設計的晶片體系,它的關鍵技術在於流水線操作即在一個時鐘週期裡完成多條指令。相較複雜指令集CISC而言,以RISC為架構體

OracleVerticaHive資料庫查詢表空間的方法

最近在工作中碰到了查詢Oracle、Vertica和Hive表空間的需求,整理如下: IDE分類: Oracle—PLSQL DEVELOPER; Vertica—DBVisualizer; Hive—SecureCRT; 資料庫分類: O

AccessHybridTrunk模式的理解

乙太網埠的三種鏈路型別:Access、Hybrid和Trunk Access型別的埠只能屬於1個VLAN,一般用於連線計算機的埠; Trunk型別的埠可以允許多個VLAN通過,可以接收和傳送多個VLAN的報文,一般用於交換機之間連線的埠; Hybrid型別

華為:AccessHybridTrunk模式的理解

1.關於tag和untag:     tag, untag以及交換機的各種埠模式我一直沒怎麼明白,這裡整理一下。     untag就是普通的Ethernet報文,普通PC機的網絡卡是可以識別這樣的報文進行通訊;     tag報文結構的變化是在源mac地址和目的mac地址

電路常識性概念(6)-VCCVDDVSS標號的區別

在電子電路中,常可以看到VCC、VDD和VSS三種不同的符號,它們有什麼區別呢?  一、解釋  VCC:C=circuit 表示電路的意思, 即接入電路的電壓;  VDD:D=device 表示器件的意思, 即器件內部的工作電壓;  VSS:S=series 表示公共連線的意思,通常指電路公共接地端電壓。 

交換機AccessHybridTrunk模式

因為自己在配置交換機埠模式的時候老是記不清,特意寫一個部落格記錄一下。其實Access和Trunk是很容易分清楚的,倒是Hybrid有幾個特殊的地方,這裡簡要摘錄一下。 交換機埠工作模式簡介:

雲端計算服務模式SaaSPaaSIaaS及其之間關係

     它們之間的關係主要可以從兩個角度進行分析:其一是使用者體驗角度,從這個角度而言,它們之間關係是獨立的,因為它們面對不同型別的使用者。其二是技術角度,從這個角度而言,它們並不是簡單的繼承關係(Saa..... 三種服務模式 根據現在最常用,也是比較權威的NI

MySQL常見的存儲引擎(InnoDBMyISAMMEMORY)

sql 壓縮 安全性 inno 一個表 engines 內存 占用空間 mit 先去查一下“引擎”概念。 引擎(Engine)是電子平臺上開發程序或系統的核心組件。利用引擎,開發者可迅速建立、鋪設程序所需的功能,或利用其輔助程序的運轉。一般而言,引擎是一個程序或一套系

PHPMySQLJavaScript學習手冊筆記(

php efault ava asc 學習 mys comm 否則 hello 第四章 條件語句 <?php if ($cond<100) { echo "cond <100"; } else { echo "cond >100"; }

最牛乾貨 :解讀產品運營資料個基友關係

曾經被問到產品和運營的關係。   網路上有很多答案:比如產品經理負責把產品生下來,運營負責把它養大;比如共穿一條褲子的好基友,等等。   在我看來,兩者是不分割彼此的。可能初級的產品策劃和產品運營(包括其他運營)因為崗位工作內容的不同,具有挺大的差別。隨著兩者段位

簡單談談我對Java 中 Class.forName()Class.class例項物件.getClass() 獲取位元組碼物件的理解?(內含程式碼分析總結)

首先得明白的知識點: 1靜態屬性初始化載入類的時候初始化( 只會初始化一次),而非靜態屬性的初始化就是new類例項物件的時候初始化的 2三種獲取位元組碼物件的共同點就是都會預先的判斷記憶體是否已經載入此類,弱沒有載入,則會把.class檔案裝入到記憶體,若是載入了,則會根據class檔案生成例

SQLiteMySQLPostgreSQL關係資料庫的比較

概述和功能 SQLite是一個基於檔案的嵌入式RDBMS,不需要任何安裝或設定。反過來,這意味著應用程式不在需要啟動,停止或配置的單獨伺服器程序下執行。這種無伺服器架構使資料庫能夠跨平臺相容。 完整的SQL資料庫包含在單個磁碟檔案中,所有讀取和寫入都直接在此磁碟檔案上進行。由於資料直接寫回磁

11.連續分配分頁分段儲存分配機制的優缺點

連續,設計簡單,直接定址,效率高。缺點:記憶體利用效率最低,有內部碎片。分頁,設計最複雜,容易產生外部碎片,無論資料有多少,都只能按照頁面大小分配,造成浪費。分段,程式設計師在程式設計和使用上多方面的要

MySQL PostgreSQL 相容關係資料庫

Ticketmaster 的資料架構師 Linda Xu 介紹了 Ticketmaster 向 Amazon Aurora 遷移的過程。她首先介紹的是對 Ticketmaster 關鍵資料庫向 Amazon Aurora 進行生產遷移的評估。Ticketmaster 是全

過載覆蓋隱藏關係

過載 相同的範圍(在同一個類中) 函式名字相同 引數不同 virtual關鍵字可有可無 覆蓋(重寫) 不同的範圍(分別位於派生類和基類) 函式名字相同 引數相同 基類函式必須有virtu