SQLite、MySQL與PostgreSQL三個關係數據庫的比較

參考文章:SQLite、MySQL與PostgreSQL三個關係數據庫的比較

關係數據庫管理系統(RDBMS)是世界上使用最廣泛的數據庫管理系統之一。基於Edgar F. Codd發明的關係模型,這些數據庫以表格的形式存儲數據,並允許通過建立表格之間的關係來鏈接數據。這導致了一種有效的數據存儲機制,其中數據可以從數據庫中的其他地方引用。

在本文中,我們比較 了市場上 最流行的三種開源RDBMS。該比較深入研究了體系結構,業務連續性,用例和支持方面的差異,這些差異可幫助您在爲應用程序執行數據庫系統時做出明智的決策。

SQLite

SQLite是一個基於文件的嵌入式關係數據庫系統,不需要任何安裝或配置。這意味着應用程序不在需要啓動,停止或配置成單獨的服務器進程運行,這樣的無服務器架構使數據庫能夠跨平臺兼容。

完整的SQL數據庫包含在單個磁盤文件中,所有讀取和寫入都直接在此磁盤上進行。數據直接寫回磁盤文件,SQLite遵守ACID屬性,使用事務保護因意外系統崩潰或電源故障導致的內存分配故障和磁盤I/O錯誤。

優點和用例

SQLite是三個數據庫中最精巧的RDMS,其數據庫的大小小於600 KB。由於體積小,且具備RDBMS的特性,它的移植性非常好,尤其適合物聯網和嵌入式設備。

還有其他一些用例比如中小流量網站(每天約100K請求),用於測試和內部開發目的,使用Tcl或Python進行數據分析以及教學目的(這很容易設置並可用於教SQL對學生的概念)。

SQLite的一個主要優點是它作爲客戶端/服務器企業RDBMS的補充解決方案。比如,它可以在本地緩存來自客戶端/服務器RDBMS的數據,從而減少查詢延遲,並在企業RDBMS中斷時保持最終應用程序的活動。

SQLite支持的數據類型

SQLite支持的數據類型包括:NULL、INTEGER、REAL、TEXT、BLOB。

缺點

  1. SQLite的一個主要缺點是缺少多用戶功能,這些能夠在MySQL和PostgreSQL等成熟的RDBMS中找到,但SQLite缺少細粒度訪問控制、友好的用戶管理以及加密數據庫文件本身的安全功能。如果設計CRM和SaaS應用程序等多用戶應用程序時,這是SQLite一個主要缺點,在構建多用戶或多租戶應用程序時,通常不應使用SQLite。
  2. SQLite的另一大缺點是它處理序列化的寫操作,這可能是大併發應用程序的主要瓶頸。由於SQLite是基於文件的DBMS,由於文件系統本身的限制,可能會導致較大數據集的性能問題。在這些實例中選擇客戶端/服務器數據庫(如MySQL和PostgreSQL)是適合的,尤其是在處理大數據等大型數據集時。
  3. 另外說明的是,任何主要雲計算提供商都缺乏任何數據庫即服務(DBaaS)產品。隨着公共雲的出現,開發人員和DevOps團隊使用PaaS服務(如DBaaS)變得是常事。頂級公共雲提供商缺乏託管服務意味着共同管理任務必須由數據庫管理員負責,從而增加運營成本。

所有權,支持和主要客戶

SQLite是由一組開發人員維護的開源數據庫。對於社區支持,它提供公共郵件列表,並提供付費專業支持。SQLite的一些主要客戶有Facebook,谷歌和蘋果等公司。

MySQL

概述和功能

MySQL是最流行的開源和大規模RDBMS系統之一。它與SQLite不同,它採用多線程SQL服務器組成的服務器/客戶端體系結構。這種多線程特性有更高的性能,內核線程可以輕鬆利用多個CPU。該數據庫使用C和C++編寫,支持各種操作系統,如Windows Server操作系統和其它Linux發行版,如RHEL 7和Ubuntu。它還遵循ACID系統以實現事務一致性,並提供各種連接器和API,如C,C++,Java,PHP等語言。

可伸縮性,安全性和複製是使MySQL成爲企業應用程序中最受歡迎的選擇之一。

以下是MySQL的一些關鍵功能:

  1. MySQL安全功能包括MySQL Access Privilege System,它提供用戶身份驗證,用戶帳戶管理系統 和使用SSL加密連接。
  2. MySQL提供從主服務器到從服務器/主服務器到主服務器的複製功能,這在擴展讀取時非常有用,可用作備份解決方案,甚至可以在發生停機時進行故障轉移。MySQL還有具有更多功能的企業級商用產品。

         例如,MySQL企業版具有MySQL透明數據加密(TDE),MySQL企業備份和MySQL文檔存儲等附加功能。

  1. MySQL還提供嵌入式多線程庫,爲嵌入式和物聯網系統提供更小的佔用空間。

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。

優點與用例

除了具有多個企業級功能外,MySQL和SQLite之間的另一主要區別是MySQL對多用戶功能的支持,企業功能和可擴展性一起使MySQL成爲分佈式應用程序的理想選擇。

在吞吐量和性能方面,MySQL比PostgreSQL具備優勢,可用於簡單的讀取操作。與PostgreSQL相比,它的安裝和使用也更加簡單,擁有更廣泛的開發者社區。

