混合事务处理和分析处理数据库的好处

2021-10-07 里克Golba 产品

作者:Rick Golba (PingCAP产品营销经理)

编辑:Fadi哈尔,黄了卡尔文翁杨,蒂娜

混合事务处理和分析处理数据库的好处

混合事务和分析处理(HTAP)是一个典型的特性TiDB.但它是什么?为什么它在当今的信息处理领域如此重要?

在最基本的情况下,HTAP意味着您可以在同一个数据库中运行事务性查询和分析性查询。但重要的是,用于此目的的数据库能够有效地处理这两种查询,而这正是事情变得复杂的地方。

事务性和分析性查询

事务性查询和分析性查询的编写方式相似,但它们用于不同的目的。事务性活动是那些支持业务日常运行的活动,而分析性查询用于提供支持业务决策所需的信息。

事务性查询

事务性查询通常用于完成事务,例如进行购买。另一种类型的事务性查询是对数据库信息的简单请求,例如在给定可搜索项(如事务ID或用户名)的情况下报告事务的日期。在许多情况下,报表的生成也可以作为事务性查询运行。对于信用卡公司,购买商品的行为和每月账单的创建都将通过事务性查询进行管理。

如果查询的目的是完成销售事务,那么将信息快速写入数据库是很重要的,这样就可以记录费用、更新库存,并在客户记录中反映结果。这最容易通过写入行存储来完成,因为所有必要的信息都可以在一个步骤中写入。对于像MySQL这样的关系数据库,数据的复制(就像所有用户信息一样)可以被最小化,因为这些信息通常存储在一个链接表中。通过减少为每个事务写入的数据量,我们使事务运行得更快。通过按行存储数据,我们需要将数据写入到最少数量的表中,以完成每个写事务。

在对行存储执行查询的情况下,我们通常寻找单个信息记录或数据子集。通过这种方式,我们减少了需要访问的表的数量,并且可以快速获得结果。索引可以进一步提高查询速度,但是对于行存储数据的处理有一些实际限制。

分析查询

假设有这样一个情况,您想知道有多少客户位于洛杉矶、加利福尼亚、美国或整个北美。行存储数据库可以像这样处理查询,但这不是收集数据的有效方法。要确定任何一个声明的查询,数据库将需要访问每个客户的记录,并确定他们的城市、州或国家(ies)是否匹配请求。一旦确定匹配存在,它将增加计数器以返回结果。

如果按列而不是按行存储数据会怎么样呢?现在,可以更快地回答上述查询,并且对环境的压力要小得多。由于每个查询都查看单个列(城市、州或国家)中的数据,因此需要更少的磁盘访问,并且可以快速提交响应。即使我们正在寻找的信息在我们的数据库访问的字段,例如,如果我们想要找到有多少人的姓史密斯,住在加州,我们仍然可以处理这个请求速度远远超过可能行存储。

随着数据量的增长,列存储的效率变得更加明显。如果您只有100万条记录,那么触摸每条记录来响应行存储的查询是一种昂贵但合理的场景。如果您有1亿条记录,那么访问行存储中每条记录的成本要比通过列存储响应所需的过程高得多,因为需要的磁盘访问点更少。

旧世界的解决方案

许多公司开发的解决方案是使用行存储数据库处理事务,使用单独的列存储数据库进行分析。通常,行存储数据库是记录数据库,因为它是第一个接收内容的数据库。然后,提取、转换和加载(ETL)流程将数据从行存储复制到列存储。虽然这为两种类型的查询提供了最佳存储,但它也带来了许多潜在的问题。

首先,ETL流程的运行通常是一个计划任务,这意味着将数据放入列存储时会有一些延迟。其次,该模型意味着至少要设置、维护和管理两个惟一的数据库,从而增加工作负载。用户需要知道哪个数据库更适合响应特别的查询,这进一步增加了混乱。第三,ETL流程可能会失败或出现问题,导致不同步问题。这些问题既费时又费力,还会给企业带来额外的成本。

