微軟推出支持Microsoft Azure平臺的NoSQL文檔數據庫

jopen 10年前發布 | 9K 次閱讀 NOSQL

  英文原文:Microsoft Introduces NoSQL Document Database for Microsoft Azure

  由于微軟的 SQL Server 已經成為它們的旗艦產品,因此人們總是傾向于將微軟與關系型數據等同起來,不過這種情況即將因為一個新的 NoSQL 產品的到來而發生改變了。微軟在上周宣布推出 DocumentDB 的預覽版,這是一個依托于云端的托管文檔型數據庫,它對 JavaScript 有很好的支持,并且包括自動建立索引與事務等方面的特性。

  DocumentDB 是一個無結構的、基于 SSD 的數據庫,它能夠對 JSON 文檔進行存取操作,并且通過一套 REST API 進行訪問。根據微軟的官方說辭,這個僅針對 Microsoft Azure 平臺的服務將滿足用戶對非關系型數據庫方面的需求,同時又保留了關系型數據庫中一些有用的概念。

我們經常從用戶那里傾聽他們的需求,他們希望能有一個數據庫可以跟上他們高速發展的應用的步伐,因此這個數據庫必須高速、靈活并且可伸縮性強。隨著 越來越多的 NoSQL 數據庫出現,它們也成為許多開發者首選的開發工具。但是運行與管理這些 NoSQL 數據庫的成本高昂,尤其是在大規模使用的情況下。同時,我們也聽到用戶另一方面的需求,他們希望能利用關系型數據庫系統的天然優勢,例如復雜的查詢功能與 事務處理,這些特性對他們依然非常重要。大多數數據庫為開發者提供的選擇都顯得有些極端,要么是強一致性,要么是最終一致性;要么使用查詢功能十分有限的 無結構形式,要么使用具有豐富查詢功能但高度格式化的形式;在事務及擴展性等方面同樣要面對兩難的選擇。事實上,在許多真實世界的場景中,我們需要在這些 極端方案中尋找一種折衷以達到目的。

</blockquote>

  那么 DocumentDB 與傳統的關系型數據庫在哪些方面具有相似之處呢?首先可以使用一種輕量級的 SQL 語法對文檔進行查詢,并且支持原生的 JavaScript 類型,例如對象和數組。其次,大多數流行的 NoSQL 數據庫只支持數據存儲的最終一致性,而 DocumentDB 則提供了四種不同的一致性模型可供選擇

DocumentDB 為讀寫與查詢提供了四種不同的一致性級別:強制一致、有限過期(Bounded Staleness)一致、會話一致以及最終一致。這四種完整定義的一致性級別使你能夠在一致性、可用性及延遲等方面進行合理的權衡。有限過期能夠保證完 整的寫入順序,這種一致性適用于處理時間以及按順序操作的應用程序。而會話一致性能夠讀取屬于你自己的寫入保證,它適用于以用戶為中心的應用。

</blockquote>

  同樣,在文檔索引與事務方面的特性也能夠找到關系型數據庫常見的能力,其中索引方面具有如下特性:

當你往集合中加入文檔時,DocumentDB 會自動為這些文檔建立索引,以便你進行查詢。能夠在不設定結構,并且不提供第二級索引的情況下實現文檔的自動索引,這是 DocumentDB 的一項關鍵特性。而實現這一特性的關鍵是由樂觀寫入、無鎖并且使用日志結構的索引維護技術決定的。

</blockquote>

  對于 DocumentDB 的索引維護存在多種選項,雖然在默認的情況下會進行自動索引,但你也可以選擇關閉這一行為,或者對其進行微調,例如可以指定將處于某個路徑下或符合某個模 式的特定文檔從索引中去除,或是加入到索引中。還可以設定以同步或者是異步方式對索引進行更新。

  DocumentDB 服務為配合服務端業務邏輯也提供了多種選擇,它支持用戶定義函數、存儲過程和觸發器。

由于 DocumentDB 的數據庫引擎對 JavaScript 和 JSON 進行了深入支持,因此它能夠以一種非常直觀的編程模型,通過存儲過程及觸發器的方式直接執行基于 JavaScript 的應用程序邏輯。這使得以下兩點成為可能:(a)能夠以一種高效的方式實現在數據庫引擎中直接進行并發控制、恢復、以及對 JSON 對象的自動索引。(b)能夠以 JavaScript 編程語言自然地表控制流、參數變量、賦值,異常處理等基本功能,并且直接與數據庫事務進行交互。

在某個牽涉到同一集合中多個文檔的 ACID 事務操作中,DocumentDB 能夠以快照隔離級別將基于 JavaScript 的存儲過程與觸發器進行封裝。在執行過程中,如果某個 JavaScript 拋出異常,則整個事務將被撤消。

請注意,在 DocumentDB 處理多個文檔時,它并不要求任何特殊形式的 JSON 規范以實現文檔之間的關系建立,DocumentDB 的 SQL 查詢語言提供了一套非常強大的結構化關系查詢操作,能夠在無需特殊標注的情況下對文檔進行查詢及轉換,并且也不需要使用特別的屬性以建立文檔之間的關系。

</blockquote>

  那么這個數據庫的性能如何呢?GigaOm 表示,DocumentDB 使用了 SQL Server 2014中名為 Hekaton 的內存引擎,微軟的副總裁 Scott Guthrie 也透露了這項技術已經在微軟內部被大量使用的事實。

過去一年中,我們已經在微軟內部的一些常用服務中使用了 DocumentDB,現在運行中的每個 DocumentDB 數據庫都具有幾百 TB 容量的數據,每天都要復雜百萬級的復雜查詢,并且依然保持性能良好,在延誤方面至多只有幾個毫秒而已。

</blockquote>

  那么這一產品對 Microsoft Azure 平臺上其它的 NoSQL 工具會產生什么影響呢?微軟目前依然提供了一套基于鍵-值對的 NoSQL 產品,名為 Azure Table Storage,而且他們不久前才發布了一個基于 Redis 的緩存服務。而 MongoDB 最近剛剛在 Microsoft Azure 平臺上創建了一個托管服務,它的走向還有待觀察。不過,有一個基于 Windows 的 NoSQL 產品發言人對于 DocumentDB 提出了尖銳的批評,即 RavenDB 的創建人 Oren Eini。他在一篇博客中表示 DocumentDB 并未給他留下什么深刻的印象,并且將他的吐槽一一列舉如下:

  • 缺乏排序選項,也沒有良好的分頁功能
  • 容易遭受 SQL 注入攻擊,并且沒有其它的替代方案可以避免
  • 難以部署,也難以配合現有的代碼進行使用
  • 在開發與測試兩方面的感覺都很糟糕
  • 糟糕的客戶端 API
  • 大量的表掃描
  • 在查詢與優化方面的選擇太少
  • 在客戶端只能發起單表事務操作
  • 完全不支持跨集合的事務操作
  • 只支持極小的文檔尺寸
  • </ul>

      雖然 DocumentDB 只剛剛發布了一個“預覽”版本,但微軟還是為它發布了 .NET、Node.js、JavaScript 和 Python 等方面的 SDK。該產品的價格是基于“能力單元”進行計算的,每個單元級別支持每秒 2000 次讀取、每秒 500 次插入、替換或刪除操作、以及 10GB 的存儲空間。在預覽階段,每個能力單元的價格為每天 0.73 美元,比起預計的正式商用版價格大約便宜了 50%。DocumentDB 現在 Microsoft Azure 的美國西部、歐洲北部以及歐洲西部地區可以使用。

    來自: InfoQ
                        <span id="shareA4" class="fl">                            
                            </span>
     本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
     轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
     本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!