1. 程式人生 > 資料庫 >Redis/Mysql/SQLite/MongoDB 資料庫對比

Redis/Mysql/SQLite/MongoDB 資料庫對比

一、Redis:

redis是一個key-value儲存系統。和Memcached類似,它支援儲存的value型別相對更多,包括string(字串)、list(連結串列)、set(集合)、zset(sorted set --有序集合)和hash(雜湊型別)。這些資料型別都支援push/pop(推進/彈出)、add/remove(新增/刪除)及取交集並集和差集及更豐富的操作,而且這些操作都是原子性的。在此基礎上,redis支援各種不同方式的排序。與memcached一樣,為了保證效率,資料都是快取在記憶體中。區別的是redis會週期性的把更新的資料寫入磁碟或者把修改操作寫入追加的記錄檔案,並且在此基礎上實現了master-slave(主從)同步。

Redis 是一個高效能的key-value資料庫。 redis的出現,很大程度補償了memcached這類key/value儲存的不足,在部 分場合可以對關係資料庫起到很好的補充作用。它提供了Python(面向物件的程式語言),Ruby(面向物件程式設計而創的指令碼語言),Erlang(面向併發的程式語言),PHP客戶端,使用很方便。

Redis支援主從同步。資料可以從主伺服器向任意數量的從伺服器上同步,從伺服器可以是關聯其他從伺服器的主伺服器。這使得Redis可執行單層樹複製。從盤可以有意無意的對資料進行寫操作。由於完全實現了釋出/訂閱機制,使得從資料庫在任何地方同步樹時,可訂閱一個頻道並接收主伺服器完整的訊息釋出記錄。同步對讀取操作的可擴充套件性和資料冗餘很有幫助。

gcc(程式語言編譯器)

 

二、MySQL

MySQL是一個開放原始碼的小型關聯式資料庫管理系統,開發者為瑞典MySQL AB公司。MySQL被廣泛地應用在Internet上的中小型網站中。由於其體積小、速度快、總體擁有成本低,尤其是開放原始碼這一特點,許多中小型網站為了降低網站總體擁有成本而選擇了MySQL作為網站資料庫。

與其他的大型資料庫例如Oracle、DB2、SQL Server等相比,MySQL自有它的不足之處,但是這絲毫也沒有減少它受歡迎的程度。對於一般的個人使用者和中小型企業來說,MySQL提供的功能已經綽綽有餘,而且由於MySQL是開放原始碼軟體,因此可以大大降低總體擁有成本。Linux作為作業系統,Apache和Nginx作為Web伺服器,MySQL作為資料庫,PHP/Perl/Python作為伺服器端指令碼直譯器。由於這四個軟體都是免費或開放原始碼軟體(FLOSS),因此使用這種方式不用花一分錢(除開人工成本)就可以建立起一個穩定、免費的網站系統,被業界稱為“LAMP”組合。

1.使用C和C++編寫,並使用了多種編譯器進行測試,保證原始碼的可移植性。

2.支援AIX、FreeBSD、HP-UX、Linux、Mac OS、NovellNetware、OpenBSD、OS/2 Wrap、Solaris、Windows等多種作業系統。

3.為多種程式語言提供了API(應用程式介面)。這些程式語言包括C、C++、Python、Java、Perl、PHP、Eiffel、Ruby和Tcl等。

4.支援多執行緒,充分利用CPU資源。

5.優化的SQL查詢演算法,有效地提高查詢速度。

6.既能夠作為一個單獨的應用程式應用在客戶端伺服器網路環境中,也能夠作為一個庫而嵌入到其他的軟體中。

7.提供多語言支援,常見的編碼如中文的GB 2312、BIG5,日文的Shift_JIS等都可以用作資料表名和資料列名。

8.提供TCP/IP、ODBC和JDBC等多種資料庫連線途徑。

9.提供用於管理、檢查、優化資料庫操作的管理工具。

10.支援大型的資料庫。可以處理擁有上千萬條記錄的大型資料庫。

11.支援多種儲存引擎。

12.Mysql是開源的,所以你不需要支付額外的費用。

13.MySQL使用標準的SQL資料語言形式。

14.Mysql對PHP有很好的支援,PHP是目前最流行的Web開發語言。

15.Mysql是可以定製的,採用了GPL協議,你可以修改原始碼來開發自己的Mysql系統。

 

MyISAMMysql5.5之前的預設資料庫引擎,最為常用。擁有較高的插入,查詢速度,但不支援事務

