RION——一種快速、緊湊、通用的數據格式

2020-12-23 讀芯術

全文共5703字,預計學習時長17分鐘

來源:Pexels

原始網際網路對象符號(RION)是一種快速、緊湊、通用的數據格式。你可能會想:「又一個數據格式。」它和CSV、 XML、JSON、YAML、ProtoBuf、MessagePack、CBOR、亞馬遜的ION、 ApacheAvro 或者ASN.1有什麼不同呢?稍後我會在本文中解釋清楚,但首先必須介紹一下RION的背景信息。

用於高效數據交換和數據存儲的數據格式

RION由Nanosai研發,Nanosai是一家分布式系統研發公司,持「開放標準」——這意味著歡迎所有人使用。設計RION的最初目的是用於高效數據交換。然而現在擴展了目標用例,使其還包括結構化數據的高效存儲。

相信這兩個用例是緊密相關的,所以這個擴展是有意義的。它們的主要區別在於,通過網絡發送的信息通常具有固定的大小(至少發送一次),而文件的大小可能會隨時間推移而增長。

實際上,我們使用RION作為網絡協議的消息編碼和數據流存儲引擎的記錄格式。因此,我們對RION的數據交換和數據存儲進行了壓力測試。

通用的數據格式

從一開始,我們想使RION儘可能的通用化,這意味著可以對多種結構化數據進行編碼。願景在於,通過使用更加通用的數據格式,開發人員將無需經常在不同數據格式間轉換。越經常地默認使用RION,就越好。

很明顯,沒有哪種數據格式能完美適用於所有數據類型。對於如視頻、音頻、強格式化文檔等特定域的編碼, MP3、MP4或PDF等格式可能更合適。為了適應這種情形,RION被設計為能夠嵌入二進位數據和其他結構化數據(如元數據)。

RION的設計還允許在內置數據類型不足時通過自定義數據類型對其進行擴展。

支持的數據結構

要使RION真正通用,RION必須能表示各種各樣的數據結構。目前,RION可以表示:

二進位數據

鍵入數據欄位(布爾型、整型、浮點型、文本、日期時間)

單個欄位

無界欄位流

欄位(數組)的有界列

表格數據(如CSV文件,只包含一次列名)

對象和映射(鍵-值對)

對象圖(具有嵌套對象的對象)

可將這些數據結構組合起來以創造更高級的結構。例如,可以在表中嵌套表,或者在表中嵌套對象圖,該表中也可以有表。

欄位類型

RION編碼的數據包含一個或多個RION欄位。每個欄位都有一個類型。目前,RION包含以下欄位類型:

字節

布爾型

正整型

負整型

浮點型(32或64位)

UTF-8

短UTF-8

UTC

(參考)

數組(*)

表格

對象

短鍵

擴展

接下來對這些欄位類型進行詳細描述。

字節欄位用於「非結構化」二進位數據。例如,如果需要在RION中嵌入音頻或視頻文件(或者任何其它類型的文件或二進位數據),可將其嵌入字節欄位中。這樣可以高效傳輸二進位數據。

布爾型欄位可將值表示為true或false。

正整型和負整型表示正整數和負整數。正整型是編碼的,只包含有效字節。因此,包含數字127的正整型欄位可用2個字節表示,1024可用3個字節表示。另一方面,負數更具有挑戰性。

例如,32位的負整型需要4個字節,因為所有字節都是有效的。為了更高效地對負數進行編碼,我們創建了包含負整數的絕對(正)值-負1的負整型欄位。這允許使用與處理正整數時相同高效的「有效字節」編碼。

浮點型可以是32位或64位浮點數。

UTF-8或短UTF-8用於以UTF-8格式存儲的文本數據。短UTF-8使用比UTF-8少1位元組的文本來編碼不高於15個字節的文本。在包含許多文本欄位的數據中,每個欄位節省的1個字節匯總起來可能非常之大。

