數據序列化比較:JSON,YAML,BSON,MessagePack


數據序列化比較:JSON,YAML,BSON,MessagePack

JSON是Web上數據交換的事實上的標准。JSON(JavaScript對象表示法)是一種輕量級的數據交換格式。 人類易於讀寫。 機器很容易解析和生成。
JSON是最廣泛的數據序列化格式,它具有以下功能:
人類可讀的代碼
非常簡單明了的規范 :整個規范的摘要僅放在一個頁面上。
廣泛的支持 :不僅每種編程語言或IDE都具有JSON支持,而且許多Web服務API都提供JSON作為數據交換的方式。

BSON是Binary JSON的縮寫,是類似於JSON的文檔的二進制編碼序列化。
JSON是純文本格式,雖然二進制數據可以用文本編碼,但它具有一定的局限性,並且會使JSON文件很大。 BSON致力於解決這些問題。
它具有以下功能:
方便地存儲二進制信息 :更適合交換圖像和附件
設計用於快速的內存操作
簡單的規范 :與JSON一樣,BSON的規范非常簡短
MongoDB的主要數據表示形式 :BSON旨在易於遍歷

消息包 (MessagePack)
就像JSON。 但是又快又小。
MessagePack (也為msgpack)是用於序列化的另一種二進制格式。 雖然不如BSON出名,但是值得一看。
其功能包括:
專為高效的線上傳輸而設計
JSON兼容性比BSON更好
小於BSON :具有比BSON小的開銷 ,並且在大多數情況下可以序列化較小的對象
類型檢查 :它支持靜態類型
streaming API :支持流式反序列化器,這對於網絡通信很有用。

YAML:YAML不是標記語言。 簡介:YAML是適用於所有編程語言的人類友好數據序列化標准。
回到純文本格式, YAML是JSON的替代方法:
(確實)人類可讀的代碼 :YAML可讀性強,甚至其首頁內容也顯示在YAML中以說明這一點
緊湊代碼 :空格縮進用於表示結構,無需引號或括號
關系數據的語法 :允許帶有錨點( & )和別名( * )的內部引用
特別適合查看/編輯數據結構 :例如配置文件,調試期間的轉儲和文檔頭
豐富的語言獨立類型集

序列化時BSON比JSON昂貴,反序列化時則更快。 MessagePack在任何操作上都比兩者都快。 同樣,由於其開銷,並且盡管是二進制格式,但是在存儲非二進制數據時,BSON文件有時可能會比JSON文件大。
即使對於相同格式,性能也會因選擇的序列化器和解析器而有所不同。
盡管聽起來很愚蠢,但BSON卻具有名稱的優勢 :人們自動將MongoDB(BSON)開發的格式鏈接到標准(JSON),而標准彼此之間沒有關聯。 因此,當搜索JSON的二進制替代方案時,您還可以考慮其他選項。
實際上, MessagePack在各個方面似乎都擊敗了BSON :它更快,更小,並且與BSON更加兼容JSON。 (實際上,如果您已經在使用JSON,則MessagePack幾乎是一個嵌入式優化。)
不過, BSON是MongoDB用來存儲和表示數據的格式 ,因此,如果您使用此NoSQL DB,那就是堅持使用它的原因。
當然,序列化並不僅僅是存儲二進制數據。 誠然,JSON具有不同的目標- “人類可讀”的目標 。 但是,無需花費太多精力即可注意到YAML在此方面做得更好。
但是, YAML規范非常龐大 ,特別是與JSON相比。 但是可以說,它一定是必須的,因為它帶有更多的數據類型和功能。
另一方面,不容忽視的是,JSON的簡單性在采用其他序列化格式方面起着關鍵作用。 它依賴於已經存在的廣泛使用的語言JavaScript,並且,如果您知道或接觸過JS(如果您在Web開發行業,那么您就是),那么您已經知道JSON。
那為什么不像現在這樣采用YAML呢? 在許多情況下,這並不容易。 JSON仍然是Web API的一席之地,因為您可以輕松地將JSON代碼嵌入到HTTP請求中(對於GET,如在URL中,對於POST,如在發送表單中):該格式將讓您知道傳輸是否突然中斷 ,
因為該代碼將自動使無效,而YAML和其他競爭的純文本格式可能不是這種情況。 另外,您仍然需要與基於JSON的API和舊版代碼在某一點或另一點進行交互,並且出於同一目的(數據序列化)而同時維護兩段代碼(JSON和YAML方法)總是很麻煩的。
我已經(以相當隨意的方式)遺漏了許多其他序列化格式,例如協議緩沖區 (protobuf,也是二進制)。
分層數據格式版本5( HDF5 )並不是真正用於序列化,而是用於存儲, 它正在席卷數據科學和其他行業 。 這是一種非常快速且通用的格式,不僅可以用於存儲許多數據結構,甚至可以替代關系數據庫。
如果您喜歡使用BSON和MessagePack之類的二進制格式來存儲/交換大量信息,那么您可能很想看看HDF5。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM