sqlite mysql pgsql_SQLite 、MySQL 与PostgreSQL三个关系型数据库的比较
SQLite 、MySQL 與PostgreSQL三個關系型數據庫的比較
1970年埃德加·科德提出關系模型之后,關系型數據庫便開始出現,經過40多年的演化,如今的關系型數據庫不僅種類繁多,而且功能強大,使用廣泛。面對如此之多的關系型數據庫,我們應該如何比較,來找出適合自己應用場景的數據庫系統呢?O.S. Tezer最近在DigitalOcean上發表了一篇博文,對比了SQLite、MySQL和PostgreSQL這三個常用的、流行的關系型數據庫管理系統(RDBMS),希望能對讀者有所幫助。
O.S. Tezer分別從數據庫支持的數據類型、優勢、劣勢、何時應該使用以及何時不應該使用該數據庫這5個方面對SQLite、MySQL和PostgreSQL做了比較。
一、SQLite
SQLite是一款輕型數據庫,遵守ACID,能夠嵌入到使用它的應用程序中。它作為一個自包含的、基于文件的數據庫,SQLite提供了非常出色的工具集,能夠處理所有類型的數據,與托管在服務器上基于進程的關系型數據庫相比它的約束更少,也更易用。
當應用程序使用SQLite時,SQLite作為應用程序的一部分,應用程序通過調用SQLite的接口直接訪問數據文件,而并非作為一個獨立進程通過某種通信協議(例如socket)和應用程序通信。感謝類庫的底層技術,它讓SQLite變得非常快速、高效且十分強大。
1.SQLite支持的數據類型
SQLite支持的數據類型包括:NULL
INTEGER
REAL
TEXT
BLOB。
注意:如果你想了解與SQLite數據類型相關的更多內容,可以參閱官方文檔。
2.SQLite的優點
以下是SQLite的三個主要優點:
(1)基于文件 :整個數據庫完全由磁盤上的一個文件構成,這使得它的可移植性非常好。
(2)標準化 :盡管它看起來像一個“簡化版”的數據庫實現,但是SQLite確實支持SQL。它省略了一些功能(RIGHT OUTER JOIN和FOR EACH STATEMENT),但同時也增加了一些額外的功能。
(3)非常適合開發甚至是測試 :在大多數應用程序的開發階段,大部分開發人員可能都非常需要一個能夠支持并發擴展的解決方案。SQLite 包含豐富的功能,所能提供的特性超乎開發所需,使用起來也非常簡潔——只需要一個文件和一個C鏈接庫。
3.SQLite的缺點
以下是SQLite的兩個主要缺點:
(1)沒有用戶管理 :高級數據庫都支持用戶系統,例如管理連接對數據庫和表的訪問權限。鑒于SQLite的目的和性質(沒有多客戶端并發的高層設計),它并不包含這些功能。
(2)缺少通過優化獲得額外性能的空間 :還是由于設計方面的原因,無法通過優化SQLite獲得大量的額外性能。這個類庫非常容易調整、也非常容易使用。它并不復雜,所以從技術上無法讓它變得更快,因為它已經很快了。
4.何時應該使用SQLite
在以下3種情況下可以考慮使用SQLite:
(1)嵌入式應用程序
所有需要可移植性、不需要擴展的應用程序,例如單用戶的本地應用、移動應用或者游戲。
(2)替代磁盤訪問
在很多情況下,需要直接讀寫磁盤文件的應用程序可以切換到SQLite從而受益于SQLite提供的額外功能以及使用結構化查詢語言(SQL)所帶來的簡便性。
(3)測試
對大部分應用程序而言沒必要使用額外的進程測試業務邏輯(例如應用程序的主要目標:功能)。
5.何時不應該使用SQLite
在以下2種情況下步應該使用SQLite:
(1)多用戶應用程序
如果有多個客戶端需要訪問并使用同一個數據庫,那么最好使用功能完整的關系型數據庫(例如MySQL),而不是選擇SQLite。
(2)需要高寫入量的應用程序
寫操作是SQLite的一個局限。該DBMS在同一時刻僅允許一個寫操作,因而也限制了其吞吐量。
二、MySQL
MySQL是最受歡迎的一個大規模數據庫服務器。它是一款功能豐富的開源產品,許多網站與在線應用程序都使用該數據庫。MySQL的入門相對比較簡單,開發者可以從Internet上獲取到大量同該數據庫相關的信息。
注意:鑒于該產品的受歡迎程度,使用該數據庫可以讓我們受益于大量第三方應用程序、工具以及集成類庫。
盡管MySQL并沒有嘗試實現完整的SQL標準,但是它依然為用戶提供了大量功能。它作為一個獨立的數據庫服務器,不同于SQLite,它的應用程序需要同MySQL守護進程通信才能訪問數據庫。
1.MySQL支持的數據類型
MySQL支持的數據類型包括: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的優點
以下是MySQL的5個主要優點:
(1)易用 --很容易安裝。第三方工具,包括可視化工具,讓用戶能夠很容易入門。
(2)功能豐富 --MySQL支持關系型數據庫應該有的大部分功能——或者直接支持、或者間接支持。
(3)安全 --支持很多安全特性,有些非常高級,并且是內置于MySQL中。
(4)可擴展也非常強大 --MySQL能夠處理大量數據,并且在需要的時候可以規模化使用。
(5)快速 --放棄某些標準讓MySQL能夠非常高效、簡捷地工作,因而速度更快。
3.MySQL的缺點
(1)已知限制 --MySQL從一開始就沒有打算做所有事情,因而它在功能方面有一定的局限性,并不能滿足一些先進應用程序的要求。
(2)可靠性問題 --MySQL對某些功能(例如引用、事務、審計等)的實現方式使得它與其他的關系型數據庫相比缺少了一些可靠性。
(3)開發停滯 --盡管MySQL依然是一款開源產品,但是自從它被收購之后人們就對其開發進展有很多抱怨。需要注意的是有一些基于MySQL的、完整集成的數據庫在標準的MySQL之上附加了其他價值,例如MariaDB。
4.何時應該使用MySQL
在以下4種情況下可以考慮使用MySQL:
(1)分布式操作 --如果SQLite不能滿足你的需求,那么將MySQL引入到開發棧中,就像任何其他獨立的數據庫服務器一樣,它能夠給你帶來大量的操作自由度以及一些先進的功能。
(2)高安全性 --MySQL的安全機制通過一種簡單的方式為數據的訪問和使用提供了可靠的保護。
(3)網站和Web應用 --盡管有一些約束,但是絕大部分網站和Web應用都可以簡單地運行在MySQL上。相關的靈活可擴展的工具非常易于使用和管理——事實證明這些工具在長期運行時非常有用。
(4)定制解決方案 --MySQL有豐富的配置項和運行模式,如果你需要一個高度量身定制的解決方案,那么MySQL能夠非常容易地尾隨并執行你的規則。
5.何時不應該使用MySQL
在以下3種情況下不應該MySQL:
(1)SQL遵從性 --因為MySQL并沒有打算實現完整的SQL標準,所以它并不完全符合SQL。如果你可能需要與這樣的關系型數據庫集成,那么從MySQL切換過去可能并不容易。
(2)并發性 --盡管MySQL和一些其他的存儲引擎能夠非常好地執行讀操作,但是并發讀寫可能會有問題。
(3)缺少功能 --MySQL缺少某些功能,例如全文本搜索。
三、PostgreSQL
PostgreSQL是一款先進的、開源的對象關系型數據庫管理系統,它的主要目標是遵從標準與可擴展。PostgreSQL,或者說Postgres,試圖將ANSI/ISO SQL標準及其修正結合起來。與其他關系型數據庫相比,PostgreSQL獨特的地方是它支持高度需要的、完整的面向對象以及關系型數據庫的功能,比如完全支持可靠性事務。
由于其強大的底層技術,PostgreSQL能夠非常高效地處理很多任務。得益于多版本并發控制(MVCC),它能夠在沒有讀鎖的情況下實現并發并保證ACID。由于PostgreSQL是高度可編程的,因此擴展性非常好,它支持稱為“存儲過程”的自定義程序。用戶可以創建這種函數簡化重復的、復雜的以及經常需要的數據庫操作的執行。
盡管該數據庫非常強大,可它卻沒有像MySQL那么流行,即便如此依然有很多優秀的第三方工具和類庫可以讓我們更容易地使用它。
1.PostgreSQL支持的數據類型
PostgreSQL支持的數據類型包括: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的優點
以下是PostgreSQL的5個主要優點:
(1)開源且遵從SQL標準 --PostgreSQL是一款開源的、免費的、功能非常強大的關系型數據庫。
(2)強大的社區 --由一個忠實的、經驗豐富的社區支持,用戶可以通過知識庫和Q&A網站獲得全天候的免費服務。
(3)強有力的第三方支持 --除了非常先進的特性之外,PostgreSQL還有很多優秀的、開源的第三方工具可以輔助系統的設計、管理和使用。
(4)可擴展 --可以通過存儲過程擴展PostgreSQL的功能。
(5)面向對象 --PostgreSQL不僅是一個關系型數據庫,它還是一個面向對象的數據庫——支持嵌套等功能。
3.PostgreSQL的缺點
以下是PostgreSQL的3個主要缺點:
(1)性能--對于簡單繁重的讀取操作,使用PostgreSQL可能有點小題大做,同時性能也比MySQL這樣的同類產品要差。
(2)流行程度 --盡管有大量的部署,但是鑒于該數據庫的性質,它的受歡迎程序并不高。
(3)托管 --由于上面提到的幾點,很難找到提供托管PostgreSQL實例的主機或者服務提供商。
4.何時應該使用PostgreSQL
在以下4種情況下可以考慮使用PostgreSQL:
(1)數據完整性 --當絕對需要可靠性和數據完整性的時候,PostgreSQL是更好的選擇。
(2)復雜的定制程序 --若需要數據庫執行定制程序,那么可擴展的PostgreSQL是更好的選擇。
(3)集成--若將來可能需要將整個數據庫遷移到其他合適的解決方案上(比如Oracle),那么PostgreSQL可能兼容性最好也更容易切換。
(4)復雜的設計 --與其他開源且免費的數據庫相比,對于復雜的數據庫設計PostgreSQL在功能方面最全面,潛力最大,不需要你放棄其他有價值的資產。
5.何時不應該使用PostgreSQL
在以下3種情況下不應該PostgreSQL:
(1)速度 --若你只需要快速讀取操作,那么PostgreSQL并不合適。
(2)簡單 --除非你需要絕對的數據完整性,ACID遵從性或者設計復雜,否則對于簡單的場景而言PostgreSQL有點多余。
(3)復制 --對于缺少數據庫與系統管理經驗的人而言使用MySQL實現復制要更簡單,除非你愿意花費時間、精力和資源。
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的sqlite mysql pgsql_SQLite 、MySQL 与PostgreSQL三个关系型数据库的比较的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 永劫无间头像框在哪里
- 下一篇: timesten支持mysql吗_Tim