UTC是以UTC的格式存儲數據和時間。在網絡上交換日期-時間信息是常規用例,所以我們認為RION也應該支持這一點。為避免時區紊亂,我們決定「強制」用UTC時間來表示日期時間欄位。

截至目前,參考欄位還停留在設想階段。它旨在表示對RION數據中較早RION欄位的「反向引用」。這可以用於表示循環對象圖,也可避免在RDBMS結果集或微服務查詢響應等中重複冗餘信息。我們可能會添加其他欄位,以表示未來的冗餘數據的副本(如複製欄位)。

數組欄位用於表示RION欄位的數組(列表)。因此,RION數組能包含嵌套其中的其它RION欄位。所以數組欄位是一個複合欄位。請注意,可以把數組表示為具有單列的表,因此,實際上我們可以刪除數組欄位,只保留用於數組和表格數據的表欄位。

表欄位用於表示具有列和行的表格數據,如CSV文件或對相關資料庫的SQL查詢結果。為了高效地編碼表格數據,表只包含行的列名稱(鍵欄位),列名後面是列值行。這與CSV文件相似,第一行是列標題,後續行是每一行的列值。單列的表可表示數組,因此可以像前面所提到的那樣刪除數組欄位。表可以包含嵌套在其中的其它RION欄位。因此,也可以使用具有嵌套表的表來更高效地表示樹結構。

對象欄位用於表示鍵值對的對象或映射(字典)。通常,鍵值對將被編碼為鍵欄位,後跟一些其它欄位,但是如果需要,可以保留鍵(或值——如果這在你的用例中有意義)。可以在對象(包括數組或表欄位)中嵌套其它RION欄位,以表示需要的對象圖。截至目前,只能表示非循環對象圖,但若一旦完成了參考欄位的規範,也能表示循環對象圖。

擴展欄位類型旨在能夠指定自己的欄位類型,因此除了核心的RION欄位類型外,還能嵌入其它數據類型。

緊湊性

為了高效交換和存儲,緊湊性對於RION至關重要。因此,我們已經盡最大努力使RION編碼儘可能緊湊。有時為了實現其他設計目標如高讀取速度,我們不得不做出一些妥協,但在大多數情況下RION還是很緊湊的。

速度

來源:Pexels

對於RION的另一個設計目標是加快讀寫速度。不論何時在讀取速度和寫入速度之間權衡時,我們都傾向於讀取速度,因為我們期望數據的讀取頻率高於寫入頻率。例如,RION文件可能只寫入一次,但要讀取多次。這同樣適用於網絡消息,它們只寫入一次,然後在傳輸處理過程中讀取一次或多次。

RION使用緊湊的二進位編碼,使其讀寫速度高於XML、JSON、YAML、MessagePack、CBOR以及亞馬遜的ION等文本編碼。

此外,RION直接以二進位形式使用。當直接以二進位形式讀取而非先反序列化到Java對象時,簡單用例的速度可加快10倍。對於更高級的用例,加速量不定,可能更大也可能更小。

另外,RION的設計允許部分可解析性和任意分層導航。在特定情境中,服務往往可能返回比給定客戶端所需的更多數據。RION不必分析所有的返回數據,從而略過不需要的部分,以導航至需要的部分。也可以二進位形式瀏覽RION數據,分析出所需欄位,略過其餘欄位。

二進位編碼

為了實現高度緊湊性和高速度,RION使用二進位編碼。比起文本編碼,二進位編碼能實現對數字、日期以及二進位數據更緊湊的編碼。

對二進位編碼常見的異議是,在開發、調試、監視等過程中,人們很難閱讀它。為了解決這一問題,我們正在研究RION的文本編碼(目前稱其為TION),即可以將RION轉換為TION並返回,以實現在文本編輯器中的輕鬆閱讀和編輯。TION還未完全就緒,但預計將在2020年某個時間點完成。我們還實現了從RION到「格式化十六進位表示法」的轉換器,使其可在文本編輯器中檢查原始字節值。

