如何使用Scale-Out HTAP数据库进行实时分析和复杂查询

2020-10-02 Xiaohongshu 互联网

工业:电子商务

作者:张一浩(小红树高级开发工程师)

Transcreator:Caitin陈编辑:汤姆政府高级官员

MySQL替代方案:一个扩展的HTAP数据库

Xiaohongshu是中国流行的社交媒体和电子商务平台。也许你知道我们的另一个名字:RED或Little RED Book。小红书应用允许用户通过短视频和照片发布和分享产品评论、旅行博客和生活方式故事。截至2019年7月,我们拥有超过3亿注册用户。

我们的业务正在快速增长,我们的应用程序每天接收超过1亿行数据。我们寻找一个同时支持这两种功能的数据库事务性和分析性查询实时数据分析,水平可伸缩性.我们发现TIDB.,一个支持的开源分布式SQL数据库混合事务/分析处理(HTAP)工作负载,是一个很好的解决方案。

在这篇文章中,我将描述我们为什么选择TiDB,以及TiDB的实时HTAP功能如何在某些情况下帮助我们管理数据。

我们对数据库的需求

和许多公司一样,我们的业务是由数据驱动的。当我们在寻找一个数据库时,我们想要一个:

  • 支持事务处理和分析查询.有时,我们可能需要在数据库中执行一个简短的联机事务处理(OLTP)查询,并执行大量的写操作。其他时候,我们可能想从各种来源收集统计数据,执行聚合分析,并提出我们发现的摘要。TiDB的HTAP架构满足了我们对多样性的需求,非常适合我们。
  • 实时分析.许多数据分析引擎可以快速计算,但它们不支持实时分析。TiDB提供实时分析。
  • 水平可伸缩性.正如我提到的,我们的小红书每天接收的数据超过1亿行。单节点集群可能很快达到存储容量,无法提供服务。我们需要优秀的可扩展性。TiDB基于Raft共识算法,易于扩展。TiDB很好地满足了我们在这方面的需求。

TiDB满足了我们的每一个需求,它是我们新数据库的明确选择。

我们如何使用TiDB

在小红书,我们在多个场景中使用TiDB,包括:

  • 报告分析
  • 在大型促销活动中,向大型显示屏提供实时数据
  • 物流仓储
  • 数据仓库应用程序
  • 电子商务数据中心
  • 内容安全评论

为了让你了解TiDB为我们解决的各种问题,我选择了三个典型的应用场景:

  • 数据报告。我们的业务分析师使用数据报告来审查关键指标,如每周趋势、销售数据和用户增长。该报告还记录了季度环比或年度同比的数据。
  • 实时查询网上分类数据库。正如我之前提到的那样,巨大的数据流入我们的应用程序。我们必须能够查询极大的表格。例如,MySQL无法保存具有30亿行的表。在这种情况下,我们将数据库分开。我们希望我们能找到一种方法来查询分类数据,并且查询或分析不会影响在线应用程序。
  • 反欺诈数据分析。小红书电子商务平台定期发行优惠券,网上黄牛试图利用这些优惠券进行欺诈。我们希望我们能迅速识别出网上欺诈,这样我们就能阻止优惠券被使用。

在TiDB之前,我们的应用程序是什么样子的

下图显示了我们使用TiDB之前的基础架构。在应用逻辑上,从上到下分为在线应用层、离线数据仓库层和数据服务层。

MySQL数据库选择

使用TiDB之前的应用程序架构

让我们回顾一下非tidb世界中的三个应用程序场景。

数据报告

对于数据报告,我们使用Hadoop数据仓库进行数据的一些预汇总,然后聚合高维数据并将其放在MySQL中查询。对于数据报告,Hadoop中的数据被预汇总T + 1通过蜂巢模式并每天投入MySQL。然后,我们建立了一些商业智能(BI)系统来图形显示报告查询,因此我们的分析师可以看到他们的定制报告。

这种方法有什么问题?随着我们业务的快速增长,报告的类型变得更加多样化。MySQL的可扩展性也是一个具有挑战性的问题。如果我们不断添加MySQL节点,最终将很难管理所有节点。如果您操作和维护过数据库,您就会知道这可能非常麻烦。

实时查询在线分片数据库

让我们看看主从架构中的在线分片MySQL数据库。我们需要在不影响在线应用程序的情况下对它执行数据查询,所以我们只能检查辅助数据库。当然,这个辅助数据库是一个分片数据库。

这里出现了一系列问题。首先,我们仍然存在操作和维护问题:

  • 如何在分片MySQL数据库中管理这么多节点?
  • 我们如何向外扩展数据库?
  • 我们需要对碎片进行重新分片吗?
  • 我们如何确保数据一致性?
  • 我们如何扩展数据库?
  • 我们如何管理元数据?

这是操作和维护的复杂性。

另外,如果我想在分片MySQL数据库上运行事务,我可以使用分片中间件吗?如果我想做加入,甚至是一个集团聚合查询,是否可以使用分片中间件?这是可能的,但并不简单,因此我们必须找到一种能够轻松完成复杂的分布式查询的解决方案。

反欺诈分析

在反欺诈数据分析场景中,我们希望减少数据输入和处理之间的延迟。在TiDB之前,我们以T+1模式将数据写入后端数据仓库。洞察时间不符合我们的要求。欺诈很快就会发生。在几秒钟内看到已发行的息票的细节是很重要的,这样我们就可以立即采取措施。

