MongoDB:JSON and BSON

目錄

什么是 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 操作 - 或者更糟糕的是,必須從頭開始重新設計架構

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/37080.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/37080.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/37080.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

grep使用

在 Windows 中,你可以使用以下步驟來使用 grep 命令: 安裝 Git for Windows:grep 命令通常在類 Unix 操作系統(如 Linux、Mac OS X 等)中使用,但你可以通過安裝 Git for Windows 來在 Windows 上獲得類似的…

Transformer 結構

目錄 一、Transformer 的整體結構二、Input Encoding三、Transformer Block3.1 Encoder3.1.1 Attention3.1.2 Self-attention3.1.3 Multi-head Attention 3.2 Decoder3.2.1 Masked Multi-head Attention 四、Transformer 的優缺點 遇到看不明白的地方,歡迎在評論中留…

Incremental Player Build

*未解決,僅作記錄 Unity 版本 2021.3.15f1 問題 Unity 發布webgl 平臺卡在Incremental Player Build 界面。 解決 未找到明確原因,簡化工程路徑后發布成功。

Leetcode 矩陣問題

36題.有效的數獨 此類問題特點是給出行列的多種限定條件,數獨限制每行每列每個小九宮格元素范圍為1-9且不可重復 。解決此類問題最簡單的想法就是使用哈希set,記錄每行,每列,每個小九宮格已經出現的元素。在遍歷矩陣時提前做出是否…

S32K3 --- Wdg(內狗) Mcal配置

前言 看門狗的作用是用來檢測程序是否跑飛,進入死循環。我們需要不停地喂狗,來確保程序是正常運行的,一旦停止喂狗,意味著程序跑飛,超時后就會reset復位程序。 一、Wdg 1.1 WdgGeneral Wdg Disable Allowed : 啟用此參數后,允許在運行的時候禁用看門狗 Wdg Enable User…

技術干貨丨如何加速工業數字孿生應用落地?

什么是數字孿生? “孿生”概念最早可追溯至NASA的阿波羅項目,隨著數字化技術的進步,“孿生”概念應用從物理孿生向數字孿生發展。即“數字孿生”是對資產、進程或系統的一種數字化表示,并通過信息交互、數據同步等方式實現物理實體…

Java校園跑腿小程序校園代買幫忙外賣源碼社區外賣源碼

🔥校園跑腿與外賣源碼揭秘🔥 🚀 引言:為何需要校園跑腿與外賣源碼? 在快節奏的校園生活里,學生們對于便捷、高效的服務需求日益增長。校園跑腿和外賣服務成為了解決這一需求的熱門選擇。然而,…

C++ STL Iterator Adapter

1. std::back_insert_iterator 使用 // back_insert_iterator example #include <iostream> // std::cout #include <iterator> // std::back_insert_iterator #include <vector> // std::vector #include <algorithm> // std::copy…

獲取HTML元素的scrollHeight屬性

獲取HTML元素的scrollHeight屬性 大家好&#xff0c;我是免費搭建查券返利機器人省錢賺傭金就用微賺淘客系統3.0的小編&#xff0c;也是冬天不穿秋褲&#xff0c;天冷也要風度的程序猿&#xff01;今天我們將深入探討如何使用JavaScript獲取HTML元素的scrollHeight屬性。scrol…

實時智能全托管-云器Lakehouse重新定義多維數據分析

導讀 本文將分享云器Lakehouse如何重新定義實時多維分析&#xff0c;幫助客戶實現實時、智能、全托管的數據平臺。主要內容包括以下幾大部分&#xff1a; 多維數據分析的發展趨勢和場景解析 技術解析&#xff1a;新一代數平臺Lakehouse如何支持實時分析需求 價值解析&#x…

【打工日常】docker部署一個開源、跨平臺、又低資源運行的監控平臺

