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