TIDB HTAP改进了数据服务功能

为了尝试和解决上述挑战,我们介绍了tidb 3.0 htap.解决方案到我们的应用程序体系结构。如下图所示,使用TiDB的数据服务层可以提供应用程序所需的所有数据服务。

水平可扩展的数据库作为MySQL替代方案

使用TiDB后的应用程序架构

让我们了解TIDB如何在上述三个应用程序中提高我们的数据服务功能。

数据报告

在数据报告场景中,TiDB取代了MySQL,解决了随着业务增长而向外扩展MySQL的复杂问题。我们能够无缝迁移是因为TiDB与MySQL协议高度兼容——这是TiDB团队的一个出色决定。因为TiDB是MySQL-compatible,前端BI工具团队不必开发TIDB驱动程序;他们可以直接使用MySQL驱动程序。对于水平可扩展性,这就是TIDB最好的。我们可以直接添加一个节点,数据将自动重新平衡,这非常方便。

实时查询分片数据库

随着应用程序数据的快速增长,一个独立的MySQL数据库无法存储很多数据,因此我们将数据分割到10,000个表中。但是一个TiDB集群可以存储我们拥有的大量数据。

我们通过binlog实时复制MySQL数据到TiDB,复制延迟不到1秒,并将分片表合并到TiDB中的一个大表中。

最后,我们在TiDB中只看到一个大表。没有更多的碎片。我们使用MySQL作为主数据库,TiDB作为辅助数据库。我们可以查询TiDB而不影响MySQL。此外,TiDB还支持ACID事务,加入操作和聚合函数。

反欺诈数据分析

在我们应用程序中应用TIDB后,我们改变了T + 1模式,以便在Apache Flink中的SQL语句写入。跟踪事件快速生成,每秒(QP)的峰值查询可达到30,000或40,000。单个表可以每天获得大约500万行数据。如果我们保存数据10天,则单个表中的数据可能达到50亿行。在编写数据后,我们主要执行临时查询。如果分析师希望了解如何使用优惠券并在几分钟内理解分发,我们直接绕过Hadoop数据仓库,并在TIDB中进行实时查询。

TIFLASH改进了分析查询性能

Tikv.是TiDB的行存储引擎。与TiDB 3.0相比,TiDB 4.0通过引入柱状存储引擎提高了其分析查询性能,TiFlash

TiFlash实时HTAP分析

TiDB HTAP架构与TiFlash

理解TiFlash

TiFlash是TIDB的扩展分析发动机和柱状商店。包含Tiflash的TIDB数据库允许用户执行实时HTAP分析。

TiFlash有很棒的设计要点:

  • 实时一致性强。TiDB实时将更新后的数据复制到TiFlash中,确保TiFlash处理的是最新的(而不仅仅是最新的)数据。
  • 自动存储选择。TiDB智能地决定是选择行存储还是列存储来处理各种查询场景,而无需人工干预。
  • 灵活性和工作负载隔离。两行和列分别存储比例。

我们还测试了TiFlash,以物流场景为例。我们评估了393个生产查询,发现:

  • 对于聚合查询,如集团总和与TiKV相比,TiFlash的查询性能从大约3倍提高到10倍,平均执行时间减少了约68%。
  • 对于非聚合查询,与TiKV相比,TiFlash的平均执行时间减少了约4%。几乎所有的非聚合查询都命中了TiKV索引,并且没有使用TiFlash列存储。

TiDB 4.0也引入悲观锁定.在物流场景中,许多表需要一个加入,但那很贵。避免执行加入,我们将这些表将这些表组合成一个大型宽的表。例如,如果我将三个表组合成一个大型的宽表格,则三个流将同时更新此表,它们可能更新相同的行。TIDB 3.0使用乐观的并发控制机制,这将导致交易冲突。TIDB 4.0具有悲观锁定,有效解决了这个问题。

一个额外的奖金:响应的开发团队

我们有很好的关系PingCAP我们经常提出新的要求。例如,TiFlash的早期版本不支持不同的数.开发团队理解我们对优化的需求,我们的要求不久,Tiflash支持不同的数

TiFlash与Clickhouse

您可能更熟悉ClickHouse列存储引擎,所以让我们将其与TiFlash进行比较。虽然ClickHouse的计算性能比TiFlash快,但我们选择TiFlash是因为ClickHouse存在一些问题。例如:

  • ClickHouse的集群模型操作和维护更加复杂。
  • ClickHouse不支持数据更新。

我们的许多应用程序都有事务,需要频繁更新。然而,ClickHouse不支持更新。如果我们把操作改为附加或者插入,应用程序团队必须进行大量更改,例如重复数据删除。因为很多场景需要频繁的更新,所以我们选择了TiFlash。

结论

随着我们业务的快速发展,每天有超过1亿行数据涌入我们的应用程序。我们采用了TiDB,因为它是一个一站式的数据仓库OLTP和OLAP工作负载它支持实时数据分析,它是易于扩展.自2017年以来,我们在我们的生产环境中使用了TIDB。

如果你想了解更多关于TiDB的经验,你可以加入Slack上的TiDB社区.现在HTAP在TiDB云,由PingCAP提供的全管理数据库服务。你可以申请免费试用两周在这里

准备好开始使用TiDB了吗?