1. 程式人生 > >mysql資料庫入門(1)--各種資料庫介紹

mysql資料庫入門(1)--各種資料庫介紹

各種資料庫介紹

資料庫介紹

1. 什麼是資料庫

    簡單說存放資料的倉庫,這個倉庫按照一定的資料結構<資料結構是指資料的組織形
式或資料之間的聯絡>來組織、儲存的,我們可以通過資料庫提供的多種方法來管理資料庫裡
的資料
    我們簡單形象的理解,比如我們人類這個大社會,我們的身份證,戶口簿等等都和數
據庫有關

2. 產生髮展

    資料庫產生於 60 多年前,隨著資訊科技和市場的發展,特別是二十世紀九十年代以
後,資料管理不再僅僅是儲存和管理資料,而轉變成使用者所需要的各種資料管理的方式。資料
庫有很多種型別,從最簡單的儲存有各種資料的表格到能夠進行海量資料儲存的大型資料庫系
統都在各個方面得到了廣泛的應用

資料庫的分類

    資料庫通常分為層次式資料庫、網路式資料庫和關係式資料庫三種。而不同的資料庫是按不
同的資料結構來聯絡和組織的。
而在當今的網際網路中,最常見的資料庫模型主要是兩種,即關係型資料庫和非關係型資料庫。

1. 關係型資料庫介紹

(1)關係型資料庫的由來
    雖然網狀資料庫和層次資料庫已經很好的解決了資料的集中和共享問題,但是在資料庫獨立性和抽象級別上扔有很大欠缺。使用者在對這兩種資料庫進行存取時,仍然需要明確資料的儲存結構,指出存取路徑。而關係型資料庫就可以較好的解決這些問題。

(2)關係型資料庫介紹
    關係型資料庫模型是把複雜的資料結構歸結為簡單的二元關係(即二維表格形式)。在關係型資料庫中,對資料的操作幾乎全部建立在一個或多個關係表格上,通過對這些關聯的表格分類、合併、連線或選取等運算來實現資料庫的管理。
    關係型資料庫誕生 40 多年了,從理論產生髮展到現實產品,例如: Oracle 和 MySQL,Oracle在資料庫領域上升到霸主地位,形成每年高達數百億美元的龐大產業市場。

(3)關係型資料庫表格之間的關係舉例
學生資訊,圖書資訊

2. 非關係型資料庫介紹

(1)非關係型資料庫誕生背景
    NoSQL,泛指非關係型的資料庫。隨著網際網路 web2.0 網站的興起,傳統的關係資料庫在應付 web2.0 網站,特別是超大規模和高併發的 SNS 型別的 web2.0 純動態網站已經顯得力不從心,暴露了很多難以克服的問題,而非關係型的資料庫則由於其本身的特點得到了非常迅速的發展。 NoSQL資料庫在特定的場景下可以發揮出難以想象的高效率和高效能,它是作為對傳統關係型資料庫的一個有效的補充。
    NoSQL(NoSQL = Not Only SQL ),意即“不僅僅是 SQL”,是一項全新的資料庫革命性
運動,早期就有人提出,發展至 2009 年趨勢越發高漲。 NoSQL 的擁護者們提倡運用非關係型
的資料儲存,相對於鋪天蓋地的關係型資料庫運用,這一概念無疑是一種全新的思維的注入。

(2)非關係型資料庫種類
1)鍵值儲存資料庫( key-value)
    鍵值資料庫就類似傳統語言中使用的雜湊表。可以通過key來新增、查詢或者刪除資料庫,因為使用 key 主鍵訪問,所以會獲得很高的效能及擴充套件性。
    鍵值資料庫主要使用一個雜湊表,這個表中有一個特定的鍵和一個指標指向特定的資料。Key/value 模型對於 IT 系統來說的優勢在於簡單、易部署、高併發。典型產品: Memcached、 Redis、 MemcacheDB
2)列儲存( Column-oriented)資料庫
    列儲存資料庫將資料儲存在列族中,一個列族儲存經常被一起查詢的相關資料,比如人類,我們經常會查詢某個人的姓名和年齡,而不是薪資。這種情況下姓名和年齡會被放到一個列族中,薪資會被放到另一個列族中。這種資料庫通常用來應對分散式儲存海量資料。
