甲骨文發佈 JSON Database,對標MongoDB

甲骨文於8月13日宣佈推出了自主JSON數據庫(Autonomous JSON Database,AJD)。這是一款全新的雲服務,專爲尋求簡單易用、經濟高效的JSON數據庫和NoSQL API的開發人員而打造。AJD在MongoDB的核心功能的基礎上,還提供了更高的性能、簡單的彈性、全面的ACID支持以及完整的SQL功能。

JSON是潮流:從最初的JavaScript對象的序列化格式,到現在Web應用中信息傳遞的格式,JSON儼然已成爲許多新興應用(包括數據庫層)的主要數據模型。

JSON

{ 
  "name":"San Jose",
  "population":1021795,
  "county":"Santa Clara"
}
 
{
  "name":"Atlanta",
  "population":506811,
  "county":["Fulton","DeKalb"]
}

開發人員對JSON的 熱愛 是因爲其對 動態模式 的支持,從而更容易進行 模式變更 。開發人員在進行應用變更時,可以使用JSON文檔獲得靈活的數據庫層,而不必將數據規範化到固定的關係型模式中的表和列。

甲骨文很早便發現了JSON的好處和需求:2014年,甲骨文數據庫交付了第一個 SQL/JSON 的企業級實現——這是由甲骨文發起的一個開放標準,在此之後又被許多其他的商業和開源數據庫產品採用。

雖然在數據分析或複雜的報告上,SQL做的不錯,但許多開發人員更喜歡與簡便靈活的JSON數據交互。因此,甲骨文爲主流編程語言(包括Java,JavaScript與Python)添加了 本地開源文檔存儲API ,稱之爲SODA(Simple Oracle Document Access,簡單的甲骨文文檔訪問)。結束甲骨文使用JSON和SODA開發應用,就像是用NoSQL數據庫MongoDB一樣容易。

甲骨文一直在提供JSON數據庫提供創新,而隨着AJD的出現,JSON爲應用開發人員帶來了所有的自主優勢。

有趣的是,甲骨文的JSON雲服務並不是從零開始的。AJD是站在甲骨文自主數據庫的肩膀上開發的。自主數據庫服務可以在短短數分鐘內配置新的數據庫,可以不停機擴展或縮減應用程序,在線修補數據庫,通過時間點恢復進行自動備份,提供災難恢復功能,並且具有高級安全功能。自主數據庫的目標是 零管理 ,這樣開發人員就可以減少在建立和管理數據庫上花費的時間,將更多的時間投入在其他應用程序上。

提供自主雲服務

自主JSON數據庫以原生樹狀二進制的格式存儲JSON文檔。這種 原生JSON格式 經過高度優化,可以實現快速讀取(避免線性掃描)和部分更新(減少重做/回滾日誌大小)。其最終是一個文檔數據庫,可提供低延遲CRUD操作以及包括多文檔在內的 完整ACID一致性 ;用於應用開發的原生文檔API以及針對應用的完整SQL支持;原生JSON存儲以及可擴展的、並行的、在內存中的查詢優化。

自主JSON數據庫提供豐富的應用功能,這些在不成熟的NoSQL數據庫中尚不具備:

  • 內置 機器學習 算法、 空間 查詢
  • 先進的安全功能 ,諸如精細的訪問控制
  • 成熟的 服務器端程序語言
  • 完整的 低代碼開發 環境
  • ACID事務無時間或事務大小限制
  • 簡單快捷的跨集合join和/或aggregations
  • 對JSON文檔進行全文智能搜索索引

等等一系列優勢。

低成本

AJD的成本出乎意料的低。AJD讓應用開發人員能在甲骨文上搭建新的JSON應用,而甲骨文則讓開發人員能夠以極具競爭力的價格使用自主數據庫的所有功能。在相同配置(M60的專用集羣與8 OCPU)下,AJD的成本比其競爭者MongoDB雲數據庫要低30%,兩者分別爲$2.74/小時和$3.95/小時。實際上,AJD可能要比MongoDB雲數據庫花銷更低,因爲AJD是彈性的,不依賴於固定的硬件,這意味着你可以爲AJD選擇任何數量的CPU。AJD的成本包括了備份和簡單BI工具連接,這兩項在MongoDB雲數據庫中都屬於額外成本。

可擴展

AJD的新功能不會帶來性能上的損失,相反,與同樣價格配置下的MongoDB雲數據庫相比,AJD可以在不同的工作負載類型和集合大小下,持續提供兩倍的吞吐量。MongoDB雲數據庫的結果是由MongoDB運行,根據行業標準YCSB發佈於此

8 OCPU自主JSON數據庫對比M60上MongoDB雲服務

工業標準雅虎雲服務標準(YCSB)

MongoDB數據來源:https://www.mongodb.com/atlas-vs-amazon-documentdb/performance,於2020/8/12獲取

自主JSON數據庫和甲骨文雲免費套餐的簡短說明

