NFTScan x TiDB - 一棧式 HTAP 數(shù)據(jù)庫為 Web3 業(yè)務(wù)提供毫秒級多維查詢

NFTScan 成立于 2021 年 4 月,是一個多鏈 NFT 數(shù)據(jù)基礎(chǔ)設(shè)施服務(wù)商,截止到 2023 年 1 月份,NFTScan 已經(jīng)支持了 11 條區(qū)塊鏈網(wǎng)絡(luò),包括 Ethereum、Solana、BNBChain、Moonbeam、Polygon、Arbitrum、Optimism、Avalanche、Fantom、Cronos、PlatON 網(wǎng)絡(luò)。

NFTScan 旗下有 2 個核心業(yè)務(wù):NFTScan.COM 多鏈 NFT 數(shù)據(jù)瀏覽器平臺和 NFTScan OpenAPI 開發(fā)者平臺。NFTScan 主要為 Web3 用戶提供高效簡潔的 NFT 資產(chǎn)搜索查詢服務(wù),以及為 Web3 開發(fā)者和新一代金融科技公司提供專業(yè)的 NFT API 數(shù)據(jù)服務(wù)。

目前,NFTScan 數(shù)據(jù)庫收錄了 100萬+ 個 NFT 合約地址,7 億多枚 NFT 資產(chǎn)數(shù)據(jù),17 億多鏈 NFT 鏈上交互記錄。并且這個數(shù)字還在以每日 3000 個 NFT 合約地址和 200 萬個 NFT 資產(chǎn)的速度在遞增。從上述數(shù)據(jù)可以看出,NFTScan 有著增量大,活躍度高兩大特點。這樣的業(yè)務(wù)特點決定了 NFTScan 對數(shù)據(jù)庫技術(shù)架構(gòu)要求極高,需要具備全面、實時、高效等特性,并滿足高并發(fā)、低延時等需求。選擇一個合適的,能滿足業(yè)務(wù)需求的數(shù)據(jù)存儲體系對 NFTScan 來說至關(guān)重要。

以前的 MySQL 解決方案的挑戰(zhàn)

此前,NFTScan 使用 Amazon Web Services (AWS) 上的 MySQL 和 Elasticsearch 作為其核心數(shù)據(jù)庫解決方案。MySQL 存儲了所有業(yè)務(wù)數(shù)據(jù),包括來自 B 端和 C 端用戶的用于分析和處理的數(shù)據(jù)。其中,NFT 的交易記錄和資產(chǎn)記錄是核心的業(yè)務(wù)數(shù)據(jù)模型,B 端和 C 端的查詢也大部分是圍繞這兩類核心數(shù)據(jù)展開的。由于 NFT 數(shù)據(jù)每天都在持續(xù)增長,多維度查詢會存在一些分布不均勻的現(xiàn)象,NFTScan 將 NFT 交易和資產(chǎn)相關(guān)數(shù)據(jù)以全索引方式同步到 Elasticsearch,以近乎全字段索引的方式響應(yīng)多維度 NFT 數(shù)據(jù)查詢,從而解決 MySQL 在多維度檢索海量數(shù)據(jù)方面的性能與效率瓶頸。

該解決方案在使用半年后, NFTScan 逐漸發(fā)現(xiàn)其無法滿足業(yè)務(wù)的快速增長,存在以下缺陷:

可擴展性差,存儲和維護成本高。每天新的區(qū)塊鏈數(shù)據(jù)量急劇增加,但 MySQL 無法自動橫向擴展以應(yīng)對不斷增加的工作負(fù)載。NFTScan 不得不手動對表進行分片并新增 MySQL 的主備集群,來分?jǐn)偤途?CPU 和內(nèi)存資源的使用,這大大增加了存儲和維護成本。

隨著成本的增加,使用率下降。Elasticsearch 部署在 AWS 上,由于 AWS 原生集群配置的限制,NFTScan不得不增加更多的 Elasticsearch 高配置數(shù)據(jù)節(jié)點來提供在線查詢服務(wù),這導(dǎo)致成本上升和使用率降低。

反復(fù)出現(xiàn)的精度錯誤。Elasticsearch 數(shù)據(jù)庫更多的是為搜索而設(shè)計的,而不是為計算設(shè)計,所以在聚合計算中存在精度誤差。

為什么選擇 TiDB?

經(jīng)過近一個月的調(diào)研和測試,NFTScan 最終選擇了 TiDB 來作為核心數(shù)據(jù)架構(gòu),替代原有數(shù)據(jù)庫系統(tǒng)。NFTScan 研發(fā)團隊在調(diào)研中選擇 TiDB 主要有以下幾點考量因素:

高度兼容 MySQL :TiDB 在傳輸協(xié)議和 SQL 語法等方面與 MySQL 高度兼容,NFTScan 可以輕松地將數(shù)據(jù)遷移到 TiDB,MySQL 兼容性大大減少了研發(fā)團隊使用新數(shù)據(jù)庫的學(xué)習(xí)成本、時間和精力,同時也能加速數(shù)據(jù)庫架構(gòu)的遷移工作;

