數據模型與查詢語言

1、數據模型

主流的數據模型包括:關係模型、文檔模型、圖狀數據模型

一、關係模型

數據被組織成關係,在SQL中成爲表(table),其中每一個關係都是元組(turples)的無序集合(在SQL中成爲行)

二、文檔模型

也就是NoSQL,採用它有這樣幾個驅動因素,包括:
  • 適用於一對多的數據模型
  • 比關係數據庫更好的擴展性需求,包括支持超大數據集或超高寫入吞吐量
  • 廣泛偏心免費和開源軟件而不是商業數據庫產品
  • 關係模型不能很好地支持一些特定的查詢操做
  • 對關係模式一些限制性感到沮喪,渴望更具動態和表達力的數據模型
  • MySQL執行Alter Table時會把如今的整張表複製,於是當表很大時可能會須要幾分鐘甚至幾小時的停機時間,儘管如今有各類輔助工具能夠解決這個限制
文檔模型的劣勢:
  • 文檔模型不適用於表達多對多的關係
  • 適用須要同時訪問文檔大部份內容的場景。因爲數據庫一般會加載整個文檔,若是應用只是訪問其中的一小部分,則對於大型文檔數據來說就有些浪費。
  • 對文檔更新時,一般會重寫整個文檔,而只有修改量不改變源文檔大小時,原地覆蓋更新才更高效。所以,一般建議文檔應該儘可能小且避免寫入時增長文檔大小。
文檔數據庫有時被稱爲無模式,但這具備誤導性,由於讀數據的代碼一般採用某種結構於是存在某種隱形模式,而不是數據庫強制執行。更準確的術語應該是讀時模式(數據的結構是隱式的,只有在讀時才解釋),與寫時模式相對應。讀時模式相似編程語言中的動態(運行時)類型檢查,而寫時模式相似於靜態(編譯時)類型檢查。

三、圖狀數據模型

  • 很是適用於多對多關係的數據模型
  • 圖由兩種對象組成:頂點(也成爲節點或實體)和邊(也稱爲關係)。
  • 能夠建模爲圖的典型例子:社交網絡(頂點是人,邊指示哪些人彼此認識);Web圖(頂點是網頁,邊表示與其餘頁面的HTML連接)
  • 圖並不侷限於同構數據,圖更爲強大的用途在於,提供了單個數據存儲區中保存徹底不一樣類型對象的一致性方式。

2、數據查詢語言

一、查詢語言分類

  • 聲明式查詢語言
select * from animals where famiy='Sharks'
  • 命令式查詢語言
function getSharks(){
    var sharks = [];
    for(var i=0; i<animals.length; i++){
        if(animals[i].family === "Sharks"){
              sharks.push(animals[i]); 
         }
     }
     return sharks;
}
 
聲明式查詢語言比命令式API更加簡潔和容易使用。更重要的是,它對外隱藏了數據庫引擎的不少實現細節,這樣數據庫系統可以在不改變查詢語句的狀況下提升性能。

二、MapReduce查詢

 
db.observations.mapReduce(
    function map(){
       var year = this.observationTimestamp.getFullYear();
        var month = this.observationTimesstamp.getMonth()+1;
        emit(year + "-" +month, this.numAnimals);
 
    },
    function reduce(key, values){
          return Arrays.sum(values);
    },
    {
          query:{family : "Sharks"},
          out: "monthlySharkReport"
    }
);
 

三、Cypher查詢語言

最先爲Neo4j圖形數據庫而建立(它以電影「黑客帝國」中的一個角色命名,與密碼學中的密碼無關)
 
  •  建模需求
  • 採用圖數據庫建模及查詢的方式
 
 
 
 
  • 採用關係數據庫建模及查詢的方式
 
 
 
若是相同的查詢能夠用一種查詢語言寫4行代碼完成,而另外一種查詢語言則須要29行代碼,這足以說明不一樣的數據模型適用於不一樣的場景。所以,選擇適合應用程序的數據模型很是重要
相關文章
相關標籤/搜索