自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

開源數(shù)據(jù)庫SQLite、MySQL和PostgreSQL比較

數(shù)據(jù)庫 PostgreSQL
Linux是一款免費開源的操作系統(tǒng),由于其自由、開放、安全、穩(wěn)定等諸多特點,已被各大IT公司廣泛地應用于服務器和嵌入式設備中。

Linux是一款免費開源的操作系統(tǒng),由于其自由、開放、安全、穩(wěn)定等諸多特點,已被各大IT公司廣泛地應用于服務器和嵌入式設備中。

由于數(shù)據(jù)存儲的需要,Linux操作系統(tǒng)需要搭配一套性能優(yōu)良的數(shù)據(jù)庫才能很好的滿足業(yè)務需求,但是Linux系統(tǒng)下可用的數(shù)據(jù)庫種類繁多,功能和性能也是各有千秋,往往我們需要根據(jù)業(yè)務場景來靈活的選擇要使用的數(shù)據(jù)庫。

 

開源數(shù)據(jù)庫SQLite、MySQL和PostgreSQL比較

但有時因為缺乏經(jīng)驗,選擇了不合適的數(shù)據(jù)庫,導致業(yè)務運轉過程中出現(xiàn)了許多問題和瓶頸,比如后臺系統(tǒng)需要進行大量且頻繁的并發(fā)讀寫操作,但選擇了MySQL,導致使用過程中出現(xiàn)了許多不可避免的讀寫錯誤;再比如很多嵌入式系統(tǒng)需要支持多用戶,卻選擇了SQLite,雖說SQLite小巧輕便,遷移性好,很適合嵌入式系統(tǒng),但是他并不支持多用戶管理。所以如何選擇一套適合的數(shù)據(jù)庫就是我們所面臨的一道難題。

當下Linux系統(tǒng)中常用的數(shù)據(jù)庫包括兩大類,一是商業(yè)型數(shù)據(jù)庫,比如Oracle、Sybase、DB2、Informix、SQL Server等;二是開源免費的數(shù)據(jù)庫,比如MySQL、PostgreSQL、SQLite等。商業(yè)數(shù)據(jù)庫的功能與性能自不必多說,它們背后還有強大的技術團隊的支持,此處我們要講的是幾種常用的開源免費數(shù)據(jù)庫。本文根據(jù)我們的日常開發(fā)經(jīng)驗,簡單的對MySQL、PostgreSQL、SQLite進行比較,給大家提供一個參考。

1、SQLite數(shù)據(jù)庫

 

開源數(shù)據(jù)庫SQLite、MySQL和PostgreSQL比較

SQLite是一款輕量級的關系型數(shù)據(jù)庫,它是用C語言實現(xiàn)的。它是供嵌入式使用的,已廣泛地應用到各個嵌入式系統(tǒng)中。它占用資源非常的低,在嵌入式設備中,可能只需要幾百K的內存就夠了。

SQLite能夠支持Windows/Linux/Unix等等主流的操作系統(tǒng),同時能夠跟很多程序語言相結合,比如 C++、C#、PHP、Java等,和Mysql、PostgreSQL這兩款開源的世界著名數(shù)據(jù)庫管理系統(tǒng)相比,它的處理速度比他們都快。

(1)SQLite的優(yōu)勢

它的第一個特色是輕量級。SQLite的作者很看重這個特性,連它的Logo都是用的“羽毛”,來顯擺它的輕飄飄。和客戶端/服務器模式的數(shù)據(jù)庫又說不同,SQLite是本地數(shù)據(jù)庫,他是進程內的數(shù)據(jù)庫引擎。使用SQLite室只需要帶上它的一個動態(tài) 庫,就可以享受它的全部功能,并且這個動態(tài)庫的尺寸也挺小。

SQLite的另外一個特點是綠色。它的核心引擎本身不依賴第三方的軟件,使用它也不需要“安裝”,只需要引入動態(tài)庫即可,所以在部署的時候能夠省去不少麻煩。