彈性伸縮:TiDB 采用計算和存儲分離的分布式架構(gòu)以及底層分布式存儲數(shù)據(jù)的設(shè)計機制,NFTScan 可以根據(jù)讀寫流量的實時變化靈活伸縮計算存儲資源,最大限度地提高了資源使用率,并大幅降低了成本;

一體化 HTAP 架構(gòu):TiDB 的 HTAP 能力可以同時處理事務(wù)和分析工作負(fù)載,一套數(shù)據(jù)庫即可滿足事務(wù)型數(shù)據(jù)庫和分析型數(shù)據(jù)庫的需求,不僅完美地滿足了 NFTScan 不斷增長的業(yè)務(wù)需求,還降低了整體運營成本;

高可用性:TiDB 本身的數(shù)據(jù)副本同步機制和內(nèi)置的災(zāi)備方案,保證了整體數(shù)據(jù)庫服務(wù)的高可用性。

遷移方案

經(jīng)過兩個月的時間,NFTScan 完成了將底層數(shù)據(jù)庫系統(tǒng)全部切換到 TiDB 的工作,通過部署 2 臺 TiDB 服務(wù)器、9 臺 TiKV 服務(wù)器和 2 臺 TiFlash 服務(wù)器,并在同一 region 下,跨三個可用區(qū)(AZ) 進行部署,保證了整體架構(gòu)的高可用性。

截至 2022 年 11 月,NFTScan 的 TiDB 數(shù)據(jù)庫存儲了大約 6TB 的業(yè)務(wù)數(shù)據(jù),QPS 達(dá)到 5000,平均查詢時長40ms,各種應(yīng)用在 TiDB 上運行穩(wěn)定。

流暢的遷移體驗

在整個遷移過程中,NFTScan 對 TiDB 的性能與數(shù)據(jù)遷移的流暢性印象深刻。

TiDB 提供了 Dumpling、TiDB Data Migration (DM) 等一系列數(shù)據(jù)同步套件,幫助 NFTScan 將歷史數(shù)據(jù)從 MySQL 遷移到 TiDB。比如 NFTScan 的一些業(yè)務(wù)數(shù)據(jù)是不能直接遷移到 TiDB 的,必須在遷移前先進行調(diào)整。在這種情況下,TiDB 的同步工具可以并發(fā)寫入大量數(shù)據(jù)。在解析存儲實時 NFT 數(shù)據(jù)時,執(zhí)行效率較之前的存儲方案提升了約 30%。

同時,TiDB 的 online schema update (在線 schema 更新)設(shè)計,使得 NFTScan 可以在遷移過程中進行異步更改字段和異步添加索引等數(shù)據(jù)定義語言 (DDL) 操作,而不會阻塞整個表的讀寫,這大大提高了業(yè)務(wù)邏輯調(diào)整時數(shù)據(jù)模式的靈活性。遷移完成后,NFTScan 對 B 端、C 端各類應(yīng)用程序的數(shù)據(jù)查詢進行了改造,經(jīng)過充分調(diào)優(yōu)和測試后,逐步將生產(chǎn)環(huán)境的應(yīng)用全部切換到 TiDB。

用戶收益

TiDB 支持多維實時查詢,查詢時間短。TiDB 完美地滿足了 NFTScan 高吞吐量和低延遲的核心要求。以業(yè)務(wù)端的 API 服務(wù)為例,平均查詢時間從 10-100 毫秒下降到 10 毫秒或更少。即使處理 1,000 QPS,這樣的查詢速度也能保持穩(wěn)定。

TiDB 的列式存儲引擎 TiFlash ,可以高效地處理分析工作負(fù)載。例如,在對某張具有數(shù)億行的表執(zhí)行復(fù)雜查詢時,可以在幾秒鐘內(nèi)獲得結(jié)果。

TiDB 的智能 SQL 優(yōu)化器可以根據(jù)數(shù)據(jù)的分布情況選擇最具性價比的數(shù)據(jù)查詢執(zhí)行計劃,讓開發(fā)者可以靈活調(diào)整和優(yōu)化 SQL 執(zhí)行計劃。

(免責(zé)聲明:本網(wǎng)站內(nèi)容主要來自原創(chuàng)、合作伙伴供稿和第三方自媒體作者投稿,凡在本網(wǎng)站出現(xiàn)的信息,均僅供參考。本網(wǎng)站將盡力確保所提供信息的準(zhǔn)確性及可靠性,但不保證有關(guān)資料的準(zhǔn)確性及可靠性,讀者在使用前請進一步核實,并對任何自主決定的行為負(fù)責(zé)。本網(wǎng)站對有關(guān)資料所引致的錯誤、不確或遺漏,概不負(fù)任何法律責(zé)任。
任何單位或個人認(rèn)為本網(wǎng)站中的網(wǎng)頁或鏈接內(nèi)容可能涉嫌侵犯其知識產(chǎn)權(quán)或存在不實內(nèi)容時,應(yīng)及時向本網(wǎng)站提出書面權(quán)利通知或不實情況說明,并提供身份證明、權(quán)屬證明及詳細(xì)侵權(quán)或不實情況證明。本網(wǎng)站在收到上述法律文件后,將會依法盡快聯(lián)系相關(guān)文章源頭核實,溝通刪除相關(guān)內(nèi)容或斷開相關(guān)鏈接。 )