數據庫簡介

1.1      數據庫介紹

1.1.1什麼是數據庫

簡單的說,數據庫(database)就是一個存放數據的倉庫,這個倉庫是按照必定的數據結構(數據結構是指數據的組織形式或數據之間的聯繫)來組織、存儲的,咱們能夠經過數據提供的多種方法來管理數據庫裏的數據。web

當人們收集了大量的數據後,應該把它們保存起來進入近一步的處理,進一步的抽取有用的信息。當年人們把數據存放在文件櫃中,可如今隨着社會的發展,數據量急劇增加,如今人們就藉助計算機和數據庫技術科學的保存大量的數據,以便能更好的利用這些數據資源。redis

1.2數據庫的種類

    數據庫一般分爲層次式數據庫、網絡式數據庫和關係式數據庫三種。而不一樣的數據庫是按不一樣的數據結構來聯繫和組織的。而在當今的互聯網中,最多見的數據庫模型主要是兩種,即關係型數據庫和非關係型數據庫。數據庫

1.2.1關係型數據庫介紹

1)、關係型數據庫的由來編程

    雖然網狀數據庫和層次數據庫已經很好的解決了數據的集中和共享問題,可是在數據庫獨立性和抽象級別上扔有很大欠缺。用戶在對這兩種數據庫進行存取時,仍然須要明確數據的存儲結構,指出存取路徑。而關係型數據庫就能夠較好的解決這些問題。json

2)、關係型數據庫介紹後端

  關係型數據庫模型是把複雜的數據結構歸結爲簡單的二元關係(即二維表格形式)。在關係型數據庫中,對數據的操做幾乎所有創建在一個或多個關係表格上,經過對這些關聯的表格分類、合併、鏈接或選取等運算來實現數據庫的管理。瀏覽器

  關係型數據庫誕生40多年了,從理論產生髮展到現實產品,例如:OracleMySQLOracle在數據庫領域上升到霸主地位,造成每一年高達數百億美圓的龐大產業市場。緩存

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系統來講的優點在於簡單、易部署、高併發。

典型產品:MemcachedRedisMemcacheDB

2)、列存儲(Column-oriented)數據庫

列存儲數據庫將數據存儲在列族中,一個列族存儲常常被一塊兒查詢的相關數據,好比人類,咱們常常會查詢某我的的姓名和年齡,而不是薪資。這種狀況下姓名和年齡會被放到一個列族中,薪資會被放到另外一個列族中。

這種數據庫一般用來應對分佈式存儲海量數據。

典型產品:CassandraHBase

3)、面向文檔(Document-Oriented)數據庫

文檔型數據庫的靈感是來自於Lotus Notes辦公軟件,並且它同第一種鍵值數據庫相似。該類型的數據模型是版本化的文檔,半結構化的文檔以特定的格式存儲,好比JSON。文檔型數據庫能夠看做是鍵值數據庫的升級版,容許之間嵌套鍵值。並且文檔型數據庫比鍵值數據庫的查詢效率更高。

面向文檔數據庫會將數據以文檔形式存儲。每一個文檔都是自包含的數據單元,是一系列數據項的集合。每一個數據項都有一個名詞與對應值,值既能夠是簡單的數據類型,如字符串、數字和日期等;也能夠是複雜的類型,若有序列表和關聯對象。數據存儲的最小單位是文檔,同一個表中存儲的文檔屬性能夠是不一樣的,數據可使用XMLJSONJSONB等多種形式存儲。

典型產品:MongoDBCouchDB

4)、圖形數據庫

圖形數據庫容許咱們將數據以圖的方式存儲。實體會被做爲頂點,而實體之間的關係則會被做爲邊。好比咱們有三個實體,Steve JobsAppleNext,則會有兩個「Founded by」的邊將AppleNext鏈接到Steve Jobs

典型產品:Neo4JInforGrid

1.3 經常使用關係型數據庫產品介紹

1.3.1 Oracle數據庫