跨平臺/可移植性,如果光支持主流操作系統(tǒng),那就沒啥好吹噓的了。除了主流操作系統(tǒng),SQLite還支持了很多冷門的操作系統(tǒng)。尤其是它對很多嵌入式系統(tǒng)支持的非常好,比如Android、Windows Mobile、Symbin、Palm、VxWorks等。

SQLite使用的是Public Domain協(xié)議,這是最爽一種,可以放心大膽地用,毫無限制的使用。

(2)SQLite的缺點

SQLite在并發(fā)(包括多進程和多線程)讀寫方面的性能一直不太理想。數(shù)據(jù)庫可能會被寫操作獨占,從而導致其它讀寫操作阻塞或出錯。

SQLite對SQL標準支持不全,在它的官方網(wǎng)站上,具體列舉了不支持哪些SQL92標準。特別是不支持外鍵的約束.

有時候需要訪問其它機器上的SQLite庫文件,就會把數(shù)據(jù)庫文件放置到網(wǎng)絡共享目錄上。這時候你就要小心了。當SQLite文件放置于NFS時,在并發(fā)讀寫的情況下可能會出問題(比如數(shù)據(jù)損壞),原因是由于某些NFS網(wǎng)絡文件系統(tǒng)的文件鎖在實現(xiàn)上是有Bug的。

(3)使用場景

一是嵌入式應用場景,所有需要遷移性,不需要擴展的應用,例如,單用戶的本地應用,移動應用和游戲。

二是代替磁盤訪問的場景,在很多情況下,需要頻繁直接讀/寫磁盤文件的應用,都很適合轉為使用 SQLite ,可以得益于 SQLite 使用 SQL 帶來的功能性和簡潔性。

2、MySQL數(shù)據(jù)庫

 

開源數(shù)據(jù)庫SQLite、MySQL和PostgreSQL比較

MySQL是最流行的關系型數(shù)據(jù)庫管理系統(tǒng),是最好的關系數(shù)據(jù)庫管理系統(tǒng)應用軟件之一。MySQL所使用的 SQL 語言是用于訪問數(shù)據(jù)庫的最常用標準化語言。MySQL由于其體積小、速度快、免費開源,被IT公司廣泛的采用。

(1)MySQL的優(yōu)勢

它使用的核心線程是完全多線程,速度快并支持多處理器。有多種列類型:1、2、3、4、和8字節(jié)長度自有符號/無符號整數(shù)、FLOAT、DOUBLE、CHAR、VARCHAR、TEXT、BLOB、DATE、TIME、DATETIME、 TIMESTAMP、YEAR、和ENUM類型。

它通過一個高度優(yōu)化的類庫實現(xiàn)SQL函數(shù)庫并像他們能達到的一樣快速,通常在查詢初始化后不該有任何內存分配。沒有內存漏洞,支持ANSI SQL的LEFT 0UTER JOIN和ODBC。

MySQL可以工作在不同的平臺上。支持C、C++、Java、Perl、PHP、Python和TCL API。

MySQL全面支持SQL的GROUP BY和ORDER BY子句,支持聚合函數(shù)(COUNT()、COUNT(DISTINCT)、AVG()、STD()、SUM()、MAX()和MIN())。你可以在同一查詢中混來自不同數(shù)據(jù)庫的表。所有列都有缺省值。你可以用INSERT插入一個表列的子集,那些沒用明確給定值的列設置為他們的決省值。

(2)MySQL的缺點

  • MySQL最大的缺點是其安全系統(tǒng),主要是復雜而非標準,另外只有到調用mysqladmin來重讀用戶權限時才發(fā)生改變。
  • MySQL的另一個主要的缺陷之一是缺乏標準的RI(Referential Integrity-RI)機制;Rl限制的缺乏(在給定字段域上的一種固定的范圍限制)可以通過大量的數(shù)據(jù)類型來補償。 MySQL沒有一種存儲過程(Stored Procedure)語言,這是對習慣于企業(yè)級數(shù)據(jù)庫的程序員的最大限制。