典型產品: Cassandra、 HBase
3)面向文件( Document-Oriented)資料庫
    文件型資料庫的靈感是來自於 Lotus Notes辦公軟體,而且它同第一種鍵值資料庫類似。該型別的資料模型是版本化的文件,半結構化的文件以特定的格式儲存,比如 JSON。文件型資料庫可以看作是鍵值資料庫的升級版,允許之間巢狀鍵值。而且文件型資料庫比鍵值資料庫的查詢效率更高。
    面向文件資料庫會將資料以文件形式儲存。每個文件都是自包含的資料單元,是一系列資料項的集合。每個資料項都有一個名詞與對應值,值既可以是簡單的資料型別,如字串、數字和日期等;也可以是複雜的型別,如有序列表和關聯物件。資料儲存的最小單位是文件,同一個表中儲存的文件屬性可以是不同的, 資料可以使用 XML、 JSON 或 JSONB 等多種形式儲存。
典型產品: MongoDB、 CouchDB
4)圖形資料庫
    圖形資料庫允許我們將資料以圖的方式儲存。實體會被作為頂點,而實體之間的關係則會被作為邊。比如我們有三個實體, Steve Jobs、 Apple 和 Next,則會有兩個“Founded by”的邊將 Apple 和 Next 連線到 Steve Jobs。典型產品: Neo4J、 InforGrid

3. 常用關係型資料庫產品介紹

(1)Oracle 資料庫
    ORACLE 資料庫系統是美國 ORACLE公司(甲骨文)提供的以分散式資料庫為核心的一組軟體產品,是目前最流行的客戶/伺服器(CLIENT/SERVER)或 B/S 體系結構的資料庫之一。比如SilverStream 就是基於資料庫的一種中介軟體。 ORACLE 資料庫是目前世界上使用最為廣泛的資料庫管理系統,作為一個通用的資料庫系統,它具有完整的資料管理功能;作為一個關係資料庫,它是一個完備關係的產品;作為分散式資料庫它實現了分散式處理功能。但它的所有知識,只要在一種機型上學習了 ORACLE 知識,便能在各種型別的機器上使用它。Oracle 資料庫最新版本為 Oracle Database 12c。 Oracle 資料庫 12c 引入了一個新的多承租方架構,使用該架構可輕鬆部署和管理資料庫雲。此外,一些創新特性可最大限度地提高資源使用率和靈活性,如 Oracle Multitenant 可快速整合多個數據庫,而 AutomaticData Optimization 和 Heat Map能以更高的密度壓縮資料和對資料分層。這些獨一無二的技術進步再加上在可用性、安全性和大資料支援方面的主要增強,使得 Oracle 資料庫 12c 成為私有云和公有云部署的理想平臺。但是去IOE計劃後大部分網際網路公司轉向使用mysql。

(2) MySQL 資料庫
    MySQL(發音為”my ess cue el”,不是”mysequel”)是一種開放原始碼的關係型資料庫管理系統( RDBMS), MySQL 資料庫系統使用最常用的資料庫管理語言–結構化查詢語言( SQL)進行資料庫管理。由於 MySQL 是開放原始碼的,因此任何人都可以在 General Public License的許可下下載並根據個性化的需要對其進行修改。MySQL因為其速度、可靠性和適應性而備受關注。大多數人都認為在不需要事務化處理的情況下, MySQL 是管理內容最好的選擇。
    MySQL這個名字,起源不是很明確。一個比較有影響的說法是,基本指南和大量的庫和工具帶有字首“my”已經有 10 年以上,而且不管怎樣, MySQL AB 創始人之一的 Monty Widenius的女兒也叫 My。這兩個到底是哪一個給出了 MySQL這個名字至今依然是個迷,包括開發者在內也不知道。

