前言:在現今互聯網企業坐擁着爆炸式數據的信息時代,當掌握大量數據之後,如何分析使用它顯得更加重要。當大量的數據集聚在一起後,有的人就在裏面看到了機遇、看到了創新、看到了、、、那麼,你又看到了什麼?由此個人覺得 瞭解 存儲數據的數據庫、數據管理系統DBMS,其實還是需要的。(儘管或許當我意識到的時候已晚了些,但是求學無期限)
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1.1 數據庫介紹
1.1.1什麼是數據庫
數據庫就是一個以某種有組織的方式存儲的數據集合。
簡單的說,數據庫(database)就是一個存放數據的倉庫,這個倉庫是按照一定的數據結構(數據結構是指數據的組織形式或數據之間的聯繫)來組織、存儲的,我們可以通過數據提供的多種方法來管理數據庫裏的數據。
當人們收集了大量的數據後,應該把它們保存起來進入近一步的處理,進一步的抽取有用的信息。當年人們把數據存放在文件櫃中,可現在隨着社會的發展,數據量急劇增長,現在人們就藉助計算機和數據庫技術科學的保存大量的數據,以便能更好的利用這些數據資源。
1.2數據庫的種類
數據庫通常分爲層次式數據庫、網絡式數據庫和關係式數據庫三種。而不同的數據庫是按不同的數據結構來聯繫和組織的。而在當今的互聯網中,最常見的數據庫模型主要是兩種,即關係型數據庫和非關係型數據庫。
1.2.1關係型數據庫介紹
(1)、關係型數據庫的由來
雖然網狀數據庫和層次數據庫已經很好的解決了數據的集中和共享問題,但是在數據庫獨立性和抽象級別上扔有很大欠缺。用戶在對這兩種數據庫進行存取時,仍然需要明確數據的存儲結構,指出存取路徑。而關係型數據庫就可以較好的解決這些問題。
(2)、關係型數據庫介紹
關係型數據庫模型是把複雜的數據結構歸結爲簡單的二元關係(即二維表格形式)。在關係型數據庫中,對數據的操作幾乎全部建立在一個或多個關係表格上,通過對這些關聯的表格分類、合併、連接或選取等運算來實現數據庫的管理。
關係型數據庫誕生40多年了,從理論產生發展到現實產品,例如:Oracle和MySQL,Oracle在數據庫領域上升到霸主地位,形成每年高達數百億美元的龐大產業市場。
1.2數據庫的種類
數據庫通常分爲層次式數據庫、網絡式數據庫和關係式數據庫三種。而不同的數據庫是按不同的數據結構來聯繫和組織的。而在當今的互聯網中,最常見的數據庫模型主要是兩種,即關係型數據庫和非關係型數據庫。
1.2.1關係型數據庫介紹
(1)、關係型數據庫的由來
雖然網狀數據庫和層次數據庫已經很好的解決了數據的集中和共享問題,但是在數據庫獨立性和抽象級別上扔有很大欠缺。用戶在對這兩種數據庫進行存取時,仍然需要明確數據的存儲結構,指出存取路徑。而關係型數據庫就可以較好的解決這些問題。
(2)、關係型數據庫介紹
關係型數據庫模型是把複雜的數據結構歸結爲簡單的二元關係(即二維表格形式)。在關係型數據庫中,對數據的操作幾乎全部建立在一個或多個關係表格上,通過對這些關聯的表格分類、合併、連接或選取等運算來實現數據庫的管理。
關係型數據庫誕生40多年了,從理論產生發展到現實產品,例如:Oracle和MySQL,Oracle在數據庫領域上升到霸主地位,形成每年高達數百億美元的龐大產業市場。
(3)、關係型數據庫表格之間的關係舉例
學生表 |
||
學號 |
姓名 |
年齡 |
S001 |
張三 |
24 |
S002 |
李四 |
25 |
S003 |
王二麻子 |
26 |
課程表 |
||
課程號 |
課程名 |
學分 |
C001 |
Linux |
25 |
C002 |
Python |
25 |
C003 |
MySQL |
25 |
選課表 |
||
學號 |
課程號 |
成績 |
S001 |
C001 |
90 |
S002 |
C001 |
97 |
S003 |
C001 |
94 |
1.2.2非關係型數據庫介紹
1.2.2.1 非關係型數據庫誕生背景
NoSQL,泛指非關係型的數據庫。隨着互聯網web2.0網站的興起,傳統的關係數據庫在應付web2.0網站,特別是超大規模和高併發的SNS類型的web2.0純動態網站已經顯得力不從心,暴露了很多難以克服的問題,而非關係型的數據庫則由於其本身的特點得到了非常迅速的發展。NoSql數據庫在特定的場景下可以發揮出難以想象的高效率和高性能,它是作爲對傳統關係型數據庫的一個有效的補充。
NoSQL(NoSQL = Not Only SQL ),意即“不僅僅是SQL”,是一項全新的數據庫革命性運動,早期就有人提出,發展至2009年趨勢越發高漲。NoSQL的擁護者們提倡運用非關係型的數據存儲,相對於鋪天蓋地的關係型數據庫運用,這一概念無疑是一種全新的思維的注入。
1.2.2.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
1.3 常用關係型數據庫產品介紹
1.3.1 Oracle數據庫
ORACLE數據庫系統是美國ORACLE公司(甲骨文)提供的以分佈式數據庫爲核心的一組軟件產品,是目前最流行的客戶/服務器(CLIENT/SERVER)或B/S體系結構的數據庫之一。比如SilverStream就是基於數據庫的一種中間件。ORACLE數據庫是目前世界上使用最爲廣泛的數據庫管理系統,作爲一個通用的數據庫系統,它具有完整的數據管理功能;作爲一個關係數據庫,它是一個完備關係的產品;作爲分佈式數據庫它實現了分佈式處理功能。但它的所有知識,只要在一種機型上學習了ORACLE知識,便能在各種類型的機器上使用它。
Oracle數據庫最新版本爲Oracle Database 12c。Oracle數據庫12c 引入了一個新的多承租方架構,使用該架構可輕鬆部署和管理數據庫雲。此外,一些創新特性可最大限度地提高資源使用率和靈活性,如Oracle Multitenant可快速整合多個數據庫,而Automatic Data Optimization和Heat Map能以更高的密度壓縮數據和對數據分層。這些獨一無二的技術進步再加上在可用性、安全性和大數據支持方面的主要增強,使得Oracle數據庫12c 成爲私有云和公有云部署的理想平臺。
1.3.2 MySQL數據庫
MySQL(發音爲"my ess cue el",不是"my sequel")是一種開放源代碼的關係型數據庫管理系統(RDBMS),MySQL數據庫系統使用最常用的數據庫管理語言--結構化查詢語言(SQL)進行數據庫管理。
由於MySQL是開放源代碼的,因此任何人都可以在General Public License的許可下下載並根據個性化的需要對其進行修改。MySQL因爲其速度、可靠性和適應性而備受關注。大多數人都認爲在不需要事務化處理的情況下,MySQL是管理內容最好的選擇。
MySQL這個名字,起源不是很明確。一個比較有影響的說法是,基本指南和大量的庫和工具帶有前綴“my”已經有10年以上,而且不管怎樣,MySQL AB創始人之一的Monty Widenius的女兒也叫My。這兩個到底是哪一個給出了MySQL這個名字至今依然是個迷,包括開發者在內也不知道。
1.3.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的名字。
1.3.4 SqlServer數據庫
SQL Server是由Microsoft開發和推廣的關係數據庫管理系統(DBMS),它最初是由Microsoft、Sybase和Ashton-Tate三家公司共同開發的,並於1988年推出了第一個OS/2版本。Microsoft SQL Server近年來不斷更新版本,1996年,Microsoft 推出了SQL Server 6.5版本;1998年,SQL Server 7.0版本和用戶見面;SQL Server 2000是Microsoft公司於2000年推出,目前最新版本是2012年3月份推出的SQL SERVER 2012。
1.3.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操作系統函數。
1.3.6 其他不常用數據庫
DB2,PostgreSQL,Informix,Syase等。
1.4 常用非關係型數據庫產品介紹
1.4.1 Memcached(key-value)
memcached是一套分佈式的快取系統,當初是Danga Interactive爲了LiveJournal所發展的,但被許多軟件(如MediaWiki)所使用。這是一套開放源代碼軟件,以BSD license授權協議發佈。[1]
memcached缺乏認證以及安全管制,這代表應該將memcached服務器放置在防火牆後。[1]
memcached的API使用32位元的循環冗餘校驗(CRC-32)計算鍵值後,將資料分散在不同的機器上。當表格滿了以後,接下來新增的資料會以LRU機制替換掉。由於memcached通常只是當作快取系統使用,所以使用memcached的應用程式在寫回較慢的系統時(像是後端的數據庫)需要額外的程式碼更新memcached內的資料[1]
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年,作者爲Anatoly Vorobey和Brad Fitzpatrick。用於提升LiveJournal . com訪問速度的。LJ每秒動態頁面訪問量幾千次,用戶700萬。Memcached將數據庫負載大幅度降低,更好的分配資源,更快速訪問。
1.4.2 Redis(key-value)
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存儲的不足,在部 分場合可以對關係數據庫起到很好的補充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客戶端,使用很方便。[1]
Redis支持主從同步。數據可以從主服務器向任意數量的從服務器上同步,從服務器可以是關聯其他從服務器的主服務器。這使得Redis可執行單層樹複製。從盤可以有意無意的對數據進行寫操作。由於完全實現了發佈/訂閱機制,使得從數據庫在任何地方同步樹時,可訂閱一個頻道並接收主服務器完整的消息發佈記錄。同步對讀取操作的可擴展性和數據冗餘很有幫助。
1.4.3 MongoDB(Document-oriented)
MongoDB是一個基於分佈式文件存儲的數據庫。由C++語言編寫。旨在爲WEB應用提供可擴展的高性能數據存儲解決方案。
MongoDB 是一個介於關係數據庫和非關係數據庫之間的產品,是非關係數據庫當中功能最豐富,最像關係數據庫的。他支持的數據結構非常鬆散,是類似json的bson格式,因此可以存儲比較複雜的數據類型。Mongo最大的特點是他支持的查詢語言非常強大,其語法有點類似於面向對象的查詢語言,幾乎可以實現類似關係數據庫單表查詢的絕大部分功能,而且還支持對數據建立索引。
1.4.4 Cassandra(Column-oriented)
Cassandra是一個混合型的非關係的數據庫,類似於Google的BigTable。其主要功能比Dynamo (分佈式的Key-Value存儲系統)更豐富,但支持度卻不如文檔存儲MongoDB(介於關係數據庫和非關係數據庫之間的開源產品,是非關係數據庫當中功能最豐富,最像關係數據庫的。支持的數據結構非常鬆散,是類似json的bjson格式,因此可以存儲比較複雜的數據類型)。Cassandra最初由Facebook開發,後轉變成了開源項目。它是一個網絡社交雲計算方面理想的數據庫。以Amazon專有的完全分佈式的Dynamo爲基礎,結合了Google BigTable基於列族(Column Family)的數據模型。P2P去中心化的存儲。很多方面都可以稱之爲Dynamo 2.0。[
1.4.5 其他不常用非關係型數據庫
HBase、MemacheDB、BerkeleyDB、Tokyo Cabinet