(3)MySQL的使用場景

  • 分布式操作場景:當你需要的比SQLite可以提供的更多時,把MySQL包括進你的部署棧,就像任何一個獨立的數(shù)據(jù)庫服務器,會帶來大量的操作自由和一些先進的功能。
  • 高安全性場景:MySQL的安全功能,用一種簡單的方式為數(shù)據(jù)訪問(和使用)提供了可靠的保護。
  • Web網(wǎng)站和Web應用場景:絕大多數(shù)的網(wǎng)站(和Web應用程序)可以忽視約束性地簡單工作在MySQL上。這種靈活的和可擴展的工具是易于使用和易于管理的——這被證明非常有助于長期運行。
  • 定制解決方案場景:如果你工作在一個高度量身定制的解決方案上,MySQL能夠很容易地尾隨和執(zhí)行你的規(guī)則,這要感謝其豐富的配置設置和操作模式。
  • 多用戶應用場景:如果你在開發(fā)的應用需要被多用戶訪問,而且這些用戶都用同一個數(shù)據(jù)庫,那么相比 SQLite,最好還是選擇一個功能完整的關系型數(shù)據(jù)庫MySQL。

3、PostgreSQL數(shù)據(jù)庫

 

開源數(shù)據(jù)庫SQLite、MySQL和PostgreSQL比較

PostgreSQL是一個功能非常強大的、源代碼開放的客戶/服務器關系型數(shù)據(jù)庫管理系統(tǒng),以加州大學計算機系開發(fā)的POSTGRES,4.2版本為基礎發(fā)展起來的對象關系型數(shù)據(jù)庫管理系統(tǒng)。PostgresSQL憑借其經(jīng)過驗證的架構,可靠性,數(shù)據(jù)完整性,強大的功能集,可擴展性以及軟件背后的開源社區(qū)的奉獻精神贏得了良好的聲譽,PostgreSQL被廣泛地應用到各大IT軟件系統(tǒng)中。

(1)PostgreSQL的優(yōu)勢

  • PostgreSQL支持存儲過程,且有眾多的商業(yè)邏輯的存在,此時使用存儲過程可以在較少地增加數(shù)據(jù)庫服務器的負擔的前提下,對這樣的商業(yè)邏輯進行封裝,并可以利用數(shù)據(jù)庫服務器本身的內在機制對存儲過程的執(zhí)行進行優(yōu)化。此外存儲過程的存在也避免了在網(wǎng)絡上大量的原始的SQL語句的傳輸,這樣的優(yōu)勢是顯而易見的。
  • PostgreSQL支持視圖,視圖的存在可以最大限度地利用數(shù)據(jù)庫服務器內在的優(yōu)化機制。而且對于視圖權限的合理使用,事實上可以提供行級別的權限,這是MySQL和SQLite的權限系統(tǒng)所無法實現(xiàn)的
  • PostgreSQL支持觸發(fā)器,觸發(fā)器的存在不可避免的會影響數(shù)據(jù)庫運行的效率,但是與此同時,觸發(fā)器的存在也有利于對商業(yè)邏輯的封裝,可以減少應用程序中對同一商業(yè)邏輯的重復控制。合理地使用觸發(fā)器也有利于保證數(shù)據(jù)的完整性。
  • PostgreSQL支持R-trees這樣可擴展的索引類型,可以更方便地處理一些特殊數(shù)據(jù),支持ODBC。

(2)PostgreSQL的缺點

  • PostgreSQL運行速度明顯低于MySQL和SQLite,因為MySQL使用了線程,而PostgreSQL使用的是進程。在不同線程之間的環(huán)境轉換和訪問公用的存儲區(qū)域顯然要比在不同的進程之間要快得多。
  • PostgreSQL目前仍不完全適應24×7小時運行,這是因為你必須每隔一段時間運行一次VACUUM。
  • PostgreSQL在權限系統(tǒng)上也不是很完善。PostgreSQL只支持對于每一個用戶在一個數(shù)據(jù)庫上或一個數(shù)據(jù)表上的INSERT、SELECT和UPDATE/DELETE的授權,而MySQL允許你定義一整套的不同的數(shù)據(jù)級、表級和列級的權限。
  • PostgreSQL生成每頁的速度要比MySQL慢,PostgreSQL還欠缺一些比較高端的數(shù)據(jù)庫管理系統(tǒng)需要的特性,比如對大對象的有效支持,以及查詢緩沖等提高數(shù)據(jù)庫性能的機制等。