InnoDB事務型資料庫的首選引擎,支援ACID事務,支援行級鎖定, MySQL 5.5起成為預設資料庫引擎

BDB源自Berkeley DB,事務型資料庫的另一種選擇,支援COMMIT和ROLLBACK等其他事務特性

Memory所有資料置於記憶體的儲存引擎,擁有極高的插入,更新和查詢效率。但是會佔用和資料量成正比的記憶體空間。並且其內容會在Mysql重新啟動時丟失

Merge將一定數量的MyISAM表聯合而成一個整體,在超大規模資料儲存時很有用

Archive非常適合儲存大量的獨立的,作為歷史記錄的資料。因為它們不經常被讀取。Archive擁有高效的插入速度,但其對查詢的支援相對較差

Federated將不同的Mysql伺服器聯合起來,邏輯上組成一個完整的資料庫。非常適合分散式應用

Cluster/NDB高冗餘的儲存引擎,用多臺資料機器聯合提供服務以提高整體效能和安全性。適合資料量大,安全和效能要求高的應用

CSV: 邏輯上由逗號分割資料的儲存引擎。它會在資料庫子目錄裡為每個資料表建立一個.CSV檔案。這是一種普通文字檔案,每個資料行佔用一個文字行。CSV儲存引擎不支援索引。

BlackHole :黑洞引擎,寫入的任何資料都會消失,一般用於記錄binlog做複製的中繼

EXAMPLE儲存引擎是一個不做任何事情的存根引擎。它的目的是作為MySQL原始碼中的一個例子,用來演示如何開始編寫一個新儲存引擎。同樣,它的主要興趣是對開發者。EXAMPLE儲存引擎不支援編索引。

另外,Mysql的儲存引擎介面定義良好。有興趣的開發者可以通過閱讀文件編寫自己的儲存引擎。

 

單點(Single),適合小規模應用

複製(Replication),適合中小規模應用

叢集(Cluster),適合大規模應用

三、SQLite:

SQLite,是一款輕型的資料庫,是遵守ACID的關係型資料庫管理系統,它的設計目標是嵌入式的,而且目前已經在很多嵌入式產品中使用了它,它佔用資源非常的低,在嵌入式裝置中,可能只需要幾百K的記憶體就夠了。它能夠支援Windows/Linux/Unix等等主流的作業系統,同時能夠跟很多程式語言相結合,比如 Tcl、C#、PHP、Java等,還有ODBC介面,同樣比起Mysql、PostgreSQL這兩款開源世界著名的資料庫管理系統來講,它的處理速度比他們都快。

SQLite是遵守ACID的關係型資料庫管理系統,它包含在一個相對小的C庫中。它是D.RichardHipp建立的公有領域專案。

不像常見的客戶-伺服器範例,SQLite引擎不是個程式與之通訊的獨立程序,而是連線到程式中成為它的一個主要部分。所以主要的通訊協議是在程式語言內的直接API呼叫。這在消耗總量、延遲時間和整體簡單性上有積極的作用。整個資料庫(定義、表、索引和資料本身)都在宿主主機上儲存在一個單一的檔案中。它的簡單的設計是通過在開始一個事務的時候鎖定整個資料檔案而完成的。

功能:

SQLite雖然很小巧,但是支援的SQL語句不會遜色於其他開源資料庫,它支援的SQL包括:

ATTACH DATABASE

BEGIN TRANSACTION

comment

COMMIT TRANSACTION

COPY

CREATE INDEX

CREATE TABLE

CREATE TRIGGER

CREATE VIEW

DELETE

DETACH DATABASE

DROP INDEX

DROP TABLE

DROP TRIGGER

DROP VIEW

END TRANSACTION

EXPLAIN

expression

INSERT

ON CONFLICT clause

PRAGMA

REPLACE

ROLLBACK TRANSACTION

SELECT

UPDATE

同時它還支援事務處理功能等等。也有人說它象Microsoft的Access,有時候真的覺得有點象,但是事實上它們區別很大。比如SQLite 支援跨平臺,操作簡單,能夠使用很多語言直接建立資料庫,而不象Access一樣需要Office的支援。因為資料庫結構簡單,系統原始碼也不是很多,也適合想研究資料庫系統開發的專業人士。

 

特性:

1. ACID事務

2. 零配置 – 無需安裝和管理配置

3.儲存在單一磁碟檔案中的一個完整的資料庫

4.資料庫檔案可以在不同位元組順序的機器間自由的共享

5.支援資料庫大小至2TB

6. 足夠小, 大致13萬行C程式碼, 4.43M

7. 比一些流行的資料庫在大部分普通資料庫操作要快

8. 簡單, 輕鬆的API

9. 包含TCL繫結, 同時通過Wrapper支援其他語言的繫結

10. 良好註釋的原始碼, 並且有著90%以上的測試覆蓋率

11. 獨立: 沒有額外依賴

12. 原始碼完全的開源, 你可以用於任何用途, 包括出售它

13. 支援多種開發語言,C, PHP, Perl, Java, C#,Python, Ruby

四、MongoDB(分散式文件儲存資料庫):

MongoDB是一個基於分散式檔案儲存的資料庫。由C++語言編寫。旨在為WEB應用提供可擴充套件的高效能資料儲存解決方案。

MongoDB是一個介於關係資料庫和非關係資料庫之間的產品,是非關係資料庫當中功能最豐富,最像關係資料庫的。他支援的資料結構非常鬆散,是類似json的bson格式(JSON(JavaScript Object Notation) 是一種輕量級的資料交換格式,bson是一種類json的一種二進位制形式的儲存格式),因此可以儲存比較複雜的資料型別。Mongo最大的特點是他支援的查詢語言非常強大,其語法有點類似於面向物件的查詢語言,幾乎可以實現類似關係資料庫單表查詢的絕大部分功能,而且還支援對資料建立索引。

 

特點:

它的特點是高效能、易部署、易使用,儲存資料非常方便。主要功能特性有:

*面向集合儲存,易儲存物件型別的資料。

*模式自由。

*支援動態查詢。

*支援完全索引,包含內部物件。

*支援查詢。

*支援複製和故障恢復。

*使用高效的二進位制資料儲存,包括大型物件(如視訊等)。

*自動處理碎片,以支援雲端計算層次的擴充套件性。

*支援RUBY,PYTHON,JAVA,C++,PHP,C#等多種語言。

*檔案儲存格式為BSON(一種JSON的擴充套件)。

*可通過網路訪問。

 

使用原理:

所謂“面向集合”(Collection-Oriented),意思是資料被分組儲存在資料集中,被稱為一個集合(Collection)。每個集合在資料庫中都有一個唯一的標識名,並且可以包含無限數目的文件。集合的概念類似關係型資料庫(RDBMS)裡的表(table),不同的是它不需要定義任何模式(schema)。Nytro MegaRAID技術中的快閃記憶體快取記憶體演算法,能夠快速識別資料庫內大資料集中的熱資料,提供一致的效能改進。

模式自由(schema-free),意味著對於儲存在mongodb資料庫中的檔案,我們不需要知道它的任何結構定義。如果需要的話,你完全可以把不同結構的檔案儲存在同一個資料庫裡。

儲存在集合中的文件,被儲存為鍵-值對的形式。鍵用於唯一標識一個文件,為字串型別,而值則可以是各種複雜的檔案型別。我們稱這種儲存形式為BSON(Binary Serialized Document Format)。

 

MongoDB已經在多個站點部署,其主要場景如下:

1)網站實時資料處理。它非常適合實時的插入、更新與查詢,並具備網站實時資料儲存所需的複製及高度伸縮性。

2)快取。由於效能很高,它適合作為資訊基礎設施的快取層。在系統重啟之後,由它搭建的持久化快取層可以避免下層的資料來源過載。

3)高伸縮性的場景。非常適合由數十或數百臺伺服器組成的資料庫,它的路線圖中已經包含對MapReduce引擎的內建支援。

不適用的場景如下:

1)要求高度事務性的系統。

2)傳統的商業智慧應用。

3)複雜的跨文件(表)級聯查詢。

 

系統介紹:

分散式檔案系統(Distributed File System)是指檔案系統管理的物理儲存資源不一定直接連線在本地節點上,而是通過計算機網路與節點相連。分散式檔案系統的設計基於客戶機/伺服器模式。一個典型的網路可能包括多個供多使用者訪問的伺服器。另外,對等特性允許一些系統扮演客戶機和伺服器的雙重角色。

HBase是一個分散式的、面向列的開源資料庫,該技術來源於 Fay Chang 所撰寫的Google論文“Bigtable”:一個結構化資料的分散式儲存系統。

Yonghong Data Mart是基於自有技術研發的一款資料儲存、資料處理的軟體。Yonghong Data Mart的分散式檔案儲存系統 (ZDFS)是在Hadoop HDFS基礎上進行的改造和擴充套件,將伺服器叢集內所有節點上儲存的檔案統一管理和儲存。