飛鳥開發MySQL盤口時搭建的資料流是什麼,以及微盤它是如何工作的?(下)
MySQL 中的資料流如何工作以及它是如何用 Node.js 實現的?
ITPUB【TG電報@duotebb】版權所有,禁止轉載。
讓我們討論一下它在後臺是如何工作的,以及這個流是如何在幕後工作的。
首先,Knex.js 是一個僅提供流介面的查詢構建器,換句話說,他們在功能的頂部新增了另一層,以使其更容易被程式設計師使用,這就是為什麼它很難知道它是如何使用的在 Knex.js 文件的幕後工作。
最初 Stream 功能來自 knex.js 依賴於 MySQL 的原始 MySQL-node 客戶端包。MySQL 包確實在他們的文件中提供了關於它是如何工作的簡要說明,你可以從MySQL 流中閱讀它。
然而到目前為止我們已經解釋過,不清楚它是原生的 MySQL 功能還是隻有 node.js 才能實現的功能。
因此,讓我們更深入地瞭解這部分是如何編碼的,我們可以從那裡獲得線索。
Mysql for node.js 是一個開源包,所以你可以通過他們的GitHub 倉庫訪問它是如何製作的,經過一段時間的閒逛,你會從他們的實現中得到一些線索。
如果你檢視程式碼依賴的這個檔案,你會發現他們使用了一個名為“COM_QUERY”的 MySql 文字協議來完成這項工作,那麼讓我們更深入地研究一下這個協議的作用?
COM_QUERY (SELECT statement message parsing) 是 MySQL 通訊 Text Protocols 的一種,讓我們關注一下 Text Protocol 是什麼意思,和 Binary Protocol 進行比較:
區別其實在於協議是面向資料結構還是面向文字字串,例如,HTTP 是一種文字協議,即使它傳送 jpeg 影像時,它也只是傳送原始位元組,而不是它們的文字編碼。
所以基本上通過 MySQL 中的 Text 協議,我們可以在沒有任何編碼的情況下傳送和接收資料,而 Com Query 的好處是我們可以解析文字以提取我們的需求。你可以在其官方文件
中獲取 MySql 的通訊協議列表和MySQL 文字協議列表。
回到 COM_QUERY,讓我們深入瞭解它的工作原理:
步驟 1) 客戶端命令或客戶端:
COM_QUERY 用於向伺服器傳送立即執行的基於文字的查詢,換句話說,當您提供此“Select *”並將其連結到 Stream 函式時,它將將此查詢傳送到伺服器然後開始執行馬上。
步驟 2) MySQL 伺服器以 4 個可能的資料包響應
1-如果執行錯誤,如SQL語法錯誤,返回ERR包
2-如果執行成功,但是沒有找到資料,返回OK包
3- 如果客戶端執行 load data local infile 'filename' into table,返回 LOCAL_INFILE_REQUEST。
4- 如果返回結果集(意味著有一些資料),則交付的包是Resultset。
步驟 3) 讓我們關注結果集
結果集意味著找到了資料,這意味著我們正在獲取一系列資料包。
結果集是我們收到的兩部分的組合,
首先是列定義,它通常包含有關列和資料型別和架構詳細資訊的資訊。
其次是行,每一行都是一個資料包,我們將行作為資料包。
ResultSet響應包的結構如下:
1 - 第一個資料包:是列長度資料包。
2 - 後跟n個欄位描述包,每個欄位描述就是一個包,畢竟是欄位資訊描述,一個EOF包或者OK包會作為欄位定義和資料(Row)之間的分隔符傳送。然後是OK包被退回
3 - 接下來是行資料包,每行一個資料包,包括包頭和訊息體。
4 - 最後的結束資料包,也可能是 EOF 或 OK 資料包
簡而言之,更一般地說,在執行 Com Query 之後……我們收到一個資料包序列,每個資料包都是一行。
因此,讓我們關注 MySQL 包以及他們如何使用它,在提供字串查詢之後,他們將向伺服器傳送一個 com 查詢......他們接收行資料包,並且對於每個資料包,他們解析它以提取行被獲取,他們使用 Node.js 流立即將它們作為事件發出,然後你偵聽“資料”以獲取行。
好吧,那是很多理論上的解釋 xD,但是現在我們更好地理解它是由於 MySql 協議而工作的。
使用其他資料庫和語言的資料庫資料流
至於資料庫,我不確定有多少其他資料庫支援這一點,但我的研究和遊樂場只有 MySQL。
至於 Node.js 以外的其他語言,這只是使用 node.js 流模組更友好的東西......這也可以通過其他語言實現,我已經看到 Java 示例做同樣的事情。
結論
在文章中我們討論了很多關於流的內容,現在你應該對資料庫中的流有一定程度的瞭解。我們提供了一些示例並對背景中發生的事情進行了深入的解釋。
請參考 MySQL 文件或上面提供的任何連結以瞭解更多資訊。
謝謝
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70017861/viewspace-2900083/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 什麼是代理以及它是如何工作的?
- 盤口如使用微信掃碼H5飛鳥微投script在二開React中搭建自定義新聖HooH5React
- 什麼是自然語言分析NLA,它是如何工作的?
- 在Linux中,什麼是管道?它是如何工作的?Linux
- 在Linux中,什麼是SSH?它是如何工作的?Linux
- 什麼是Linux包管理器,它是如何工作的?Linux
- 在Linux中,什麼是負載均衡?它是如何工作的?Linux負載
- 什麼是工時表軟體 它是如何運作的?
- 淺談2022飛鳥盤口原始碼H5掃碼防封全新開發搭建加入USDT發展之路原始碼H5
- 什麼是大資料?大資料開發是做什麼的?大資料
- 在Linux中,什麼是虛擬記憶體?它是如何工作的?Linux記憶體
- 什麼是實時渲染,實時渲染是如何工作的
- 小鳥雲資料盤如何進行掛載?
- 什麼是資料流?
- 股票內盤和外盤是什麼意思?股票內盤和外盤有什麼區別?
- 雲同步: 什麼是雲同步以及為什麼它是如此重要?
- 什麼是工作流
- 大資料開發是幹什麼的?大資料
- 什麼是Docker?它是如何解決業務難題的?Docker
- 奈飛的資料網格是什麼樣?
- 如何看盤?盤口語言有哪些分類?
- 什麼是雲端計算?什麼是公司網盤?
- 資料分析的工作流程是什麼?
- 什麼是大資料開發?大資料
- 如何搭建自己的私有云盤
- 迴歸基礎:DMAIC,它是什麼以及如何使用它?AI
- 企業雲盤是如何應對資料爆增的
- 為什麼說企業雲盤是企業儲存資料的標配
- 原始碼如何在盤口模式飛鳥系統平臺從搭建第一行程式碼自動化端到端測試教程原始碼模式行程
- 微前端架構初探以及我的前端技術盤點前端架構
- 什麼是影片流?影片流化工作原理以及挑戰介紹
- 什麼是Github的後設資料metadata以及如何備份github上的資料Github
- ElasticSearch寫入資料的工作原理是什麼?Elasticsearch
- 大資料:它是什麼?它能幫助我們什麼?大資料
- MySQL資料庫的優勢是什麼?MySql資料庫
- 什麼是光時域反射儀,OTDR的工作原理是什麼反射
- 大資料前景如何?大資料開發工程師是什麼?大資料工程師
- 什麼是 Spring Cloud 資料流?SpringCloud