ORACLE數據庫系統是美國ORACLE公司(甲骨文)提供的以分佈式數據庫爲核心的一組軟件產品,是目前最流行的客戶/服務器(CLIENT/SERVER)B/S體系結構的數據庫之一。好比SilverStream就是基於數據庫的一種中間件。ORACLE數據庫是目前世界上使用最爲普遍的數據庫管理系統,做爲一個通用的數據庫系統,它具備完整的數據管理功能;做爲一個關係數據庫,它是一個完備關係的產品;做爲分佈式數據庫它實現了分佈式處理功能。但它的全部知識,只要在一種機型上學習了ORACLE知識,便能在各類類型的機器上使用它。

Oracle數據庫最新版本爲Oracle Database 12cOracle數據庫12引入了一個新的多承租方架構,使用該架構可輕鬆部署和管理數據庫雲。此外,一些創新特性可最大限度地提升資源使用率和靈活性,如Oracle Multitenant可快速整合多個數據庫,而Automatic Data OptimizationHeat Map能以更高的密度壓縮數據和對數據分層。這些獨一無二的技術進步再加上在可用性、安全性和大數據支持方面的主要加強,使得Oracle數據庫12成爲私有云和公有云部署的理想平臺。

 

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)來代替MySQLInnoDBMariaDBMySQL的創始人Michael Widenius(英語:Michael Widenius)主導開發,他早前曾以10億美圓的價格,將本身建立的公司MySQL AB賣給了SUN,此後,隨着SUN被甲骨文收購,MySQL的全部權也落入Oracle的手中。MariaDB名稱來自Michael Widenius的女兒Maria的名字。

1.3.4 SqlServer數據庫

SQL Server是由Microsoft開發和推廣的關係數據庫管理系統DBMS),它最初是由MicrosoftSybaseAshton-Tate三家公司共同開發的,並於1988年推出了第一個OS/2版本。Microsoft SQL Server近年來不斷更新版本,1996年,Microsoft 推出了SQL Server 6.5版本;1998年,SQL Server 7.0版本和用戶見面;SQL Server 2000Microsoft公司於2000年推出,目前最新版本20123月份推出的SQL SERVER 2012

1.3.5 Access數據庫

Microsoft Office Access是微軟把數據庫引擎的圖形用戶界面軟件開發工具結合在一塊兒的一個數據庫管理系統。它是微軟OFFICE的一個成員, 在包括專業版和更高版本的office版本里面被單獨出售。2012124,最新的微軟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 其餘不經常使用數據庫

    DB2PostgreSQLInformixSyase等。

1.4 經常使用非關係型數據庫產品介紹

1.4.1 Memcachedkey-value

memcached是一套分佈式的快取系統,當初是Danga Interactive爲了LiveJournal所發展的,但被許多軟件(如MediaWiki)所使用。這是一套開放源代碼軟件,以BSD license受權協議發佈。[1] 

memcached缺少認證以及安全管制,這表明應該將memcached服務器放置在防火牆後。[1] 

memcachedAPI使用32位元的循環冗餘校驗CRC-32)計算鍵值後,將資料分散在不一樣的機器上。當表格滿了之後,接下來新增的資料會以LRU機制替換掉。因爲memcached一般只是看成快取系統使用,因此使用memcached的應用程式在寫回較慢的系統時(像是後端的數據庫)須要額外的程式碼更新memcached內的資料[1] 

memcached 是以LiveJournal 旗下Danga Interactive 公司的Brad Fitzpatric 爲首開發的一款軟件。已成爲mixihatenaFacebookVoxLiveJournal等衆多服務中提升Web應用擴展性的重要因素。許多Web應用都將數據保存到RDBMS中,應用服務器從中讀取數據並在瀏覽器中顯示。但隨着數據量的增大、訪問的集中,就會出現RDBMS的負擔加劇、數據庫響應惡化、網站顯示延遲等重大影響。

這時就該memcached大顯身手了。memcached是高性能的分佈式內存緩存服務器。通常的使用目的是,經過緩存數據庫查詢結果,減小數據庫訪問次數,以提升動態Web應用的速度、提升可擴展性。

