目錄
什么是 JSON
MongoDB-JSON連接
什么是 BSON
MongoDB 使用 BSON 還是 JSON
JSON 與 BSON
架構靈活性和數據治理
- JSON 和 BSON 是近親,正如它們幾乎相同的名稱所暗示的那樣
- JSON(即 JavaScript 對象表示法)是網絡上廣泛流行的數據交換標準
- BSON(二進制 JSON)就是基于該標準
什么是 JSON
- JSON(即 JavaScript 對象表示法)是一種人類可讀的數據交換格式,在 2000 年代初指定
- 盡管 JSON 是基于 JavaScript 編程語言標準的子集,但它完全獨立于語言
- JSON 對象是關聯容器,其中字符串鍵映射到值(可以是數字、字符串、布爾值、數組、空值 — null,甚至是另一個對象)
- 幾乎所有編程語言都有這種抽象數據結構的實現—JavaScript 中的對象、Python 中的字典、Java 和 C# 中的哈希表、C++ 中的關聯數組等等
- JSON 對象易于人類理解,也易于機器解析和生成
- 主要用于:
- APIs
- 配置文件
- 記錄消息
- 數據庫存儲
MongoDB-JSON連接
- MongoDB 從一開始就被設計為一個專注于提供出色開發體驗的數據庫
- JSON 的普遍存在使其成為表示 MongoDB 文檔數據模型中的數據結構的明顯選擇
- 然而,有幾個問題使得 JSON 不太適合在數據庫內部使用
- 1-JSON 僅支持有限數量的基本數據類型;最值得注意的是,JSON 缺乏對日期和二進制數據的支持
- 2-JSON 對象和屬性沒有固定長度,這使得遍歷速度變慢
- 為了使 MongoDB 成為 JSON 優先,但仍然具有高性能和通用性
- BSON 的發明彌補了這一差距:一種以 JSON 格式存儲數據的二進制表示形式,并針對速度、空間和效率進行了優化
什么是 BSON
- BSON 代表“二進制 JSON”,這正是它被發明的目的
- BSON 的二進制結構對類型和長度信息進行編碼,這使得它的遍歷速度比 JSON 快得多
- BSON 添加了一些非 JSON 原生數據類型,例如日期和二進制數據,如果沒有這些數據類型,MongoDB 將失去一些有價值的支持
- 以下是一些示例:JSON 對象及其相應的 BSON 表示形式
MongoDB 使用 BSON 還是 JSON
- MongoDB 在內部和網絡上以 BSON 格式存儲數據,但這并不意味著您不能將 MongoDB 視為 JSON 數據庫
- 您可以用 JSON 表示的任何內容都可以本機存儲在 MongoDB 中,并且可以在 JSON 中輕松檢索
- 當使用您最喜歡的編程語言的 MongoDB 驅動程序時,您將使用該語言的本機數據結構
- 當查詢數據庫時,驅動程序將負責將數據轉換為 BSON 并返回
- 與將 JSON 存儲為字符串編碼值或二進制編碼 blob 的系統不同,MongoDB 使用 BSON 在 Web 最流行的數據格式之上提供強大的索引和查詢功能
- 例如,MongoDB 允許開發人員通過 JSON/BSON 文檔中的特定鍵查詢和操作對象
- 甚至在深入記錄的多層嵌套文檔中,在那些相同的鍵和值上可以創建高性能索引
JSON 與 BSON
- JSON 和 BSON 在設計上確實是近親
- BSON 被設計為 JSON 數據的二進制表示形式,具有針對更廣泛應用的特定擴展,并針對數據存儲和遍歷進行了優化
- 就像 JSON 一樣,BSON 支持嵌入對象和數組
- BSON 與 JSON 的一個特殊區別在于它支持一些更高級的數據類型
- 例如,JSON 不區分整數(整數)和浮點數(具有不同程度的小數精度)
架構靈活性和數據治理
- 對于使用具有 JSON 和 BSON 數據模型的數據庫的開發人員來說
- 最大的吸引力之一是與關系數據庫使用的嚴格的表格數據模型相比,它們提供的動態且靈活的模式
- 首先,MongoDB 文檔是多態的——單個集合中不同文檔的字段可能不同(類似于關系數據庫中的表)
- 這種靈活性使得對任何結構的數據進行建模并根據需求變化調整模型變得更加容易
- 其次,不需要向數據庫聲明文檔的結構——文檔是自描述的;開發人員可以開始編寫代碼并在創建對象時保留它們
- 最后,如果需要將新字段添加到文檔中,則可以在不影響集合中的所有其他文檔的情況下創建新字段,無需更新中央系統目錄,也無需使數據庫脫機
- 當您需要更改數據模型時,文檔數據庫會繼續存儲更新的對象,而無需執行昂貴的 ALTER TABLE 操作 - 或者更糟糕的是,必須從頭開始重新設計架構