自描述

RION使用自描述編碼,意味著不需要架構來理解RION數據塊。自描述的數據格式使其更容易使用,因為可以在不知道其架構的情況下通過瀏覽數據來查看結構。這也使得未知信息架構的中間節點發送信息變得更容易。

即使數據格式是自描述的,但將其與架構相結合仍然有意義。XML + XML架構和JSON + Swagger/RAML架構就是如此。架構可以對給定欄位的允許值、預期欄位等提供額外限制。目前的RION沒有任何架構機制,但正在考慮之中。

更多設計目標

為使本文儘可能簡短,我略去了一些「不太重要」的RION設計目標,可在這裡查看完整版。

http://tutorials.jenkov.com/rion/rion-design-goals.html

RION vs.其它數據格式

本節將簡要講述RION與今天所使用的其它流行數據格式的不同之處。不過,請記住,完整的概述需要對數據格式有深入的了解,因此本文所講的細節深度有限。

首先,RION作為一種二進位數據格式,與CSV、XML、JSON以及YAML不同。二進位的RION意味著它比這些格式更緊湊且讀寫速度更快。平均來講,RION的緊湊性比JSON高10%到33%,如果用於表格數據,其差異可超過50%。這種緊湊性差異也被轉換為類似的讀/寫速度差異。

文本數據格式確實更易於在文本編輯器中讀取和編輯,但是我們打算通過RION的文本表示(TION)來解決這個問題,使得RION和TION能相互轉換。這應該可以減少人的可見性/可編輯性問題。

RION在文件的根級別包含多個欄位,這將RION與XML、JSON區分開來,後兩者只能在文件的根級別包含單個元素。這使得RION更易用於流數據結構,如日誌文件和連續附加的數據文件。

RION使用類似於MessagePack、 CBOR以及亞馬遜的ION的自描述二進位編碼。然而,RION在一些細微且重要的地方與這三者不同。首先,在這些數據格式中,只有RION能指定表格數據的有效編碼。其次,在瀏覽複合數據結構如對象圖時,RION更容易以二進位形式進行任意瀏覽。第三,RION即將能表示循環對象圖,而MessagePack、 CBOR或者亞馬遜的ION目前都不能做到這一點。

此外, RION除了對表格數據更擅長這點較為突出外,與MessagePack、CBOR以及Amazon’s ION在緊湊性和讀寫速度方面都大致相同。

ProtoBuf、ASN.1和 Avro都使用需要架構來分析的數據編碼。換句話說,它們不能自描述。某些情況下,非自描述數據格式比自描述數據格式更緊湊,但差別較小。但是需要架構的數據格式可能使用起來比較麻煩,所以這是一個折衷方案。

有關更詳細的概述,請見「比較頁面」,會有不時更新。其中缺失一些數據格式,包括亞馬遜的ION、YAML、XML等,最後會添加上。

http://tutorials.jenkov.com/rion/rion-vs-other-formats.html.

在性能方面,測量結果顯示RION能與MessagePack和CBOR的速度相匹配,同時接近ProtoBuf的速度。但是所有的基準都基於序列化和反序列化對象。如果直接使用RION的二進位形式,並/或者只解析它的一部分,可以極大地提高速度。我們的基準有點老舊,因此需要儘快重做。點擊連結可查看目前的基準:

http://tutorials.jenkov.com/rion/rion-performance-benchmarks.html

總結和進一步的細節

來源:Pexels

總之,我們相信RION是目前最好的全方面數據格式之一。它提供了快速高效的二進位編碼、通用靈活的欄位類型集,可直接以二進位形式讀取和寫入(為了提高速度),或用於對象的序列化和反序列化。在速度方面,它能匹配大多數流行的數據格式,甚至能用表格數據格式超越它們,或者直接以二進位形式讀取RION。

我們(Nanosai)已經花費大量時間分析RION並將其與其它數據格式做比較,但是我們相信當前的編碼提供了一個很好的擴展基礎。目前仍有一些地方需要處理(如參考),但是我們期望在2020年大多數問題能夠得到解決。當RION變得越來越完整時,我們將再次發布推文。

我們目前正在使用RION作為網絡協議IAP的消息編碼,IAP是HTTP的替代物,用於在應用層實現高效靈活的網絡通信。IAP仍在研究中,但其基礎已經定義明確了。

我們還在Java的流操作中使用RION作為記錄格式——可嵌入式數據流引擎。流操作就像一束「卡夫卡之光」。雖然目前還處於概念驗證階段,但是我們期望能在整個2020年度來改進它。

流操作使用RION,因此可以獲得很好的記錄處理吞吐速度。現在已經能在開發人員的筆記本電腦上將其壓縮到每秒19.5萬條記錄(小記錄)。希望能在數據中心級的硬體上看到更高的數字。從長遠看,我們爭取達到每秒10億條記錄,這可以在1BRS 挑戰中看到。

目前,我們的RION開源工具包是在Java中實現的,一旦它們穩定下來,我們計劃擴展到其它語言。首先可能是性能語言,如C#、C/C++,然後是Python,因為它被大量用於數據科學。但這仍待決定。

因此,如果你正在尋求一種快速、緊湊、通用的全方面數據格式,不論你是使用Kafka、Pulsar、Hazelcast等進行高性能微服務、數據科學還是事件驅動架構,都有必要去看看RION。

關於RION的更多信息

原始網際網路對象符號(RION)是這種數據格式當前的工作標題。我們最開始使用的名字是ION,但是一年後,亞馬遜發布了一款名為ION的內部使用的數據格式,所以我們改名為RION。將來可能會再次改名,但就目前來看,數據格式本身是十分穩定的。

來源:Pexels

如果你對RION的詳細信息感興趣,請查看RION教程。

http://tutorials.jenkov.com/rion/index.html

我們還開發了一個名為「Rion Ops for Java」的開源工具包,用於在Java中使用RION。點擊以下連結查看。

https://github.com/nanosai/rion-ops-java

留言點讚關注

我們一起分享AI學習與發展的乾貨

如轉載,請後臺留言,遵守轉載規範

