NoSQL資料模型詳解(二)の文檔模型,nosql
背景“文檔”是文檔資料庫中的主要概念。此類資料庫可存放並擷取文檔、其格式可以是XML、JSON、BSON等。這些文檔具備子屬性、呈現樹狀資料結構,可以包含映射表、集合和純量值。資料庫中的文檔彼此相似,但不必完全相同。文檔資料庫所存放的文檔,就相當於鍵值資料庫所存放的“值”。文檔資料庫可以視為其值可查的鍵值資料庫。流行的文檔資料庫有:MongoDB、CouchDB、Terrastore、OrientDB、RavenDB。
一致性為了在Mongodb資料庫中確保“一致性”,可以配置“複本集”也可以規定寫入操作必須等待縮寫資料複製到全部或給定數量的從節點之後,才可以返回。每次寫入資料時,可以指定寫入操作返回之前,必須將所寫資料傳播到多少個伺服器節點上。事務從傳統的關係型資料庫角度講,“事務”一詞意味著我們先用insert、Update、delete等命令做操不同的表,然後用commit提交修改或以rollback命令復原。NoSQL資料庫通常沒有這些機制:其寫入操作要麼成功,要麼失敗。“單文檔層級”的“事務”叫做“原子事務”。此類資料庫的“事務”一般無法執行多個操作。預設情況,所有寫入操作都將順利執行。使用WriteConcern參數可以對此微調。可用性“CAP定理”斷言:“一致性”(consistency)、“可用性”(availability)和“分區耐受性”(Partition Tolerance)三者只可有其二。文檔資料庫試圖用主從式資料複製技術來增強“可用性”。多個節點都保有同一份資料,即便主節點故障,用戶端也依然能擷取資料。應用程式代碼一般不需檢測主節點是否可用。mongodb通過“複本集”實現“複製”,以提供較高的“可用性”。查詢功能各種文檔資料庫提供了不同的查詢功能。CouchDB可通過視圖查詢:可用“物化視圖”或“動態視圖”(相當於關係型資料庫中的視圖,不在乎是否物化)實現複雜的文檔查詢。如果查詢請求比較多,就不要再每次處理查詢請求時進行可擴充性這裡“擴充”一詞指的是不講資料庫遷移到更大電腦的前提下,向其中新增節點或修改其內容。此處不談如何讓應用程式處理更多負載,我們關心的是資料庫本身有哪些功能可提升負載處理能力。增加更多的““讀取從節點”將全部讀取操作都導引到從節點上,這樣就可以擴充資料庫應對頻繁讀取的能力了。適用案例事件記錄(在企業級解決方案中,許多不同的應用程式都需要記錄事件。如果事件捕獲的資料類型一直在變,那麼就更應該用文檔資料庫了)、內容管理系統及部落格平台(可以用來系統管理使用者評論、使用者註冊、使用者配置和面向Web文檔。)網站分析與即時分析(頁面瀏覽量、獨立訪問客數)、電子商務應用程式。不適用場合包含多項操作的複雜事務(文檔資料庫不適合執行跨文檔的原子操作,而然像RavenDB等文檔資料庫其實也支援此類操作)、查詢持續變化的彙總結構。