(3)PostgreSQL的使用場景

  • 數(shù)據(jù)完整性場景:當可靠性和數(shù)據(jù)完整性是絕對必要而無需理由時,PostgreSQL是更好的選擇。
  • 復雜的自定義過程場景:如果你需要你的數(shù)據(jù)庫執(zhí)行自定義過程,可擴展的PostgreSQL是更好的選擇。
  • 整合遷移場景:在將來,如果可能要把整個數(shù)據(jù)庫系統(tǒng)遷移到另一個適當?shù)慕鉀Q方案(例如Oracle)中,PostgreSQL對于這種切換將是最兼容和易于操作的。
  • 復雜的設計場景:相比其他的開源和免費的關系數(shù)據(jù)庫管理系統(tǒng)實現(xiàn)來說,對于復雜的數(shù)據(jù)庫設計,PostgreSQL提供了大部分的功能和可能性,同時并沒放棄其他有價值的地方。

4、我們項目中的數(shù)據(jù)庫使用情況

就我們目前工作中接觸到的服務器平臺而言,它需要處理大量的數(shù)據(jù)信息,需要較高的安全性,以及支持多用戶并發(fā)的需求,我們采用的是MySQL數(shù)據(jù)庫,而事實上也正好驗證了我們的預期結果。

我們項目中常用的存儲陣列,則屬于嵌入式設備,對于嵌入式設備,業(yè)內常采用的就是輕量級的數(shù)據(jù)庫,而且需要頻繁直接讀/寫磁盤文件,需要進行數(shù)據(jù)遷移,但不需要擴展等因素,所以我們的陣列設備使用了采用SQLite數(shù)據(jù)庫,這也正好符合上述的結論。

5、寫在最后

沒有最好的,只有適合的!選擇一個適合的數(shù)據(jù)庫會讓你的工作事半功倍,而一個不適合的數(shù)據(jù)庫會讓你煩擾不斷,問題頻發(fā)。

在選擇數(shù)據(jù)庫之前,必須先了解清楚設備的軟硬件環(huán)境,然后根據(jù)具體的業(yè)務需求和實用場景,針對不同數(shù)據(jù)庫的優(yōu)缺點,揚長避短,選擇最合適的數(shù)據(jù)庫。

責任編輯:未麗燕 來源: 今日頭條
相關推薦

2019-02-11 09:48:02

2011-07-05 10:16:16

Qt 數(shù)據(jù)庫 SQLite

2010-03-17 09:32:25

PostgreSQLMySQL

2025-04-02 08:30:00

IvorySQLOraclePostgreSQL

2024-02-21 23:45:48

2024-02-19 00:00:00

PostgreSQLMySQL應用程序

2010-05-26 10:15:11

MySQL數(shù)據(jù)庫

2015-12-22 10:52:36

UbuntuPostgreSQLphpPgAdmin

2020-11-25 17:50:27

數(shù)據(jù)庫物聯(lián)網(wǎng)SQL

2019-11-20 09:08:46

PostgreSQL數(shù)據(jù)庫

2011-07-20 12:34:49

SQLite數(shù)據(jù)庫約束

2019-08-15 07:00:54

SQLite數(shù)據(jù)庫內存數(shù)據(jù)庫

2017-07-12 09:20:42

SQLite數(shù)據(jù)庫移植

2021-01-10 15:29:53

開源數(shù)據(jù)庫數(shù)據(jù)庫

2024-04-25 16:33:41

2017-09-14 10:10:55

數(shù)據(jù)庫MySQL架構

2011-10-11 17:07:12

數(shù)據(jù)庫Internet文件數(shù)據(jù)庫

2024-05-07 14:18:18

數(shù)據(jù)庫SQLMySQL

2015-06-24 10:18:32

MySQLMySQL調優(yōu)

2018-01-15 16:57:18

MySQLOraclePostgreSQL
點贊
收藏

51CTO技術棧公眾號