导读

NFTScan 是一家多链 NFT 数据基础设施服务商,为 Web3 用户提供高效简洁的 NFT 资产搜索查询服务,为 Web3 开发者和新一代金融科技公司提供专业的 NFT API 数据服务。

TiDB 作为一种分布式 HTAP 数据库,可以同时满足海量数据存储和高并发读写的需求, 在高可用性、分布式架构、ACID 事务支持和实时多维查询等方面,都具备优势,适配 Web3 行业的场景需求。

NFTScan 在快速发展中发现传统的 MySQL 数据库无法满足业务的快速增长,而 TiDB 能够提供毫秒级多维查询的能力,为 NFTScan 提供了更高效的服务,于是选择 TiDB 作为核心数据架构。本文介绍了 NFTScan 数据架构面临的挑战、选型的思考、迁移至 TiDB 的过程以及迁移后获得的收益。一体化的 HTAP 架构能够替代 MySQL + Elasticsearch 的能力,成为支撑在线数据服务的最佳选择。

NFTScan 成立于 2021 年 4 月,是一个多链 NFT 数据基础设施服务商,截止到 2023 年 1 月份,我们已经支持了 11 条区块链网络,包括 Ethereum、Solana、BNBChain、Moonbeam、Polygon、Arbitrum、Optimism、Avalanche、Fantom、Cronos、PlatON 网络。

NFTScan 旗下有 2 个核心业务:NFTScan.COM 多链 NFT 数据浏览器平台和 NFTScan OpenAPI 开发者平台。NFTScan 主要为 Web3 用户提供高效简洁的 NFT 资产搜索查询服务,以及为 Web3 开发者和新一代金融科技公司提供专业的 NFT API 数据服务。

目前,NFTScan 数据库收录了 100 万+ 个 NFT 合约地址,7 亿多枚 NFT 资产数据,17 亿多链 NFT 链上交互记录。并且这个数字还在以每日 3000 个 NFT 合约地址和 200 万个 NFT 资产的速度在递增。从上述数据可以看出,NFTScan 有着增量大,活跃度高两大特点。这样的业务特点决定了我们对数据库技术架构要求极高,需要具备全面、实时、高效等特性,并满足高并发、低延时等需求。选择一个合适的,能满足业务需求的数据存储体系对 NFTScan 来说至关重要。

以前的 MySQL 解决方案的挑战

此前,NFTScan 使用 Amazon Web Services (AWS) 上的 MySQL 和 Elasticsearch 作为其核心数据库解决方案。MySQL 存储了所有业务数据,包括来自 B 端和 C 端用户的用于分析和处理的数据。其中,NFT 的交易记录和资产记录是核心的业务数据模型,B 端和 C 端的查询也大部分是围绕这两类核心数据展开的。由于 NFT 数据每天都在持续增长,多维度查询会存在一些分布不均匀的现象,NFTScan 将 NFT 交易和资产相关数据以全索引方式同步到 Elasticsearch,以近乎全字段索引的方式响应多维度 NFT 数据查询,从而解决 MySQL 在多维度检索海量数据方面的性能与效率瓶颈。

该解决方案在使用半年后, 我们逐渐发现其无法满足业务的快速增长,存在以下缺陷:

  • 可扩展性差,存储和维护成本高。每天新的区块链数据量急剧增加,但 MySQL 无法自动横向扩展以应对不断增加的工作负载。我们不得不手动对表进行分片并新增 MySQL 的主备集群,来分摊和均衡 CPU 和内存资源的使用,这大大增加了存储和维护成本。
  • 随着成本的增加,使用率下降。Elasticsearch 部署在 AWS 上,由于 AWS 原生集群配置的限制,我们不得不增加更多的 Elasticsearch 高配置数据节点来提供在线查询服务,这导致成本上升和使用率降低。
  • 反复出现的精度错误。Elasticsearch 数据库更多的是为搜索而设计的,而不是为计算设计,所以在聚合计算中存在精度误差。

为什么选择 TiDB?