其他一些公司只是使用行存储来处理事务性和分析性查询。虽然这在短期内可能行得通,但随着数据量的增长和用户对结果越来越不耐烦,这种模式对许多组织来说是不可持续的。

TiDB解决方案

TiDB通过将数据同时写入行存储和列存储在提交事务之前。您可以获得用于事务处理的行存储的速度,以及用于实时分析的高效列存储中的数据访问速度。如果在写入事务时出现问题,则它不会出现在任何一个存储中,以保持数据同步。

样本用例

这在很多情况下都很重要。让我们考虑一下用信用卡购物。在本例中,第一个交易是在加州的一家商店进行的购买。似乎这个事务的唯一要求就是记录事务,但是在处理事务之前,在后台还会发生更多的事情来验证事务。当发出购买请求时,还需要对交易进行验证:这是否符合您的购买模式,购买地点是否有意义,等等。例如,如果你通常购买1000美元以下的小件物品,而你现在购买的是15000美元的珠宝,这可能有点可疑。事务的这一部分需要分析模式和过去的使用情况,并且必须快速响应。如果一切似乎与购买,然后它将提交作为销售交易。

然而,不久之后,同样的信用卡信息出现在另一个州,在远离第一次购买地点的地方完成一笔交易。在验证过程中,信用卡公司可以将此请求与之前在加州完成的交易进行比较,这一点很重要。如果加州交易没有被复制到分析数据库,由于时间或ETL过程的失败,很可能新的交易不被认为是有问题的。

当使用TiDB时,初始事务立即记录在行存储和列存储中。现在,当第二次交易被尝试时,它将被标记为可疑的,因为你和你的信用卡不能同时出现在两个地方。即使第二次交易是由有效持卡人进行的,该持卡人很快就会意识到欺诈使用,并可以采取行动停止额外的交易。

同样地,在游戏世界中,游戏反应能够实时反映玩家所采取的行动也是非常重要的。虽然每个玩家的行动都是一种交易,但游戏可以通过分析每个用户在游戏中的正常行为来适应他们。它可以推荐活动,建议不同的选择,并改善与游戏的整体互动。有了HTAP,排行榜还可以不断更新,让玩家更有沉浸感。

物联网(IoT)意味着从我们的手机到我们的汽车等多个设备被连接起来,并将信息反馈给供应商。能够对连续流运行查询的数据,预测分析成为现实,也就是说,你的车现在可以显示一个建议换油基于数据的趋势和引擎的需求,而不是仅仅依赖于距离的老方法自最后一次改变。

TiDB根据同一组数据处理事务和分析,从而实现实时结果。不需要ETL流程,这可能会导致延迟或错误。当提交一个查询时,查询优化器将确定是行存储还是列存储更好,因此应用程序将继续以通常的方式提交请求。这也减少了用户的困惑,因为他们总是查询相同的数据库。由于TiDBMySQL兼容,很少(如果有的话)需要对应用程序进行更改。由于只有一个数据库为应用程序提供服务,因此工作负载也减少了。由于TiDB通常需要更少的计算设备,因此还可以节省大量成本。

总结

TiDB提供了HTAP,确保您的查询总是针对可用的最新数据运行。通过将信息存储在行存储和列存储中,可以提高效率,适当地使用计算资源,减少维护,并减少总体工作负载。您的应用程序继续使用TiDB;它的运行速度更快,效率更高。世界各地的公司已经看到了TiDB的好处,它被用于金融公司、游戏公司、支付处理提供商等。

回顾我们的文档有关TiDB如何支持混合事务和分析处理环境的更详细信息。你也可以阅读最近的博客实时分析。

PingCAP举办一个讨论HTAP的网络研讨会2021年10月19日。Tim Tadeo是我们的解决方案架构师之一,他将讨论HTAP数据库的重要性,介绍它有助于克服的一些挑战,并展示TiDB如何解决这些问题。还将演示TiDB,以说明如何处理查询并在混合环境中更快地运行。点击在这里登记。

HTAP 实时分析

准备好开始使用TiDB了吗?