(3)MariaDB 資料庫
    MariaDB 資料庫管理系統是 MySQL的一個分支,主要由開源社群在維護,採用 GPL 授權許可。開發這個分支的原因之一是:甲骨文公司收購了 MySQL 後,有將 MySQL閉源的潛在風險,因此社群採用分支的方式來避開這個風險。 MariaDB 的目的是完全相容MySQL,包括 API 和命令列,使之能輕鬆成為 MySQL 的代替品。在儲存引擎方面,使用 XtraDB(英語: XtraDB)來代替 MySQL 的 InnoDB。 MariaDB 由 MySQL 的創始人 Michael Widenius(英語:Michael Widenius)主導開發,他早前曾以 10 億美元的價格,將自己建立的公司 MySQL AB賣給了 SUN, 此後,隨著 SUN 被甲骨文收購, MySQL 的所有權也落入 Oracle 的手中。MariaDB 名稱來自 Michael Widenius 的女兒 Maria 的名字

(4)SQL Server 資料庫
    SQL Server 是由 Microsoft 開發和推廣的關係資料庫管理系統( DBMS),它最初是由Microsoft、 Sybase 和 Ashton-Tate 三家公司共同開發的,並於 1988 年推出了第一個 OS/2版本。 Microsoft SQL Server 近年來不斷更新版本, 1996 年, Microsoft 推出了 SQLServer 6.5 版本; 1998 年, SQL Server 7.0 版本和使用者見面; SQL Server 2000 是Microsoft 公司於 2000 年推出,目前最新版本是 2014 年 4 月份推出的 SQL SERVER 2014,可能在今明年之類推出 2016 正式版。

(5)Access 資料庫Microsoft Office Access     是微軟把資料庫引擎的圖形使用者介面和軟體開發工具結合在一起的一個數據庫管理系統。它是微軟 OFFICE 的一個成員, 在包括專業版和更高版本的office 版本里面被單獨出售。 2012 年 12 月 4 日,最新的微軟 Office Access 2013 在微軟Office 2013 裡釋出,微軟 Office Access 2010 是前一個版本。MS ACCESS 以它自己的格式將資料儲存在基於 Access Jet 的資料庫引擎裡。它還可以直接匯入或者連結資料(這些資料儲存在其他應用程式和資料庫)。軟體開發人員和資料架構師可以使用 Microsoft Access 開發應用軟體,“高階使用者”可以使用它來構建軟體應用程式。和其他辦公應用程式一樣, ACCESS 支援 Visual Basic 巨集語言,它是一個面向物件的程式語言,可以引用各種物件,包括 DAO(資料訪問物件),ActiveX 資料物件,以及許多其他的 ActiveX 元件。可視物件用於顯示錶和報表,他們的方法和屬性是在 VBA程式設計環境下, VBA 程式碼模組可以宣告和呼叫 Windows 作業系統函式。

(6) PostgreSQL 資料庫
    PostgreSQL是一個自由的物件-關係資料庫伺服器(資料庫管理系統),它在靈活的 BSD-風格許可證下發行。它提供了相對其他開放原始碼資料庫系統(比如 MySQL 和Firebird),和專有系統(比如 Oracle、 Sybase、 IBM 的 DB2 和 Microsoft SQL Server)之外的另一種選擇。事實上, PostgreSQL 的特性覆蓋了 SQL-2/SQL-92 和 SQL-3/SQL-99,首先,它包括了可以說是目前世界上最豐富的資料型別的支援,其中有些資料型別可以說連商業資料庫都不具備PostgreSQL 擁有一支非常活躍的開發隊伍,而且在許多黑客的努力下, PostgreSQL 的質量日益提高

(7)其他一些不常有的資料庫DB2, Informix, Syase 等

4. 常用 非 關係 型 資料 庫產 品介 紹

(1) Memcached( key-value)
    memcached 是以 LiveJournal 旗下 Danga Interactive 公司的 Brad Fitzpatric 為首開發的一款軟體。已成為 mixi、 hatena、 Facebook、 Vox、 LiveJournal 等眾多服務中提高 Web 應用擴充套件性的重要因素。許多 Web 應用都將資料儲存到 RDBMS 中,應用伺服器從中讀取資料並在瀏覽器中顯示。但隨著資料量的增大、訪問的集中,就會出現 RDBMS 的負擔加重、資料庫響應惡化、網站顯示延遲等重大影響。