Memcached 的守護進程(daemon )是用C寫的,可是客戶端能夠用任何語言來編寫,並經過memcached協議與守護進程通訊。可是它並不提供冗餘(例如,複製其hashmap條目);當某個服務器S中止運行或崩潰了,全部存放在S上的鍵/值對都將丟失。

MemcachedDanga Interactive開發,其最新版本發佈於2010年,做者爲Anatoly VorobeyBrad Fitzpatrick。用於提高LiveJournal . com訪問速度的。LJ每秒動態頁面訪問量幾千次,用戶700萬。Memcached數據庫負載大幅度下降,更好的分配資源,更快速訪問。

 

1.4.2 Rediskey-value

redis是一個key-value存儲系統。和Memcached相似,它支持存儲的value類型相對更多,包括string(字符串)list(鏈表)set(集合)zset(sorted set --有序集合)hash(哈希類型)。這些數據類型都支持push/popadd/remove及取交集並集和差集及更豐富的操做,並且這些操做都是原子性的。在此基礎上,redis支持各類不一樣方式的排序。與memcached同樣,爲了保證效率,數據都是緩存在內存中。區別的是redis會週期性的把更新的數據寫入磁盤或者把修改操做寫入追加的記錄文件,而且在此基礎上實現了master-slave(主從)同步。

Redis 是一個高性能的key-value數據庫。 redis的出現,很大程度補償了memcached這類key/value存儲的不足,在部 分場合能夠對關係數據庫起到很好的補充做用。它提供了JavaC/C++C#PHPJavaScriptPerlObject-CPythonRubyErlang等客戶端,使用很方便。[1] 

Redis支持主從同步。數據能夠從主服務器向任意數量的從服務器上同步,從服務器能夠是關聯其餘從服務器的主服務器。這使得Redis可執行單層樹複製。從盤能夠有意無心的對數據進行寫操做。因爲徹底實現了發佈/訂閱機制,使得從數據庫在任何地方同步樹時,可訂閱一個頻道並接收主服務器完整的消息發佈記錄。同步對讀取操做的可擴展性和數據冗餘頗有幫助。

 

1.4.3 MongoDBDocument-oriented

MongoDB是一個基於分佈式文件存儲的數據庫。由C++語言編寫。旨在爲WEB應用提供可擴展的高性能數據存儲解決方案。

MongoDB 是一個介於關係數據庫和非關係數據庫之間的產品,是非關係數據庫當中功能最豐富,最像關係數據庫的。他支持的數據結構很是鬆散,是相似jsonbson格式,所以能夠存儲比較複雜的數據類型。Mongo最大的特色是他支持的查詢語言很是強大,其語法有點相似於面向對象的查詢語言,幾乎能夠實現相似關係數據庫單表查詢的絕大部分功能,並且還支持對數據創建索引

 

1.4.4 CassandraColumn-oriented

Cassandra是一個混合型的非關係的數據庫,相似於GoogleBigTable。其主要功能比Dynamo (分佈式的Key-Value存儲系統)更豐富,但支持度卻不如文檔存儲MongoDB(介於關係數據庫和非關係數據庫之間的開源產品,是非關係數據庫當中功能最豐富,最像關係數據庫的。支持的數據結構很是鬆散,是相似jsonbjson格式,所以能夠存儲比較複雜的數據類型)。Cassandra最初由Facebook開發,後轉變成了開源項目。它是一個網絡社交雲計算方面理想的數據庫。以Amazon專有的徹底分佈式的Dynamo爲基礎,結合了Google BigTable基於列族(Column Family)的數據模型。P2P去中心化的存儲。不少方面均可以稱之爲Dynamo 2.0[

1.4.5 其餘不經常使用非關係型數據庫

    HBaseMemacheDBBerkeleyDBTokyo Cabinet

1.5 數據庫相關知識

1.5.1數據庫軟件企業應用排名參考

相關文章
相關標籤/搜索