一、項目介紹1.項目簡述Netdata是一個開源、跨平臺、又低資源運行的監控平臺。Netdata每秒收集指標,并將它們呈現在漂亮的低延遲儀表板中。它旨在在所有物理和虛擬服務器、云部署、Kubernetes集群和邊緣/IoT設備上運行,以監控您的系統、容器和應用程序。2.項目功能收集數據:…

Matlab中數組詳解

在MATLAB中&#xff0c;數組是最基本的數據類型&#xff0c;幾乎所有的數據運算都涉及數組操作。下面是對MATLAB中數組的詳細解釋和操作示例&#xff1a; 數組的創建 一維數組&#xff08;向量&#xff09;&#xff1a; 行向量&#xff1a;用方括號 [ ] 包含元素&#xff0c;元…

git log 過濾

git log命令主要用于查看Git版本演變歷史&#xff08;也就是提交歷史&#xff09;&#xff0c;同時根據追加的參數和選項不同&#xff0c;也會有不同的展示效果。 git log命令說明 git log官方文檔說明 git log用于查詢版本的歷史&#xff0c;命令形式如下&#xff1a; git…

嵌入式linux系統中面試過程經驗分享

大家好,今天主要給分享一下,如何在面試中介紹自己的項目經驗,希望對大家有所幫助。 在面試時,經過寒暄后,一般面試官會讓介紹項目經驗。常見的問法是,說下你最近的(或最拿得出手的)一個項目。 根據我們的面試經驗,發現有不少候選人對此沒準備,說起來磕磕巴巴,甚…

vscode在windows系統上進行C/C++環境配置

隨手筆記前言 vscode在windows系統上進行C/C環境配置 步驟如下 第一步 下載安裝VSCode 這應該是最簡單的一步&#xff0c;相信大家自己就可以完成。如果在vscode官網感覺下載特別慢的話&#xff0c;可以去試一下騰訊軟件中心&#xff0c;我都是在這個網頁上下載的。下載好之…

26、 MySQL數據庫基礎練習系列股票交易系統基礎查詢和復雜查詢

5、基礎查詢 -- 1、查詢用戶信息僅顯示姓名與手機號 SELECT username as 姓名,phone as 手機號 from users;-- 2、模糊查詢和explain語句 alter table stocks add index stock_name_index(stock_name); explain SELECT * from stocks where stock_name like %東吳證券%; -- 3、…

【AIGC X UML 落地】從UML語句到UML圖形的生成,來看Agent插件的制作

上篇我們講到如何通過多智能體實現自然語言繪制UML圖。 沒有看過的,可以去看下原文:《【AIGC X UML 落地】通過多智能體實現自然語言繪制UML圖》 其中有一個實現重點,就是如何將 PlantUML 語句生成 UML 圖片。在這里筆者是通過自定義 Agent 插件來實現這一流程。 本文,就此…

面試-javaIO機制

1.BIO BIO&#xff1a;是傳統的javaIO以及部分java.net下部分接口和類。例如&#xff0c;socket,http等&#xff0c;因為網絡通信同樣是IO行為。傳統IO基于字節流和字符流進行操作。提供了我們最熟悉的IO功能&#xff0c;譬如基于字節流的InputStream 和OutputStream.基于字符流…

Vue 項目運行時,報錯Error: Cannot find module ‘node:path‘

Vue 項目運行時&#xff0c;報錯Error: Cannot find module ‘node:path’ internal/modules/cjs/loader.js:883throw err;^Error: Cannot find module node:path Require stack: - D:\nodejs\node_modules\npm\node_modules\node_modules\npm\lib\cli.js - D:\nodejs\node_mo…

問題解決:python安裝依賴時網絡問題報錯

進行 pip install 時&#xff0c;安裝輪子訪問過慢而造成安裝失敗&#xff0c;有時候配置鏡像源仍會出現莫名其妙的問題&#xff0c;包括網絡代理問題等。看了一些解決方案&#xff0c;找出了一個最適合的方式&#xff0c;如下所示&#xff1a; pip install -i https://pypi.t…