這時就該 memcached 大顯身手了。 memcached 是高效能的分散式記憶體快取伺服器。一般的使用目的是,通過快取資料庫查詢結果,減少資料庫訪次數,以提高動態 Web 應用的速度、提高可擴充套件性。Memcached 的守護程序( daemon )是用 C 寫的,但是客戶端可以用任何語言來編寫,並通過 memcached 協議與守護程序通訊。但是它並不提供冗餘(例如,複製其 hashmap 條目);當某個伺服器 S 停止執行或崩潰了,所有存放在 S 上的鍵/值對都將丟失。Memcached 由 Danga Interactive 開發,其最新版本釋出於 2010 年,作者為 AnatolyVorobey 和 Brad Fitzpatrick。用於提升 LiveJournal . com 訪問速度的。 LJ 每秒動態頁面訪問量幾千次,使用者 700 萬。 Memcached 將資料庫負載大幅度降低,更好的分配資源,更快速訪問。

(2)Redis( key-value)
    redis 是一個 key-value 儲存系統。和 Memcached 類似,它支援儲存的 value 型別相對更多,包括 string(字串)、 list(連結串列)、 set(集合)、 zset(sorted set –有序集合)和hash(雜湊型別)。這些資料型別都支援 push/pop、 add/remo及取交集並集和差集及更豐富的操作,而且這些操作都是原子性的。在此基礎上, redis 支援各種不同方式的排序。與memcached 一樣,為了保證效率,資料都是快取在記憶體中。區別的是 redis 會週期性的把更新的資料寫入磁碟或者把修改操作寫入追加的記錄檔案,並且在此基礎上實了 masterslave(主從)同步。Redis 是一個高效能的 key-value 資料庫。 redis 的出現,很大程度補償了 memcached這類 key/value 儲存的不足,在部 分場合可以對關係資料庫起到很好的補充作用。它提供了Java, C/C++, C#, PHP, JavaScript, Perl, Object-C, Python, Ruby, Erlang 等客戶端,使用很方便。 [1]Redis 支援主從同步。資料可以從主伺服器向任意數量的從伺服器上同步,從伺服器可以是關聯其他從伺服器的主伺服器。這使得 Redis 可執行單層樹複製。從盤可以有意無意的對資料進行寫操作。由於完全實現了釋出/訂閱機制,使得從資料庫在任何地方同步樹時,可訂閱一個頻道並接收主伺服器完整的訊息釋出記錄。同步對讀取操作的可擴充套件性和資料冗餘很有幫助。

(3) MongoDB( Document-oriented)
    MongoDB 是一個基於分散式檔案儲存的資料庫。由 C++語言編寫。旨在為 WEB 應用提供可擴充套件的高效能資料儲存解決方案。MongoDB是一個介於關係資料庫和非關係資料庫之間的產品,是非關係資料庫當中功能最豐富,最像關係資料庫的。他支援的資料結構非常鬆散,是類似json 的 bson 格式,因此可以儲存比較複雜的資料型別。Mongo最大的特點是他支援的查詢語言非常強大,其語法有點類似於面向物件的查詢語言,幾乎可以實現類似關係資料庫單表查詢的絕大部分功能,而且還支援對資料建立索引。

(4)Cassandra( Column-oriented)
    Cassandra 是一個混合型的非關係的資料庫,類似於 Google 的 BigTable。其主要功能比 Dynamo (分散式的 Key-Value儲存系統)更豐富,但支援度卻不如文件儲存MongoDB(介於關係資料庫和非關係資料庫之間的開源產品,是非關係資料庫當中功能最豐富,最像關係資料庫的。支援的資料結構非常鬆散,類似 json 的 bjson 格式,因此可以儲存比較複雜的資料型別)。 Cassandra 最初由 Facebook開發,後轉變成了開源專案。它是一個網路社交雲端計算方面理想的資料庫。以 Amazon 專有的完全分散式的 Dynamo 為基礎,結合了 GoogleBigTable 基於列族( Column Family)的資料模型。 P2P 去中心化的儲存。很多方面都可以稱之為 Dynamo 2.0。
    Cassandra後來被開發kvm的團隊使用C++語言重寫(最初是java寫的),更名為scylladb,速度提高了接近20倍,scylladb為開源的分散式資料庫,可以跨叢集,相容Cassandra,是世界上目前最快的列式資料庫。
(5)他不常用非關係型資料庫
    MemacheDB、 BerkeleyDB、 Tokyo Cabinet
注:下一篇講解mysql原始碼編譯安裝。