Nosql筆記(一)——關係型數據庫回顧

Nosql筆記(一)——關係型數據庫回顧

 

         在平常的商業應用中,我們所使用的大多都是關係型數據庫,諸如SQL  Server MY SQL Oracle等。

關於關係型數據庫中的關鍵技術:

  • 存儲引擎

         根據存儲類型可以把關係型數據庫分爲行式數據庫、列式數據庫、內存數據庫。

         行式數據庫就如現在比較常用的Oracle數據庫、MySQL數據庫等。他們的存儲按行存儲的,顧被稱爲行式數據庫,亦被稱爲對象-關係型數據庫。列式數據庫是在最近發展比較迅速的一類數據庫,譬如MongoDBCassandra。它們在以列來存儲數據,其索引和數據存放在一起,可以壓縮數據,能直接讀取到某一列的數據,便於做分佈式存儲。如果我們把數據放到內存中直接操作的數據庫叫做內存數據庫。

  •  索引設計

    所謂索引,就是一種結構,它存在的目的就是爲了提升數據庫的查詢速度,現在市場上比較流行的數據庫中的索引都是使用的B+數索引(如下圖),或者是它的變種來實現。如果要查詢某一行記錄,在沒有索引的情況下,則需要對全變進行掃描,當數據量較大的時候,則需要耗費很大的內存資源,而且還需要很長的時間,嚴重影響執行效率,在建立索引後,則可以通過關鍵字(索引)實現快速的定位和查詢,大大的提升了效率。

 

  • SQL優化器

     SQL優化器是數據庫廠商的核心競爭力。它的出現就是爲了提升SQL的執行效率。例如我在做級聯查詢時,內聯查詢時,我們可以寫出很多種SQL,但是你不能保證每次寫的SQL都是最高效率的,這時,SQL優化器會優化你的SQL,然後在執行。

  • 事務管理與併發控制

    對於關係型數據庫,爲了保證數據的一致性,我們需要對其進行事務控制。舉個簡單的例子,張三在對李四進行轉賬操作,金額爲100元,在數據庫中,首先我們會從張三的賬戶上扣掉100元,然後再往李四的賬戶上加上100元,這兩步操作必須保證一致,即要麼都成功,要麼都失敗——這就是事務控制。

那麼什麼是併發控制呢?如果兩個人同時操作一個數據,這時就涉及到併發的問題,到底是誰先操作呢?在大部分數據庫中都就有“加鎖”的功能,譬如Oracle中的“表級鎖”、“行級鎖”,即在對數據進行修改時將整個表加鎖或者是整行加鎖,等修改完後再釋放鎖,以實現對數據的併發控制,避免髒讀和誤操作。

  • 容災與恢復技術

    例如,通過數據的備份進行數據校驗、恢復數據等。(不是很瞭解,歡迎補充)

 

那麼關係型數據庫有哪些弱點呢?

  • 很難進行分佈式部署,I/O瓶頸顯著。依賴於強大的服務器,需要花更大代價纔可以突

破性能極限。

         假設現有一個很大的數據庫,A表的部分數據存儲在一臺服務器上,B表的部分數據存儲在另一臺服務器上,現在要對兩張表做內聯查詢,其效率可想而知……

  • 難以處理非結構化數據。

譬如說,我想做一個做在線調查的網站,不同的調查表有不同的結構,所以在預先設計時無法確認列,這樣不便於做索引,當調查表多了,則其效率會明顯降低。

         以上還有很多漏掉的地方,譬如ACDI等其他原理性的東西,歡迎補充。下期內容:NoSQL簡介。

 

發佈了47 篇原創文章 · 獲贊 124 · 訪問量 20萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章