相關焦點

  • 微眾銀行區塊鏈開源數據治理通用組件 WeBankBlockchain-Data
    今年三月底,數據更是被作為一種新型的生產要素寫入中央文件,與土地、勞動力、資本、技術等經典生產要素並列。數據最終的價值來源於治理。只有經過採集、清洗、分析和處理後的數據,才能在流通中更順暢地使用,其價值才能得到更充分地挖掘。
  • Excel數據格式設置,我只用Ctrl+E,不僅功能強大,而且方便
    在Excel的使用中,格式設置可謂是家常便飯,但也「深惡痛絕」,因為常用的格式設置都是通過【設置單元格格式】來實現的,但是部分功能就是無法快速的實現……其實,Excel數據格式設置,除了【設置單元格格式】之外,還可以用快捷鍵Ctrl+E來實現。
  • 如何將文檔中的數據設置為千分位格式?
    22萬粉絲共同關注更多Excel/Word/PPT一分鐘動畫教程請點左下角的「閱讀原文」在Word中,如何將文檔中的數據設置為千分位格式→ 操作方法※利用「公式」對話框設置千分位※步驟1 如圖 6‑20所示,單擊「自定義快速訪問工具欄」下拉按鈕,選擇「其他命令」選項,打開「Word選項」對話框。
  • 客人剛進門,Rion(宇都宮紫苑)就兩眼發光!
    雖說劇照裡面看起來的rion似乎跟以往有點不同,,不過在看到這次的二周年拍賣會的照片,就知道她並沒有去整,臉蛋還是一如既往的正點到爆炸,至於有人說她肚子上有贅肉,其實這並不能避免,畢竟收入越來越多吃的東西就會越來越好。就算肚子有一些肉肉也沒有關係,因為本部作品裡面rion可以說是全程穿衣,所以大夥並不能看見她那影響顏值的贅肉。
  • 超能課堂(204):多媒體容器格式變遷錄
    何為容器(Container)對於數字媒體數據來說,容器就是一個可以將多媒體數據混在一起存放的東西,就像是一個包裝箱,它可以對音視頻數據進行打包裝箱,將原來的兩塊數據整合到一起,也可以單單只存放一種類型的媒體數據。它就像電影膠片一樣,中央是一幀一幀的圖像,而兩旁則印有對應的音軌。
  • 掌握這7個小技巧,數據錄入不求人
    ……好了好了,美文姐,小 E 這就把錄入數據時好用的小技巧全都告訴你,幫你擺脫這些麻煩!- 1 -快速橫向錄入數據這裡美文姐一行一行地錄入信息更方便,也就是她希望輸入完每個單元格後,可以轉到右邊的單元格繼續輸入。
  • Swedish metal band Therion on China tour
    在第二張專輯《BeyongSanctorum》中,Therion開始嘗試加入鍵盤和清嗓等新元素,開始慢慢走出死亡金屬的風格。Kliffoth》開始,Therion開始進入蓬勃發展的狀態。Therion首次使用了一支真正的弦樂團,也精心挑選了美聲合唱團的樂手,在演唱的部分全面改以男女多部的歌劇式合唱。專輯發行兩個月,僅在歐洲的銷量就超過了《Theli》一倍,Therion自此真正成為了世界級的交響金屬天團。
  • 打不開相機拍攝的RAW格式照片怎麼辦?
    RAW文件是一種記錄了數位相機傳感器的原始信息,同時記錄了由相機拍攝所產生的一些元數據(Metadata,如ISO的設置、快門速度、光圈值、白平衡等)的文件。RAW是未經處理、也未經壓縮的格式,可以把RAW概念化為「原始圖像編碼數據」或更形象的稱為「數字底片」。RAW格式的全稱是RAW Image Format,在編程中稱之為原始。
  • iPhone拍的RAW格式與JPEG格式照片差別有多大?
    要知道專業相機大多數都支持 RAW 格式圖像記錄,以滿足攝影師的追求極致的需求。RAW數據是傳感器每個像素受到光照後的反饋信號集合,光線通過鏡頭的反饋,傳到傳感器上後被轉化為電流信號,而信號傳送到圖像處理晶片(ISP)以後,會進行必要的運算,得到的數據則被存儲在設備的存儲器中。這就是各種拍照設備(手機、相機、攝影機等)拍攝圖像的典型處理流程。
  • 如何在Excel表格中利用聚光燈效果快速查詢數據?
    在Excel表格中錄入多組數據時,有時候查看數據會眼花繚亂。此時,如果有聚光燈效果,是不是於千萬組數據中一眼就找到它啦?別慌,試試這招,快速查詢數據妥妥的。第一步:選擇數據單元格,點擊Excel菜單欄中的「開始」--「條件格式」--「新建規則」。
  • 那麼多種圖片格式都有哪些特點
    它能夠保留所有的原始拍攝信息,如白平衡,曝光,對比度,飽和度,銳利度等數據,使其都可在後期調整。DNG 全名是數碼負片,是 Adobe 提出的一種 RAW 格式,試圖解決不同型號相機的原始數據文件之間缺乏開放式標準的問題。它的性質基本上跟 RAW 一樣,但一般比 RAW 檔小,可節省容量多達 20%。
  • 怎麼把flac轉ogg格式?快速轉換音頻格式的方法
    怎麼把flac轉ogg格式?小編在前面的文章中介紹到flac轉mp3的方法,接著有小夥伴就私信問道怎麼把原有的flac格式轉換成播放設備僅支持的ogg格式。接下來根據小夥伴的提問分享兩種flac轉ogg格式的方法。
  • mp3是一種什麼樣的音樂格式?
    mp3設備MP3屬於一種音樂的壓縮格式,並且是一種有損的壓縮格式。什麼叫做「有損」呢?從字面意思理解就是「有損失的壓縮格式」。事實上確實如此,MP3格式的音樂會失去一部分音頻。既然MP3格式是一種壓縮格式,那就說明MP3格式是為了減小音樂的體積。MP3格式的發明是在1991年,在那個年代儲存器並不發達,並且那個年代的儲存器的價格昂貴,所以MP3的出現很好地解決了音樂的儲存問題。
  • 廣電、網際網路電視通用名稱、基礎平臺、創新產品介紹
    網際網路電視牌照方常用合作模式通用平臺、通用插件簡介CMS/CLPS:"內容管理系統"也叫播控平臺,通常對媒資、元數據進行上下線管理;APK:(全稱:Android applicationpackage,Android應用程式包)是Android作業系統使用的一種應用程式包文件格式,用於分發和安裝移動應用及中間件。
  • 免費數據恢復軟體排行榜 推薦前十名
    軟體的快速和深度兩種掃描方式可以更全面地尋找丟失的數據,邊掃描邊恢復,無需等待完成整個掃描過程,還有所帶的【篩選】功能可以快速地找到您需要的文件,您還可以先提前預覽檢查內容的完整性。優勢:掃描速度快,恢復率高。擅長從格式化的磁碟或存儲卡中檢索數據。
  • Cyclerion醫療2020財年第二財季歸母淨利潤-1953.40萬美元 同比...
    8月3日Cyclerion醫療(股票代碼:CYCN)公布財報,公告顯示公司2020財年第二財季歸屬於母公司普通股股東淨利潤為-1953.40萬美元,同比增長39.44%;營業收入為74.90萬美元,同比下跌53.99%。
  • 中國出行大數據出爐,上汽通用五菱小型新能源市佔率達51%
    12月24日,全國新能源汽車大數據聯盟與多家權威機構在北京聯合發布《中國小型純電動乘用車出行大數據報告》。大數據報告顯示,上汽-通用-五菱近兩年在小型純電動乘用車市場表現突出,現已躍居行業領先地位。同時,據報告統計,上汽通用在五菱的小型純電動乘用車月均在線率高達93%,明顯高於每月78%的行業數據,充分證明上汽通用五菱對人們出行需求的精準洞察而非步行。
  • 常見的影響檔案格式與用途
    DNG全名是數碼負片,是Adobe提出的一種RAW格式,試圖讓市場上有一個可以統一RAW的格式,性質基本上跟RAW一樣,但一般比RAW檔小,可節省容量多達20%。有些相機品牌,已經直接提供拍攝DNG的選項,但仍未通用到全部的數位相機。Adobe有提供免費的Adobe DNG Converter program。優點:讓處理速度變快,在LR和PS也可以使用缺點:因為不是所有相機都能拍DNG,變相會多了一重轉檔步驟PNG
  • 華為Atlas數據中心業務負責人張迪煊談AI 讓AI真正成為「通用技術」
    華為Atlas數據中心業務負責人張迪煊談AI 讓AI真正成為「通用技術」 常言道 發表於 2020-03-28 14:29:22 作為華為Atlas數據中心業務的負責人
  • 【樂說音響】mp3下課後,有哪些更好的數位音樂格式
    用數位化技術來留存和傳播音樂,需要給這種音樂文件規定一種格式,大家才能用同樣的格式來播放這些文件,聽到音樂。好比我們在中國,規定普通話是通用語言,在美國是英語,在俄國是俄語,不然我們互相說話就聽不懂了。這些語言之間是可以翻譯的,翻譯了之後也能懂。數位音樂格式意思差不多,出版商錄製出版CD,我們買回家放,或者送給朋友放,都要有一個統一的格式,不然買回家放不出聲音,你還要嘛。