最近,Forrester开始关注事务分析(translytics)和事务分析数据库(Translytical Database)。所谓事务分析数据库,就是“事务发生的瞬间即可提供分析”的数据库。这是营销炒作?还是真有其事?
传统的OLTP数据库处理大量火烧眉毛的快速事务,但实际上并没做多少。一个OLTP数据库应用程序通常涉及:
“共享有限资源”——
正被评估、分配或使用着的有价值的对象。有时,多个事务将尝试使用相同的“共享有限资源”。在传统的RDBMS中,这是通过行级锁定来处理的。
大量类似的ACID交易。
低延迟,通常在单位数毫秒范围内。
术语“Translytics”(事务分析)是指具有附加功能的OLTP- 因此OLTP是Translytics的子集,它增加了 :
现在能肯定这一切都很容易吗?如果是每秒少量交易的小规模,这不是问题。但随着工作量的增加,这将变成一个重要的计算问题。
传统的RDBMS产品无法处理重要的事务分析工作负载。
当您在旧版RDBMS中发出查询时,它会尝试根据您执行查询时的数据的样子给出答案。对于快速运行的查询,这不是一个因素,但是查询保持运行的时间越长,服务器就越难以“记住”查询发出时所有行的样子,因为它们可能从查询发布的那一刻起已经反复更改。
为一个查询执行此操作是可管理的,但是当为了“计数”和“聚合”而每秒发出数百个这样的查询时,开销就变得完全无法管理。
NoSQL产品无法实时准确地进行聚合和计数
NoSQL产品更难以发现“计数”和“聚合”,因为它们的ACID实现通常仅限于单个记录或键/值对。这使得很难以任何精度计算或聚合多个“事物”。“Telling”也可能非常困难,因为有些产品(例如Cassandra)不喜欢您需要发出的范围查询,以获取记录块以供给下游系统。
VoltDB的架构非常适合事务分析(Translytics)
VoltDB非常擅长传统的OLTP工作负载,客户工作负载通常超过100KTPS,有时甚至超过这个数量。但它也具有对Translytics非常有用的功能:
物化观点
VoltDB的物化视图与传统的RDBMS中的工作方式不同。在传统的RDBMS中,视图是伪装成表的SQL查询。
当您查询“视图”时,您会发出基础查询,可能还有一些基于WHERE子句的其他复杂情况。虽然“视图”的实现不会减慢插入速度,但是读取它可能非常昂贵,导致我们上面讨论过的“计数”,“聚合”和“Telling (告诉)”问题。
在VoltDB中,物化视图实际上是一个真实的表,每次更新它所基于的基础表时都会更新。事实证明,在VoltDB中执行此操作的增量成本很小- 执行时间增加了几个百分点。但是当您从VoltDB物化视图中“选择”时,您可以简单地读取所需的答案,而无需发出触及基础表中数千个易失行的昂贵的读取一致性查询。
导出流
OLTP系统的一个典型问题是告诉其他连接系统在聚合级别上发生了什么。如果我们在某个时刻跟踪预付费电话的使用情况,我们需要报告拨打电话的次数,费用等等。正如我们上面提到的,这不易扩展。
VoltDB具有“导出流”的概念。它就像一张桌子,只是这张桌子只允许你"插入"。当您插入一行时,它会被放置在一个“至少一次”队列中,该队列连接到任何有效的外部目标,无论是HDFS,Kafka,HTTP还是您自己实现的目标。
INSERT(插入)具有其他语句所做的所有ACID语义,因此INSERT既可以作为事务的一部分发生,也可以根本不发生。
导出流因为它们存在于分区级别而具有缩放性,因此如果您有12个分区和2个导出流,则总共将有24个导出流。
记录到达目的地的速度在很大程度上取决于您导出的平台- 例如,如果您写入HDFS,与写入数据库服务器上的CSV文件相比,记录将显示更长时间。
导出流也可以与物化视图结合使用,因此您可以在保留有用的状态摘要的同时向下游写入信息,例如上次查看客户时。
从开发人员的角度来看,导出流允许将任意消息发送到具有高性能,最小麻烦和ACID语义的下游系统。它还允许我们执行Translytics工作负载的关键“Telling”部分,因为如果您无法告诉任何人,那么实时进行聚合计算毫无意义。
结论
“Translytics”不仅仅是OLTP的一个奇特名称。它将OLTP系统的传统和易于理解的功能与现代要求相结合,实时生成聚合和总计数据,从而满足业务需求。传统的RDBMS和NoSQL产品都很难很好地实现这一目标,而VoltDB具有重要的架构优势。欢迎大家下载并查看。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69903219/viewspace-2636346/ ,如需转载,请注明出处,否则将追究法律责任。