经过近一个月的调研和测试,我们最终选择了 TiDB 来作为核心数据架构,替代原有数据库系统。NFTScan 研发团队在调研中选择 TiDB 主要有以下几点考量因素:

  • 高度兼容 MySQL:TiDB 在传输协议和 SQL 语法等方面与 MySQL 高度兼容,NFTScan 可以轻松地将数据迁移到 TiDB,MySQL 兼容性大大减少了研发团队使用新数据库的学习成本、时间和精力,同时也能加速数据库架构的迁移工作;
  • 弹性伸缩:TiDB 采用计算和存储分离的分布式架构以及底层分布式存储数据的设计机制,NFTScan 可以根据读写流量的实时变化灵活伸缩计算存储资源,最大限度地提高了资源使用率,并大幅降低了成本;
  • 一体化 HTAP 架构:TiDB 的 HTAP 能力可以同时处理事务和分析工作负载,一套数据库即可满足事务型数据库和分析型数据库的需求,不仅完美地满足了 NFTScan 不断增长的业务需求,还降低了整体运营成本;
  • 高可用性:TiDB 本身的数据副本同步机制和内置的灾备方案,保证了整体数据库服务的高可用性。

迁移方案

经过两个月的时间,我们完成了将底层数据库系统全部切换到 TiDB 的工作,通过部署 2 台 TiDB 服务器、9 台 TiKV 服务器和 2 台 TiFlash 服务器,并在同一 region 下,跨三个可用区(AZ) 进行部署,保证了整体架构的高可用性。

截至 2022 年 11 月,NFTScan 的 TiDB 数据库存储了大约 6TB 的业务数据,QPS 达到 5000,平均查询时长 40ms,各种应用在 TiDB 上运行稳定。

流畅的迁移体验

在整个迁移过程中,我们对 TiDB 的性能与数据迁移的流畅性印象深刻。

TiDB 提供了 Dumpling、TiDB Data Migration (DM) 等一系列数据同步套件,帮助 NFTScan 将历史数据从 MySQL 迁移到 TiDB。比如 NFTScan 的一些业务数据是不能直接迁移到 TiDB 的,必须在迁移前先进行调整。在这种情况下,TiDB 的同步工具可以并发写入大量数据。在解析存储实时 NFT 数据时,执行效率较之前的存储方案提升了约 30%。

同时,TiDB 的 online schema update (在线 schema 更新)设计,使得 NFTScan 可以在迁移过程中进行异步更改字段和异步添加索引等数据定义语言 (DDL) 操作,而不会阻塞整个表的读写,这大大提高了业务逻辑调整时数据模式的灵活性。迁移完成后,NFTScan 对 B 端、C 端各类应用程序的数据查询进行了改造,经过充分调优和测试后,逐步将生产环境的应用全部切换到 TiDB。

使用收益

  • TiDB 支持多维实时查询,查询时间短。TiDB 完美地满足了 NFTScan 高吞吐量和低延迟的核心要求。以业务端的 API 服务为例,平均查询时间从 10-100 毫秒下降到 10 毫秒或更少。即使处理 1,000 QPS,这样的查询速度也能保持稳定。
  • TiDB 的列式存储引擎 TiFlash ,可以高效地处理分析工作负载。例如,在对某张具有数亿行的表执行复杂查询时,可以在几秒钟内获得结果。
  • TiDB 的智能 SQL 优化器可以根据数据的分布情况选择最具性价比的数据查询执行计划,让开发者可以灵活调整和优化 SQL 执行计划。