AJD是甲骨文自主數據庫家族的一部分。AJD擁有其他自主數據庫服務的所有核心功能,包括生命週期管理、安全性、可用性、可伸縮性,以及彈性。

如果你想要通過甲骨文免費套餐嘗試下自主JSON數據庫,那麼建議你從自主事務處理(Autonomous Transaction Processing)開始。當你準備擴展系統或投入生產時,你可以直接將免費套餐中的自主事務處理直接轉移到付費版本的自主JSON數據庫。

如果你擔心免費版的自主事務處理中某些功能是否會影響到你遷移到自主JSON數據庫的話,答案是否定的。免費版中的數據大小的限制是20G,而AJD同樣支持20G的非JSON數據。

自主JSON和MongoDB雲數據庫的對比

AJD不僅在價格和速度上優於MongoDB,在其他方面也具有優勢:

自主JSON數據庫(AJD) MongoDB雲數據庫
最大文件大小 32 MB 16 MB
文件最大嵌套深度 1024 層 100 層
每個集合的索引 無限制 64
複合索引字段 無限制 32
全文檔索引 JSON搜索索引 ×
服務器端功能 函數、過程、觸發器 不推薦*
多文檔事務 ACID 僅通過指定API調用請求才有ACID
事務時長 無限制 默認60秒
事務大小 無限制 最大1000個文檔*
聚合數據大小 無限制 100 MB RAM + 指定allowDiskUse參數
無服務器自動縮放 ×
通過SQL訪問JSON文檔 ×
綜合安全性(例如:虛擬專用數據庫,數據編輯,自定義數據庫角色) ×
最低價格 $2.74/小時 $3.95/小時

*MongoDB文檔建議:鏈接1鏈接2

AJD的新手教程

登錄到甲骨文雲後,在左側菜單欄選擇“Autonomous JSON Database”:

然後在下面這個頁面,點擊藍色按鈕創建數據庫:

爲數據庫命名(包括顯示名稱),確認選中了“JSON”。

在同一個界面,填寫“admin”密碼,後面會用到。

點擊“Create Autonomous Database’”,然後就能看到正在配置一個新的數據庫實例。

這個過程應該不過幾分鐘,等到頁面刷新後你會看到一個綠色的圖標,告訴你服務已經可用了。

點擊“Tools”,選擇“SQL Developer Web”。

輸入剛纔設置的“admin”密碼。

然後會出現一個Web控制檯,可以在其中輸入SQL和SODA命令。SODA全稱是Simple Oracle Document Access(甲骨文簡單文檔訪問),提供簡單的JSON文檔儲存界面。輸入“soda help”可以查看soda命令概述。

輸入下列命令創建‘cities’集合,並插入兩個JSON文檔。注意這兩者之間的區別:前者默認city屬於一個country,但後者city可以屬於多個country,這也是爲什麼後者會使用數組表示。

SQL

soda create cities;
soda insert cities {"name":"San Jose","population":1021795,"county":"Santa Clara"}
soda insert cities {"name":"Atlanta","population":506811,"county":["Fulton", "DeKalb"]}

現在,我們可以使用查詢搜索符合篩選條件的文檔,這一步叫“Query By Example”,或簡稱QBE。首先用QBE查找country爲“Fulton”的city:

SQL

soda get cities -f {"county":"Fulton"}   

然後用QBE選擇兩個文檔中所有人口大於250,000的city。

SQL

soda get cities -f {"population":{"$gt":250000}}

這裏我們都是使用控制檯輸入SODA命令,但一般情況下我們都會直接用編程語言直接運行SODA命令。甲骨文爲Java,JavaScript(nodeJS),Python,REST,PI/Sql以及ODPI-C提供SODA驅動。

我們還可以通過SQL來訪問存儲在甲骨文數據庫的JSON數據。首先,創建如下city的集合:

可以看到,JSON集合是由常規表支持, 而JSON數據則是以二進制的表現形式存儲,這種優化是爲了快速的讀取和分段更新。如果想將其轉換爲JSON字符串,那麼可以用JSON_SERIALIZE。

SQL

select JSON_Serialize(JSON_Document) from cities;

JSON_Table可以拆開嵌套JSON數據,並將其映射到關係列和行。注意,這裏兩個JSON文檔會生成三行數據,這是因爲其中一個city有兩個country。

SQL

select j.* from cities NESTED json_document 
    COLUMNS (name, population number, 
    NESTED county[*] 
    COLUMNS(countyName PATH '$')) j; 

從關係錶轉換回JSON也很容易。只需要將JSON生成函數添加到查詢。下面的代碼生成一個包含所有city名稱的數組。

SQL

select JSON_ArrayAgg(c.json_document.name) from cities c;

原文鏈接

https://blogs.oracle.com/jsondb/autonomous-json-database/comment-submitted?cid=82843da7-d065-45df-acfd-dea5656634e3

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章