缺點

當MySQL將舊數據移動到稱爲回滾段的單獨區域時,批量INSERT會對性能產生負影響。在此方面是PostgreSQL的亮點。對於長時間運行的SELECT,它也不能很好地工作,最適合較小的SELECT,尤其是覆蓋聚簇索引的SELECT。其他一些缺點包括缺乏全文搜索和慢速併發讀寫。

所有者,支持與主要客戶

MySQL由Oracle擁有和維護。通過論壇維護社區支持,並通過 購買  商業產品獲得重要支持。MySQL的一些主要客戶是Facebook,GitHub和YouTube等。

PostgreSQL

  1. PostgreSQL是一個開源對象RDBMS,特別強調可擴展性和標準兼容性。與MySQL一樣,PostgreSQL使用客戶端/服務器數據庫模型和處理客戶端通信,管理數據庫文件和操作的服務器進程,它被稱爲進程。
  2. PostgreSQL通過爲每個連接創建(“分叉”)新進程來處理併發客戶端會話。此進程與主進程分開,並在客戶端連接的生命週期內創建和銷燬。Postgres用C編寫,符合ACID標準,支持函數和存儲過程。與MySQL不同,PostgreSQL支持物化視圖(緩存視圖),從而支持更快地頻繁訪問大型和活動表。
  3. 與MySQL一樣,PostgreSQL也有一些高級功能,如安全性和複製。PostgreSQL依賴於主數據庫和從數據庫之間的同步複製。除了提供用戶訪問控制,基於主機的訪問控制和用戶身份驗證之外,PostgreSQL本身還提供使用SSL加密客戶端/服務器通信的功能。完全ACID合規性是PostgreSQL的原生,而它存在於InnoDB和MySQL的NDB Cluster程序中。
  4. PostgreSQL使用稱爲多版本併發控制或MVCC的技術來維護數據併發訪問期間的數據一致性。此技術優於僅使用鎖定進行併發,因爲它最大限度地減少了多用戶環境中的鎖爭用,從而顯着提高了性能。對於向後兼容性或需要經典鎖技術的應用程序,PostgreSQL還允許表和行鎖定技術提供併發性。相反,MySQL僅支持InnoDB實例中的MVCC。

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

優點和用例

  1. PostgreSQL完全免費,而且是BSD協議,如果你把PostgreSQL改一改,然後再拿去賣錢,也沒有人管你,這一點很重要,這表明了PostgreSQL數據庫不會被其它公司控制。oracle數據庫不用說了,是商業數據庫,不開放。而MySQL數據庫雖然是開源的,但現在隨着SUN被oracle公司收購,現在基本上被oracle公司控制,其實在SUN被收購之前,MySQL中最重要的InnoDB引擎也是被oracle公司控制的,而在MySQL中很多重要的數據都是放在InnoDB引擎中的,反正我們公司都是這樣的。所以如果MySQL的市場範圍與oracle數據庫的市場範圍衝突時,oracle公司必定會犧牲MySQL,這是毫無疑問的。  
  2. 與PostgreSQl配合的開源軟件很多,有很多分佈式集羣軟件,如pgpool、pgcluster、slony、plploxy等等,很容易做讀寫分離、負載均衡、數據水平拆分等方案,而這在MySQL下則比較困難。 
  3. PostgreSQL源代碼寫的很清晰,易讀性比MySQL強太多了,懷疑MySQL的源代碼被混淆過。所以很多公司都是基本PostgreSQL做二次開發的。 
  4. PostgreSQL在很多方面都比MySQL強,如複雜SQL的執行、存儲過程、觸發器、索引。同時PostgreSQL是多進程的,而MySQL是線程的,雖然併發不高時,MySQL處理速度快,但當併發高的時候,對於現在多核的單臺機器上,MySQL的總體處理性能不如PostgreSQL,原因是MySQL的線程無法充分利用CPU的能力

缺點

在頻繁的UPDATE期間可以看到PostgreSQL很大的缺點,它不支持聚簇索引,與MySQL數據庫相比,PostgreSQL會對性能產生較大負面影響。

所有者,支持與主要客戶

PostgreSQL是開源的,源代碼發佈在PostgreSQL全球開發組上,並由其維護。PostgreSQL有社區和商業支持兩種選擇。社區支持採用郵件列表的形式,同時開發者也可以找到商業支持提供商列表。儘管與MySQL相比,PostgreSQL的市場份額較小,但它擁有令人印象深刻的客戶名單,如AWS RedShift,Instagram,ViaSat和Cloudera。

小結

  1. 在流行度方面,MySQL遠遠領先於PostgreSQL和SQLite,但在將其作爲事實上的選擇之前需要考慮應用程序用例和具體功能。
  2. 強大的ACID規範性和高併發等特性使PostgreSQL成爲MySQL強有力的競爭者。另一方面,SQLite在嵌入式和物聯網應用程序方面表現優異,其中SQLite庫的極小佔用空間使其比競爭對手更有優勢。如果你正在開發一個多用戶應用程序,那麼SQLite將是一個糟糕的選擇,你須對比PostgreSQL和MySQL的優缺點。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章