NFTScan x TiDB丨一栈式 HTAP 数据库为 Web3 数据服务提供毫秒级多维查询相关推荐

  1. TiDB:基于 Raft 的 HTAP 数据库

    目录 1. 简介 2. 基于 Raft 的 HTAP 3. TiDB 架构 4. Multi-Raft 存储 5. HTAP 引擎 6. 实验 7. 相关工作 8. 结论 摘要 混合事务和分析处理(H ...

  2. 从(知乎大量的数据上保持毫秒级的查询响应时间)上看什么是 TiDB?

    我们的痛点 系统架构要求 勘探 MySQL Sharding 和 MHA 的缺点 什么是 TiDB? 我们如何使用 TiDB 我们架构中的 TiDB TiDB 的性能指标 我们学到了什么 更快地导入数 ...

  3. 【金猿技术展】一种分布式 HTAP 数据库上基于索引的数据任意分布方法——为 HTAP 数据库实现 Collocation 优化...

    ‍ PingCAP技术 本项目由PingCAP投递并参与"数据猿年度金猿策划活动--2022大数据产业创新技术突破榜单及奖项"评选. ‍数据智能产业创新服务媒体 --聚焦数智 · ...

  4. 成为一栈式数据服务生态: TiDB 5.0 HTAP 架构设计与成为场景解

    作者介绍:马晓宇,PingCAP HTAP 产品部负责人. 数据实时化成为业务必须 数字化转型浪潮是现在进行时,在企业数字化转型的过程中,我们看到一个普遍的趋势,企业对"海量.实时.在线&q ...

  5. 最火的HTAP数据库 京东云新一代分布式数据库TiDB架构揭秘

    作者丨京东智联云数据库团队 2020年伊始,一场突如其来的新冠疫情, 席卷了华夏大地.为了抵抗疫情,全国人民众志成城,共同抗疫.疫情期间,各行各业受到了巨大影响,多数线下服务和活动基本陷入了停滞状态. ...

  6. 读 TiDB 论文有感 | 数据强一致性且资源隔离的 HTAP 数据库

    作者介绍: 陈现麟,伴鱼技术中台负责人,从 0 到 1 搭建伴鱼技术中台,对分布式架构.服务治理.稳定性建设.高并发高 QPS 系统和中台化的组织架构搭建有一定的经验,崇尚简单优雅的设计,关注云原生和 ...

  7. DDos攻击,使用深度学习中 栈式自编码的算法

    转自:http://www.airghc.top/2016/11/10/Dection-DDos/ 最近研究了一篇论文,关于检测DDos攻击,使用了深度学习中 栈式自编码的算法,现在简要介绍一下内容 ...

  8. Stanford UFLDL教程 栈式自编码算法

    栈式自编码算法 Contents [hide] 1概述 2训练 3具体实例 4讨论 5中英文对照 6中文译者 概述 逐层贪婪训练法依次训练网络的每一层,进而预训练整个深度神经网络.在本节中,我们将会学 ...

  9. 一个全栈式的应用集成平台,打破“信息孤岛”

    源宝导读:随着企业数字化进程的逐渐深入,企业存在大量的异构系统,各个系统之间信息传输.资源利用困难.本文将介绍明源云ERP为了打破这种"信息孤岛",而进行的思考与实践. 一.前言 ...

最新文章

  1. 天才少年何恺明:高考状元的开挂人生
  2. 【NLP】全面详解 | 深度学习中的注意力机制(一)
  3. oracle jinitiator版本太旧,Oracle Jinitiator 版本太旧或过低怎么办
  4. 杭电4786--Fibonacci Tree(生成树)
  5. idea license 20200104
  6. mysql5.1查询分析语句_MySQL 查询数据_mysql 查询语句_SELECT语句
  7. mysql数据恢复某一时间点_mysql时间点数据恢复
  8. Fiddler弱网测试
  9. C语言常用转换函数实现原理
  10. 有道云笔记不同步_有道云笔记同步失败解决方法
  11. 【官方文档】Fluent Bit 安装在 Windows
  12. 虚幻4 UE4 蓝图C++混合编程
  13. 【CSS 形状 (Shapes)】
  14. unity3D 移动平台性能优化
  15. python股票技术分析库Ta-Lib安装日记(windows 下 talib 安装)
  16. OSChina 周日乱弹 —— 感觉他俩长相挺门当户对的
  17. 学校信息系统、计算图形面积、计算车重C++(继承与派生)在线作业
  18. python画一只雪融融
  19. 关于SSL握手的错误解决
  20. ExcelHelper 帮助类-可以直接保存到共享文件夹

热门文章

  1. em在聊天中是什么意思_emmmm是什么意思 聊天中emmmm是什么意思什么梗
  2. Revit中绘图填充与模型填充的区别
  3. mysql什么类型允许负数_SQL数据库中那个类型可以存储负数,比如说存储-50? 如果不能存储。用什么方法存储?...
  4. 代码库_单精度浮点减法器
  5. 了解源代码管理工具——Github
  6. 【Materials Studio学习六】构建固液表面
  7. 15ubuntu20.04离线安装openssh8.9.p1
  8. 用代码抗议996加班:集结在github上的程序员,正在进行一场社会实验
  9. 杏花巷口,清香两拂袖
  10. Redis总结_实战篇