如何使用Scale-Out HTAP数据库进行实时分析和复杂查询
工业:电子商务
作者:张一浩(小红树高级开发工程师)
Transcreator:Caitin陈;编辑:汤姆政府高级官员
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之前的基础架构。在应用逻辑上,从上到下分为在线应用层、离线数据仓库层和数据服务层。
让我们回顾一下非tidb世界中的三个应用程序场景。
数据报告
对于数据报告,我们使用Hadoop数据仓库进行数据的一些预汇总,然后聚合高维数据并将其放在MySQL中查询。对于数据报告,Hadoop中的数据被预汇总T + 1通过蜂巢模式并每天投入MySQL。然后,我们建立了一些商业智能(BI)系统来图形显示报告查询,因此我们的分析师可以看到他们的定制报告。
这种方法有什么问题?随着我们业务的快速增长,报告的类型变得更加多样化。MySQL的可扩展性也是一个具有挑战性的问题。如果我们不断添加MySQL节点,最终将很难管理所有节点。如果您操作和维护过数据库,您就会知道这可能非常麻烦。
实时查询在线分片数据库
让我们看看主从架构中的在线分片MySQL数据库。我们需要在不影响在线应用程序的情况下对它执行数据查询,所以我们只能检查辅助数据库。当然,这个辅助数据库是一个分片数据库。
这里出现了一系列问题。首先,我们仍然存在操作和维护问题:
- 如何在分片MySQL数据库中管理这么多节点?
- 我们如何向外扩展数据库?
- 我们需要对碎片进行重新分片吗?
- 我们如何确保数据一致性?
- 我们如何扩展数据库?
- 我们如何管理元数据?
这是操作和维护的复杂性。
另外,如果我想在分片MySQL数据库上运行事务,我可以使用分片中间件吗?如果我想做加入
,甚至是一个集团
聚合查询,是否可以使用分片中间件?这是可能的,但并不简单,因此我们必须找到一种能够轻松完成复杂的分布式查询的解决方案。
反欺诈分析
在反欺诈数据分析场景中,我们希望减少数据输入和处理之间的延迟。在TiDB之前,我们以T+1模式将数据写入后端数据仓库。洞察时间不符合我们的要求。欺诈很快就会发生。在几秒钟内看到已发行的息票的细节是很重要的,这样我们就可以立即采取措施。
TIDB HTAP改进了数据服务功能
为了尝试和解决上述挑战,我们介绍了tidb 3.0 htap.解决方案到我们的应用程序体系结构。如下图所示,使用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
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提供的全管理数据库服务。你可以申请免费试用两周在这里.