MySQL流浪记(一)—— 初步认识数据库的内涵
認(rèn)識數(shù)據(jù)庫
??數(shù)據(jù)庫是“按照數(shù)據(jù)結(jié)構(gòu)來組織、存儲和管理數(shù)據(jù)的倉庫”。是一個(gè)長期存儲在計(jì)算機(jī)內(nèi)、有組織、可共享、統(tǒng)一管理的大量數(shù)據(jù)的集合。可以將數(shù)據(jù)庫視為一個(gè)電子化的文件柜,用戶可以對文件中的數(shù)據(jù)進(jìn)行新增、查詢、更新、刪除等操作。
??數(shù)據(jù)庫是一個(gè)按數(shù)據(jù)結(jié)構(gòu)來存儲和管理的計(jì)算機(jī)軟件,實(shí)際包含兩層意思:
??1.數(shù)據(jù)庫是一個(gè)整體,他是能夠合理保管數(shù)據(jù)的一個(gè)“倉庫”,用戶在這個(gè)“倉庫”中存放要管理的事務(wù)數(shù)據(jù),“數(shù)據(jù)”和“庫”兩個(gè)概念結(jié)合成為數(shù)據(jù)庫。
??2.數(shù)據(jù)庫是數(shù)據(jù)管理的新方法和技術(shù),他能更合適的組織數(shù)據(jù)、更方便的維護(hù)數(shù)據(jù)、更嚴(yán)密的控制數(shù)據(jù)和更有效的利用數(shù)據(jù)。
數(shù)據(jù)庫發(fā)展現(xiàn)狀
??在數(shù)據(jù)庫的發(fā)展歷史上,數(shù)據(jù)庫先后經(jīng)歷了層次數(shù)據(jù)庫、網(wǎng)狀數(shù)據(jù)庫和關(guān)系數(shù)據(jù)庫等各個(gè)階段的發(fā)展,數(shù)據(jù)庫技術(shù)在各個(gè)方面的快速發(fā)展。特別是關(guān)系型數(shù)據(jù)庫已經(jīng)成為了目前數(shù)據(jù)庫產(chǎn)品中最重要的一員,80年代以來,幾乎所有的數(shù)據(jù)庫廠商新出的數(shù)據(jù)庫產(chǎn)品都要支持關(guān)系型數(shù)據(jù)庫,即使一些非關(guān)系型數(shù)據(jù)庫產(chǎn)品頁幾乎都有支持關(guān)系型數(shù)據(jù)庫的接口。這主要是傳統(tǒng)的關(guān)系型數(shù)據(jù)庫可以比較好的解決管理和存儲關(guān)系型數(shù)據(jù)的問題。隨著云計(jì)算的發(fā)展和大數(shù)據(jù)時(shí)代的到來,關(guān)系型數(shù)據(jù)庫越來越無法滿足需要,這主要是由于越來越多的半關(guān)系型和非關(guān)系型數(shù)據(jù)需要用數(shù)據(jù)庫進(jìn)行存儲管理,以此同時(shí),分布式技術(shù)等新技術(shù)的出現(xiàn)也對數(shù)據(jù)庫的技術(shù)提出了新的要求,于是越來越多的非關(guān)系型數(shù)據(jù)庫就開始出現(xiàn),這類數(shù)據(jù)庫與傳統(tǒng)的關(guān)系型數(shù)據(jù)庫在設(shè)計(jì)和數(shù)據(jù)結(jié)構(gòu)有了很大的不同,他們更強(qiáng)調(diào)數(shù)據(jù)庫數(shù)據(jù)的高并發(fā)讀寫和存儲大數(shù)據(jù),這類數(shù)據(jù)庫一般稱為NoSQL(Not only SQL)數(shù)據(jù)庫。而傳統(tǒng)的關(guān)系型數(shù)據(jù)庫在一些傳統(tǒng)領(lǐng)域依然保持了強(qiáng)大的生命力。
數(shù)據(jù)庫的分類
關(guān)系型數(shù)據(jù)庫
??關(guān)系型數(shù)據(jù)庫存儲的格式可以直觀地反映實(shí)體間的關(guān)系。關(guān)系型數(shù)據(jù)庫和常見的表格比較相似,關(guān)系型數(shù)據(jù)庫中表與表之間是有很多復(fù)雜的關(guān)聯(lián)關(guān)系的。常見關(guān)系型數(shù)據(jù)庫有MySQL、Oracle、SQLite、SQLServer、等。在輕量或者小型的應(yīng)用中,使用不同的關(guān)系型數(shù)據(jù)庫對系統(tǒng)的性能影響不大,但是在構(gòu)建大型應(yīng)用時(shí),則需要根據(jù)應(yīng)用的業(yè)務(wù)需求和性能需求,選擇合適的關(guān)系型數(shù)據(jù)庫。
??數(shù)據(jù)的組織形式使用"表"作為結(jié)構(gòu),首先得有一個(gè)表頭,表頭中約定了有很多列,以及每一列的類型。插入的數(shù)據(jù)就是表中的一行,這一行里的每一列都需要和表頭的結(jié)構(gòu)一一對應(yīng),對于數(shù)據(jù)的“約束”(對于數(shù)據(jù)合法性的校驗(yàn))比較強(qiáng)。
非關(guān)系型數(shù)據(jù)庫(NoSQL)
??隨著近些年技術(shù)方向的不斷拓展,大量的非關(guān)系型數(shù)據(jù)庫如MongoDB、Redis、Memcahe出于簡化數(shù)據(jù)庫結(jié)構(gòu)、避免冗余、影響性能的表連接、摒棄復(fù)雜分布式的目的被設(shè)計(jì)。
??NoSQL數(shù)據(jù)庫適合追求速度和可擴(kuò)展性、業(yè)務(wù)多變的應(yīng)用場景。對于非結(jié)構(gòu)化數(shù)據(jù)的處理更合適,如文章、評論,這些數(shù)據(jù)如全文搜索、機(jī)器學(xué)習(xí)通常只用于模糊處理,并不需要結(jié)構(gòu)化數(shù)據(jù)一樣,進(jìn)行精確查詢,而且這類數(shù)據(jù)的數(shù)據(jù)的數(shù)據(jù)規(guī)模往往是海量的,數(shù)據(jù)規(guī)模的增長往往也是不可預(yù)期的,而NoSQL數(shù)據(jù)庫的擴(kuò)展能力幾乎是無限的,所以NoSQL數(shù)據(jù)庫可以很好的滿足這一類數(shù)據(jù)的存儲。
??數(shù)據(jù)的組織形式使用"鍵值對"作為結(jié)構(gòu),類似于Map。存儲的時(shí)候需要指定K-V值,每組數(shù)據(jù)的value中包含的字段沒有明確的要求,這樣相對來說對數(shù)據(jù)的約束更低。相比于關(guān)系型數(shù)據(jù)庫,犧牲了一部分的功能,但是換來了更高效率以及更強(qiáng)的水平擴(kuò)展能力,更適用于分布式系統(tǒng)中。
非關(guān)系型數(shù)據(jù)庫與關(guān)系型數(shù)據(jù)庫的區(qū)別
存儲方式
??傳統(tǒng)的關(guān)系型數(shù)據(jù)庫采用表格的存儲方式,數(shù)據(jù)以行和列的方式進(jìn)行存儲,要讀取和查詢都十分方便。而非關(guān)系型數(shù)據(jù)庫不適合這樣的表格存儲方式,通常以數(shù)據(jù)集的方式,大量的數(shù)據(jù)集中存儲在一起,類似于鍵值對、圖結(jié)構(gòu)或者文檔。
存儲結(jié)構(gòu)
??關(guān)系型數(shù)據(jù)庫按照結(jié)構(gòu)化的方法存儲數(shù)據(jù),每個(gè)數(shù)據(jù)表都必須對各個(gè)字段定義好,再根據(jù)表的結(jié)構(gòu)存入數(shù)據(jù),這樣做的好處就是由于數(shù)據(jù)的形式和內(nèi)容在存入數(shù)據(jù)庫之前就已經(jīng)定義好了,所以整個(gè)數(shù)據(jù)表的可靠性和穩(wěn)定性比較高,但帶來的問題就是一旦存入數(shù)據(jù)后,如果修改數(shù)據(jù)表的結(jié)構(gòu)就會十分困難。而NoSQL數(shù)據(jù)庫由于面對的是大量非結(jié)構(gòu)化的數(shù)據(jù)的存儲,它采用的動態(tài)結(jié)構(gòu),對于數(shù)據(jù)類型和結(jié)構(gòu)的改變非常的適應(yīng),可以根據(jù)數(shù)據(jù)存儲的需要靈活的改變數(shù)據(jù)庫的結(jié)構(gòu)。
存儲規(guī)范
??關(guān)系型數(shù)據(jù)庫為了避免重復(fù)、規(guī)范化數(shù)據(jù)以及充分利用好存儲空間,把數(shù)據(jù)按照最小關(guān)系表的形式進(jìn)行存儲,這樣的數(shù)據(jù)管理的就可以變得很清晰、一目了然,當(dāng)然這主要是一張數(shù)據(jù)表的情況。如果是多張表情況就不一樣了,由于數(shù)據(jù)涉及到多張數(shù)據(jù)表,數(shù)據(jù)表之間存在著復(fù)雜的關(guān)系,隨著數(shù)據(jù)表數(shù)量的增加,數(shù)據(jù)管理會越來越復(fù)雜。而NoSQL數(shù)據(jù)庫的數(shù)據(jù)存儲方式是用平面數(shù)據(jù)集的方式集中存放,雖然會存在數(shù)據(jù)被重復(fù)存儲,從而造成存儲空間被浪費(fèi)的問題,但是由于基本上單個(gè)數(shù)據(jù)庫采用獨(dú)立存放的形式,很少采用分割存放的方式,所以這樣數(shù)據(jù)往往能存成一個(gè)整體,這對于數(shù)據(jù)的讀寫提供了極大的方便。
擴(kuò)展方式
??當(dāng)前社會和科學(xué)飛速發(fā)展,要支持日益增長的數(shù)據(jù)庫存儲需求當(dāng)然要求數(shù)據(jù)庫有良好的擴(kuò)展性能,并且要求數(shù)據(jù)庫支持更多數(shù)據(jù)并發(fā)量,擴(kuò)展方式是NoSQL數(shù)據(jù)庫與關(guān)系型數(shù)據(jù)庫差別最大的地方,由于關(guān)系型數(shù)據(jù)庫將數(shù)據(jù)存儲在數(shù)據(jù)表中,數(shù)據(jù)操作的瓶頸出現(xiàn)在多張數(shù)據(jù)表的操作中,而且數(shù)據(jù)表越多這個(gè)問題越嚴(yán)重,如果要環(huán)節(jié)這個(gè)問題,只有提高處理能力,也就是選擇速度更快性能更高的計(jì)算機(jī),這樣的方法雖然可以一定的拓展空間,但這樣的拓展空間是非常有限的,也就是說關(guān)系型數(shù)據(jù)庫之具備縱向擴(kuò)展能力。而NoSQL數(shù)據(jù)庫由于使用的是數(shù)據(jù)集的存儲方式,他的存儲方式一定是分布式的,它可以采用橫向的方式來開展數(shù)據(jù)庫,也就是可以添加更多的數(shù)據(jù)庫服務(wù)器到資源地,然后有這些增加的服務(wù)器來負(fù)擔(dān)數(shù)據(jù)量增加的開銷。
查詢方式
??關(guān)系型數(shù)據(jù)庫采用結(jié)構(gòu)化的查詢語句(SQL)來對數(shù)據(jù)進(jìn)行查詢,SQL早已獲得了各個(gè)數(shù)據(jù)庫廠商的支持,成為數(shù)據(jù)庫行業(yè)的標(biāo)準(zhǔn),它能夠支持?jǐn)?shù)據(jù)課的CRUD(增加、查詢、更新、刪除)操作,具有非常強(qiáng)大的功能,SQL可以采用索引來加快查詢操作。NoSQL數(shù)據(jù)課使用的是非結(jié)構(gòu)化的查詢語言(UnQL),他以數(shù)據(jù)集位單位來管理和操作數(shù)據(jù),由于他沒有一個(gè)統(tǒng)一的標(biāo)準(zhǔn),所以每個(gè)數(shù)據(jù)課廠商提供的產(chǎn)品標(biāo)準(zhǔn)是不一樣的,NoSQL中的文檔ID與關(guān)系型表中的主鍵概念類似,NoSQL數(shù)據(jù)庫采用的數(shù)據(jù)訪問方式相對于SQL更簡單而精確。
規(guī)范化
??在數(shù)據(jù)庫的設(shè)計(jì)開發(fā)國中開發(fā)人員通常會面對同時(shí)需要對一個(gè)或者多個(gè)數(shù)據(jù)實(shí)體進(jìn)行操作,這樣在關(guān)系型數(shù)據(jù)庫中,一個(gè)數(shù)據(jù)實(shí)體一般首先要分割成多個(gè)部分,然后再對分割的部分進(jìn)行規(guī)范化,規(guī)范化以后再分別存入到多張關(guān)系型數(shù)據(jù)表中,這是一個(gè)復(fù)雜的過程。對于NoSQL數(shù)據(jù)庫來說是沒有這方面的問題,它不需要規(guī)范化數(shù)據(jù),它通常是再一個(gè)單獨(dú)的存儲單元中存入一個(gè)復(fù)雜的數(shù)據(jù)實(shí)體。
事務(wù)性
??關(guān)系型數(shù)據(jù)庫強(qiáng)調(diào)的是ACID規(guī)則(原子性、一致性、隔離性、持久性),可以滿足對事務(wù)性要求較高或者需要進(jìn)行復(fù)雜數(shù)據(jù)查詢的數(shù)據(jù)操作,而且可以充分滿足數(shù)據(jù)庫操作的高性能和操作穩(wěn)定性的要求。并且關(guān)系型數(shù)據(jù)庫十分強(qiáng)調(diào)數(shù)據(jù)的強(qiáng)一致性,對于事務(wù)的操作有很好的支持。關(guān)系型數(shù)據(jù)庫可以控制事務(wù)原子性細(xì)粒度,并且一旦操作有誤或者有需要,可以立馬回滾事務(wù)。而NoSQL數(shù)據(jù)庫強(qiáng)調(diào)BASE原則(基本可用、軟狀態(tài)、最終一致性),他減少了對數(shù)據(jù)的強(qiáng)一致性,從而獲得了基本一致性和柔和可靠性,并且利用以上的特性達(dá)到了高可靠性和高性能,最終達(dá)到了數(shù)據(jù)的最終一致性。NoSQL數(shù)據(jù)庫雖然對于事務(wù)操作也可以使用,但由于他是一種基于節(jié)點(diǎn)的分布式數(shù)據(jù)庫,對于事務(wù)的操作不能很好的支持,頁很難滿足其全部的需求,所以NoSQL數(shù)據(jù)庫的性能和優(yōu)點(diǎn)更多的體現(xiàn)在大數(shù)據(jù)的處理和數(shù)據(jù)庫的擴(kuò)展方面。
讀寫性能
??關(guān)系數(shù)據(jù)庫十分強(qiáng)調(diào)數(shù)據(jù)的強(qiáng)一致性,并且為此降低讀寫性能付出了巨大的代價(jià),雖然關(guān)系型數(shù)據(jù)庫存儲數(shù)據(jù)和處理數(shù)據(jù)的可靠性很不錯,但是一旦面對海量數(shù)據(jù)的處理的時(shí)候笑了就回變得很差,特別是遇到高并發(fā)的時(shí)候性能就會下降的非常厲害。而NoSQL數(shù)據(jù)庫相對關(guān)系數(shù)據(jù)庫優(yōu)勢最大的恰恰是對大數(shù)據(jù)方面,也就是對于大量的每天都產(chǎn)生非結(jié)構(gòu)化的數(shù)據(jù)能夠高性能的讀寫,這是因?yàn)镹oSQL數(shù)據(jù)庫是按照key-value類型進(jìn)行存儲的,以數(shù)據(jù)機(jī)的方式存儲的,因此無論是擴(kuò)展還是讀寫都非常的容易,并且NoSQL數(shù)據(jù)庫不需要關(guān)系型數(shù)據(jù)庫繁瑣的解析,所以NoSQL數(shù)據(jù)庫大數(shù)據(jù)管理、檢索、讀寫、分析意識可視化方面具有關(guān)系型數(shù)據(jù)庫不可比的優(yōu)勢。
授權(quán)方式
??關(guān)系型數(shù)據(jù)庫常見的有MySQL、Oracle、SQL Server、DB2,但是除了MySQL大多數(shù)的關(guān)系型數(shù)據(jù)庫如果要使用都需要支付一筆價(jià)格高昂的費(fèi)用,即使是免費(fèi)的MySQL性能也受到了諸多的限制。而對于NoSQL數(shù)據(jù)庫,比較主流的有redis、HBase、MongoDb,memcache等產(chǎn)品,通常采用的是開源方式,不需要像關(guān)系型數(shù)據(jù)庫那用,需要一筆高昂的花費(fèi)。
總結(jié)
以上是生活随笔為你收集整理的MySQL流浪记(一)—— 初步认识数据库的内涵的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android仿微信界面
- 下一篇: linux cmake编译源码,linu