sqlite mysql pgsql_SQLite 、MySQL 与PostgreSQL三个关系型数据库的比较
SQLite 、MySQL 與PostgreSQL三個(gè)關(guān)系型數(shù)據(jù)庫的比較
1970年埃德加·科德提出關(guān)系模型之后,關(guān)系型數(shù)據(jù)庫便開始出現(xiàn),經(jīng)過40多年的演化,如今的關(guān)系型數(shù)據(jù)庫不僅種類繁多,而且功能強(qiáng)大,使用廣泛。面對(duì)如此之多的關(guān)系型數(shù)據(jù)庫,我們應(yīng)該如何比較,來找出適合自己應(yīng)用場(chǎng)景的數(shù)據(jù)庫系統(tǒng)呢?O.S. Tezer最近在DigitalOcean上發(fā)表了一篇博文,對(duì)比了SQLite、MySQL和PostgreSQL這三個(gè)常用的、流行的關(guān)系型數(shù)據(jù)庫管理系統(tǒng)(RDBMS),希望能對(duì)讀者有所幫助。
O.S. Tezer分別從數(shù)據(jù)庫支持的數(shù)據(jù)類型、優(yōu)勢(shì)、劣勢(shì)、何時(shí)應(yīng)該使用以及何時(shí)不應(yīng)該使用該數(shù)據(jù)庫這5個(gè)方面對(duì)SQLite、MySQL和PostgreSQL做了比較。
一、SQLite
SQLite是一款輕型數(shù)據(jù)庫,遵守ACID,能夠嵌入到使用它的應(yīng)用程序中。它作為一個(gè)自包含的、基于文件的數(shù)據(jù)庫,SQLite提供了非常出色的工具集,能夠處理所有類型的數(shù)據(jù),與托管在服務(wù)器上基于進(jìn)程的關(guān)系型數(shù)據(jù)庫相比它的約束更少,也更易用。
當(dāng)應(yīng)用程序使用SQLite時(shí),SQLite作為應(yīng)用程序的一部分,應(yīng)用程序通過調(diào)用SQLite的接口直接訪問數(shù)據(jù)文件,而并非作為一個(gè)獨(dú)立進(jìn)程通過某種通信協(xié)議(例如socket)和應(yīng)用程序通信。感謝類庫的底層技術(shù),它讓SQLite變得非常快速、高效且十分強(qiáng)大。
1.SQLite支持的數(shù)據(jù)類型
SQLite支持的數(shù)據(jù)類型包括:NULL
INTEGER
REAL
TEXT
BLOB。
注意:如果你想了解與SQLite數(shù)據(jù)類型相關(guān)的更多內(nèi)容,可以參閱官方文檔。
2.SQLite的優(yōu)點(diǎn)
以下是SQLite的三個(gè)主要優(yōu)點(diǎn):
(1)基于文件 :整個(gè)數(shù)據(jù)庫完全由磁盤上的一個(gè)文件構(gòu)成,這使得它的可移植性非常好。
(2)標(biāo)準(zhǔn)化 :盡管它看起來像一個(gè)“簡(jiǎn)化版”的數(shù)據(jù)庫實(shí)現(xiàn),但是SQLite確實(shí)支持SQL。它省略了一些功能(RIGHT OUTER JOIN和FOR EACH STATEMENT),但同時(shí)也增加了一些額外的功能。
(3)非常適合開發(fā)甚至是測(cè)試 :在大多數(shù)應(yīng)用程序的開發(fā)階段,大部分開發(fā)人員可能都非常需要一個(gè)能夠支持并發(fā)擴(kuò)展的解決方案。SQLite 包含豐富的功能,所能提供的特性超乎開發(fā)所需,使用起來也非常簡(jiǎn)潔——只需要一個(gè)文件和一個(gè)C鏈接庫。
3.SQLite的缺點(diǎn)
以下是SQLite的兩個(gè)主要缺點(diǎn):
(1)沒有用戶管理 :高級(jí)數(shù)據(jù)庫都支持用戶系統(tǒng),例如管理連接對(duì)數(shù)據(jù)庫和表的訪問權(quán)限。鑒于SQLite的目的和性質(zhì)(沒有多客戶端并發(fā)的高層設(shè)計(jì)),它并不包含這些功能。
(2)缺少通過優(yōu)化獲得額外性能的空間 :還是由于設(shè)計(jì)方面的原因,無法通過優(yōu)化SQLite獲得大量的額外性能。這個(gè)類庫非常容易調(diào)整、也非常容易使用。它并不復(fù)雜,所以從技術(shù)上無法讓它變得更快,因?yàn)樗呀?jīng)很快了。
4.何時(shí)應(yīng)該使用SQLite
在以下3種情況下可以考慮使用SQLite:
(1)嵌入式應(yīng)用程序
所有需要可移植性、不需要擴(kuò)展的應(yīng)用程序,例如單用戶的本地應(yīng)用、移動(dòng)應(yīng)用或者游戲。
(2)替代磁盤訪問
在很多情況下,需要直接讀寫磁盤文件的應(yīng)用程序可以切換到SQLite從而受益于SQLite提供的額外功能以及使用結(jié)構(gòu)化查詢語言(SQL)所帶來的簡(jiǎn)便性。
(3)測(cè)試
對(duì)大部分應(yīng)用程序而言沒必要使用額外的進(jìn)程測(cè)試業(yè)務(wù)邏輯(例如應(yīng)用程序的主要目標(biāo):功能)。
5.何時(shí)不應(yīng)該使用SQLite
在以下2種情況下步應(yīng)該使用SQLite:
(1)多用戶應(yīng)用程序
如果有多個(gè)客戶端需要訪問并使用同一個(gè)數(shù)據(jù)庫,那么最好使用功能完整的關(guān)系型數(shù)據(jù)庫(例如MySQL),而不是選擇SQLite。
(2)需要高寫入量的應(yīng)用程序
寫操作是SQLite的一個(gè)局限。該DBMS在同一時(shí)刻僅允許一個(gè)寫操作,因而也限制了其吞吐量。
二、MySQL
MySQL是最受歡迎的一個(gè)大規(guī)模數(shù)據(jù)庫服務(wù)器。它是一款功能豐富的開源產(chǎn)品,許多網(wǎng)站與在線應(yīng)用程序都使用該數(shù)據(jù)庫。MySQL的入門相對(duì)比較簡(jiǎn)單,開發(fā)者可以從Internet上獲取到大量同該數(shù)據(jù)庫相關(guān)的信息。
注意:鑒于該產(chǎn)品的受歡迎程度,使用該數(shù)據(jù)庫可以讓我們受益于大量第三方應(yīng)用程序、工具以及集成類庫。
盡管MySQL并沒有嘗試實(shí)現(xiàn)完整的SQL標(biāo)準(zhǔn),但是它依然為用戶提供了大量功能。它作為一個(gè)獨(dú)立的數(shù)據(jù)庫服務(wù)器,不同于SQLite,它的應(yīng)用程序需要同MySQL守護(hù)進(jìn)程通信才能訪問數(shù)據(jù)庫。
1.MySQL支持的數(shù)據(jù)類型
MySQL支持的數(shù)據(jù)類型包括:TINYINT、SMALLINT、MEDIUMINT、INT或INTEGER、BIGINT、FLOAT、DOUBLE、DOUBLE PRECISION、REAL、DECIMAL、NUMERIC、DATE、DATETIME、TIMESTAMP、TIME、YEAR、CHAR、VARCHAR、TINYBLOB, TINYTEXT、BLOB, TEXT、MEDIUMBLOB、MEDIUMTEXT、LONGBLOB, LONGTEXT、ENUM、SET。
2.MySQL的優(yōu)點(diǎn)
以下是MySQL的5個(gè)主要優(yōu)點(diǎn):
(1)易用 --很容易安裝。第三方工具,包括可視化工具,讓用戶能夠很容易入門。
(2)功能豐富 --MySQL支持關(guān)系型數(shù)據(jù)庫應(yīng)該有的大部分功能——或者直接支持、或者間接支持。
(3)安全 --支持很多安全特性,有些非常高級(jí),并且是內(nèi)置于MySQL中。
(4)可擴(kuò)展也非常強(qiáng)大 --MySQL能夠處理大量數(shù)據(jù),并且在需要的時(shí)候可以規(guī)模化使用。
(5)快速 --放棄某些標(biāo)準(zhǔn)讓MySQL能夠非常高效、簡(jiǎn)捷地工作,因而速度更快。
3.MySQL的缺點(diǎn)
(1)已知限制 --MySQL從一開始就沒有打算做所有事情,因而它在功能方面有一定的局限性,并不能滿足一些先進(jìn)應(yīng)用程序的要求。
(2)可靠性問題 --MySQL對(duì)某些功能(例如引用、事務(wù)、審計(jì)等)的實(shí)現(xiàn)方式使得它與其他的關(guān)系型數(shù)據(jù)庫相比缺少了一些可靠性。
(3)開發(fā)停滯 --盡管MySQL依然是一款開源產(chǎn)品,但是自從它被收購之后人們就對(duì)其開發(fā)進(jìn)展有很多抱怨。需要注意的是有一些基于MySQL的、完整集成的數(shù)據(jù)庫在標(biāo)準(zhǔn)的MySQL之上附加了其他價(jià)值,例如MariaDB。
4.何時(shí)應(yīng)該使用MySQL
在以下4種情況下可以考慮使用MySQL:
(1)分布式操作 --如果SQLite不能滿足你的需求,那么將MySQL引入到開發(fā)棧中,就像任何其他獨(dú)立的數(shù)據(jù)庫服務(wù)器一樣,它能夠給你帶來大量的操作自由度以及一些先進(jìn)的功能。
(2)高安全性 --MySQL的安全機(jī)制通過一種簡(jiǎn)單的方式為數(shù)據(jù)的訪問和使用提供了可靠的保護(hù)。
(3)網(wǎng)站和Web應(yīng)用 --盡管有一些約束,但是絕大部分網(wǎng)站和Web應(yīng)用都可以簡(jiǎn)單地運(yùn)行在MySQL上。相關(guān)的靈活可擴(kuò)展的工具非常易于使用和管理——事實(shí)證明這些工具在長期運(yùn)行時(shí)非常有用。
(4)定制解決方案 --MySQL有豐富的配置項(xiàng)和運(yùn)行模式,如果你需要一個(gè)高度量身定制的解決方案,那么MySQL能夠非常容易地尾隨并執(zhí)行你的規(guī)則。
5.何時(shí)不應(yīng)該使用MySQL
在以下3種情況下不應(yīng)該MySQL:
(1)SQL遵從性 --因?yàn)镸ySQL并沒有打算實(shí)現(xiàn)完整的SQL標(biāo)準(zhǔn),所以它并不完全符合SQL。如果你可能需要與這樣的關(guān)系型數(shù)據(jù)庫集成,那么從MySQL切換過去可能并不容易。
(2)并發(fā)性 --盡管MySQL和一些其他的存儲(chǔ)引擎能夠非常好地執(zhí)行讀操作,但是并發(fā)讀寫可能會(huì)有問題。
(3)缺少功能 --MySQL缺少某些功能,例如全文本搜索。
三、PostgreSQL
PostgreSQL是一款先進(jìn)的、開源的對(duì)象關(guān)系型數(shù)據(jù)庫管理系統(tǒng),它的主要目標(biāo)是遵從標(biāo)準(zhǔn)與可擴(kuò)展。PostgreSQL,或者說Postgres,試圖將ANSI/ISO SQL標(biāo)準(zhǔn)及其修正結(jié)合起來。與其他關(guān)系型數(shù)據(jù)庫相比,PostgreSQL獨(dú)特的地方是它支持高度需要的、完整的面向?qū)ο笠约瓣P(guān)系型數(shù)據(jù)庫的功能,比如完全支持可靠性事務(wù)。
由于其強(qiáng)大的底層技術(shù),PostgreSQL能夠非常高效地處理很多任務(wù)。得益于多版本并發(fā)控制(MVCC),它能夠在沒有讀鎖的情況下實(shí)現(xiàn)并發(fā)并保證ACID。由于PostgreSQL是高度可編程的,因此擴(kuò)展性非常好,它支持稱為“存儲(chǔ)過程”的自定義程序。用戶可以創(chuàng)建這種函數(shù)簡(jiǎn)化重復(fù)的、復(fù)雜的以及經(jīng)常需要的數(shù)據(jù)庫操作的執(zhí)行。
盡管該數(shù)據(jù)庫非常強(qiáng)大,可它卻沒有像MySQL那么流行,即便如此依然有很多優(yōu)秀的第三方工具和類庫可以讓我們更容易地使用它。
1.PostgreSQL支持的數(shù)據(jù)類型
PostgreSQL支持的數(shù)據(jù)類型包括:bigint、bigserial、bit [(n)]、bit varying [(n)]、boolean、box、bytea、character varying [(n)]、character [(n)]、cidr、circle、date、double precision、inet、integer、interval [fields] [(p)]、line、lseg、macaddr、money、numeric [(p,s)]、path、point、polygon、real、smallint、serial、text、time、timestamp、tsquery、tsvector、txid_snapshot、uuid、xml
2.PostgreSQL的優(yōu)點(diǎn)
以下是PostgreSQL的5個(gè)主要優(yōu)點(diǎn):
(1)開源且遵從SQL標(biāo)準(zhǔn) --PostgreSQL是一款開源的、免費(fèi)的、功能非常強(qiáng)大的關(guān)系型數(shù)據(jù)庫。
(2)強(qiáng)大的社區(qū) --由一個(gè)忠實(shí)的、經(jīng)驗(yàn)豐富的社區(qū)支持,用戶可以通過知識(shí)庫和Q&A網(wǎng)站獲得全天候的免費(fèi)服務(wù)。
(3)強(qiáng)有力的第三方支持 --除了非常先進(jìn)的特性之外,PostgreSQL還有很多優(yōu)秀的、開源的第三方工具可以輔助系統(tǒng)的設(shè)計(jì)、管理和使用。
(4)可擴(kuò)展 --可以通過存儲(chǔ)過程擴(kuò)展PostgreSQL的功能。
(5)面向?qū)ο?--PostgreSQL不僅是一個(gè)關(guān)系型數(shù)據(jù)庫,它還是一個(gè)面向?qū)ο蟮臄?shù)據(jù)庫——支持嵌套等功能。
3.PostgreSQL的缺點(diǎn)
以下是PostgreSQL的3個(gè)主要缺點(diǎn):
(1)性能--對(duì)于簡(jiǎn)單繁重的讀取操作,使用PostgreSQL可能有點(diǎn)小題大做,同時(shí)性能也比MySQL這樣的同類產(chǎn)品要差。
(2)流行程度 --盡管有大量的部署,但是鑒于該數(shù)據(jù)庫的性質(zhì),它的受歡迎程序并不高。
(3)托管 --由于上面提到的幾點(diǎn),很難找到提供托管PostgreSQL實(shí)例的主機(jī)或者服務(wù)提供商。
4.何時(shí)應(yīng)該使用PostgreSQL
在以下4種情況下可以考慮使用PostgreSQL:
(1)數(shù)據(jù)完整性 --當(dāng)絕對(duì)需要可靠性和數(shù)據(jù)完整性的時(shí)候,PostgreSQL是更好的選擇。
(2)復(fù)雜的定制程序 --若需要數(shù)據(jù)庫執(zhí)行定制程序,那么可擴(kuò)展的PostgreSQL是更好的選擇。
(3)集成--若將來可能需要將整個(gè)數(shù)據(jù)庫遷移到其他合適的解決方案上(比如Oracle),那么PostgreSQL可能兼容性最好也更容易切換。
(4)復(fù)雜的設(shè)計(jì) --與其他開源且免費(fèi)的數(shù)據(jù)庫相比,對(duì)于復(fù)雜的數(shù)據(jù)庫設(shè)計(jì)PostgreSQL在功能方面最全面,潛力最大,不需要你放棄其他有價(jià)值的資產(chǎn)。
5.何時(shí)不應(yīng)該使用PostgreSQL
在以下3種情況下不應(yīng)該P(yáng)ostgreSQL:
(1)速度 --若你只需要快速讀取操作,那么PostgreSQL并不合適。
(2)簡(jiǎn)單 --除非你需要絕對(duì)的數(shù)據(jù)完整性,ACID遵從性或者設(shè)計(jì)復(fù)雜,否則對(duì)于簡(jiǎn)單的場(chǎng)景而言PostgreSQL有點(diǎn)多余。
(3)復(fù)制 --對(duì)于缺少數(shù)據(jù)庫與系統(tǒng)管理經(jīng)驗(yàn)的人而言使用MySQL實(shí)現(xiàn)復(fù)制要更簡(jiǎn)單,除非你愿意花費(fèi)時(shí)間、精力和資源。
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的sqlite mysql pgsql_SQLite 、MySQL 与PostgreSQL三个关系型数据库的比较的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 永劫无间头像框在哪里
 - 下一篇: 微博怎么发(微博搜索的微博)