HTAP需求不能被HTAP数据库解决

作者&投稿:都轻 (若有异议请与网页底部的电邮联系)
~

HTAP(Hybrid Transaction and Analytical Process,混合事务和分析处理)自 2014 年明确提出以后成为了很多数据库厂商努力的方向。其实 HATP 并不新鲜,早年 RDB 刚兴起时本来就是用一个数据库同时做事务和分析,但随着数据规模不断变大再直接基于业务库做分析就会影响业务,这时数据仓库出现了,将业务数据导入数据仓库来专门应对分析需求,同时与业务库隔离,这样不仅可以更好地服务分析场景,又不会对业务系统产生影响,这是“合久必分”的阶段。但是由于数据仓库将 历史 数据与实时数据分开了,有时经常还会采用异构数据库(或大数据平台),如果要分析实时全量数据(T+0)就非常困难了,而 T+0 又是很多及时性业务必须的,这就造成了“数据仓库之殇”。为了解决这个问题,能不能把 AP 和 TP 在一个数据库内同时满足呢?于是 HTAP 再次登场了,这又到了“分久必合”的阶段。

但我们知道,AP 和 TP 两个场景有显著不同,前者涉及的数据量很大,并且计算逻辑复杂,但并发量往往不大,没有数据一致性要求,甚至经常为了使用方便可以不满足范式;后者恰恰相反,数据量不大且数据处理逻辑简单,但并发量很大,有数据强一致性要求。从功能上讲,TP 数据库本来就能执行 SQL,也本来就具有一定的 AP 功能。当初之所以要把 TP 和 AP 分开,就是因为巨大数据量时,继续采用偏向 TP 的技术就不能高效地处理 AP 的需求(比如 AP 要求高性能需要使用列存,但 TP 为了写入更新便利需要使用行存),TP 和 AP 的这些巨大差异就决定了这两个场景不能采用一个技术体系来同时满足,而这件事到现在并没有实质性地改变。

即使如此,还是有一些厂商尝试在同一引擎中同时满足 TP 和 AP 的需求,实现上有几种方式。一种是采用多副本的方式,其中某一个副本(可能使用列存)专门用来满足 AP 的需求;一种是采用行列混合存储,行存和列存各一份,二者之间自动转换;还有一种方式可以不区分行列存储,通过单一存储引擎支撑 TP 和 AP 场景,常见的是某些内存数据库。这类 HTAP 数据库在实现上会优先满足 TP 的需要,在此基础上再发展 AP 的功能,因此在满足 AP 需求时相对一般专用的 AP 产品往往会有很大差距。

另一种 HTAP 数据库的做法是在底层仍然将两个场景分离,以“模块化”的方式来设计存储,业务数据产生后就会被复制两份(不考虑副本的情况),一份仍然使用行存用于交易,一份复制使用列存用于分析。相应的存储和计算再借助原本在 TP 和 AP 领域已经成熟的技术进行封装和优化,同时设计统一的对外访问接口,底层的差异对应用层完全透明,这样就形成了可用的 HTAP 产品。

无论采用哪种方式设计 HTAP 数据库,在应用时都会碰到一个问题,如果原来的业务数据库不是(大概率)采用 HTAP 数据库就要涉及数据库迁移,这将面临巨大的风险和成本。不仅要考量数据类型差异导致的数据结构迁移过程中需要进行改造和处理,还会涉及视图、存储过程以及复杂 SQL 的改造等,还有在迁移工程中遇到的种种问题要解决,可谓坑多且深。由此带来的业务影响可能会带来极大价值损耗。

此外,现代业务系统不仅涉及 RDB,还有 MongoDB、InfluxDB 等 NoSQL,以及各种自己封装的业务数据源,种类很多五花八门。这些数据源要迁移到新数据库就没那么简单了,像 MongoDB 数据转存到 RDB 会发现实现很困难。MongoDB 中的很多数据类型和集合之间的关系在 RDB 中并不存在,比如嵌入式的数据结构、数组和哈希等集合类型、多对多关系的实现。这些问题并不是简单通过数据迁移就能解决的,需要在迁移之前先对部分数据结构进行重构,这需要事先投入相当多的人工和时间成本去梳理业务并设计目标数据组织方式。即使最后花费很大代价把业务数据源迁移到 HTAP 上,原来那些多样性数据源自身的优势却又丧失了,得失之间有时甚至很难权衡是否值得。

我们知道,数据计算性能和数据组织密不可分,在 AP 类场景中通常要使用列存来发挥计算优势,但只有列存是远远不够的,有些复杂计算需要针对计算特点专门设计数据存储形式(比如有序存储、数据类型转换、预计算等)。而这些对性能要求高的复杂计算在 AP 类场景中并不少见,但无论采用何种方式的 HTAP,简单“自动化”地行存转列存并不能实现相对“个性化”的效果,性能往往无法达标。这个道理也很简单,天下没有什么都好的事儿,你想融合就必须容忍在某一或某些方面的不足。

迁移风险大、成本高、有损失、性能还可能不达标,考虑到这些问题,我们不禁会问:HTAP 数据库这个技术路线对吗?

说到这里我们再回头看一下 HTAP 的目的,为什么要用 HTAP?

其实就是为了进行全量数据实时查询统计,也就是 T+0!

如果数据仓库等相关技术能搞定这个问题,那自然也就不需要 HTAP 了。不过很遗憾,数据仓库仍然延用了关系数据库的封闭体系,数据要先入库才能计算,而且入库又有较强约束。这些导致数据仓库无法很好实现跨数据源尤其是异构和非关系型数据源的混合计算,很难实现 T+0 的目标。

但集算器 SPL 可以。

集算器 SPL(Structured Process Language),一个专门面向结构化数据计算的 开源 计算引擎和程序语言。除了提供了丰富的计算类库使其拥有不依赖数据库的独立计算能力外,SPL 可以对接多种数据源并完成多源混合计算,从而轻松完成跨数据源的 T+0 查询。

SPL 通过与现有系统融合的方式实现 HTAP,这样原有系统的改动很小,TP 部分几乎不动,甚至原有的 AP 数据源也可以继续工作,逐步使用 SPL 接管 AP 业务。SPL 部分或全部接管 AP 业务后, 历史 冷数据使用 SPL 高性能文件存储,原来针对业务库到数据仓库的 ETL 过程可以直接移植到 SPL 上。冷数据量大且不再变化使用 SPL 高性能文件存储可以获得更高地计算性能;热数据量小仍然存放在原有 TP 数据源中,SPL 直接读取计算,由于热数据量并不大,直接基于 TP 数据源查询也不会对其造成太大影响,访问时间也不会太长。再利用 SPL 的冷热数据混合计算能力,就可以获得针对全量数据的 T+0 实时查询。我们只要定期将变冷的数据固化到 SPL 的高性能存储中,原数据源只需要保持少量近期新产生的热数据即可。这样不仅实现了 HTAP,而且还是高性能的 HTAP,且对应用架构冲击很小。

现代信息系统中建设数据仓库等专门服务分析场景已然十分常见,加之数据源种类繁多,将这些数据都迁移到一处代价太大了,对于这点前文我们已经分析过。如果能在现有架构的基础上增加跨数据源的实时混合计算能力,就相当于插上了 HTAP 的翅膀,在不改变现有架构的情况下快速实现 HTAP 的需求,而这正是 SPL 的强项。

SPL 支持多种数据源,RDB、NoSQL 以及 RESTful 等都可以直接使用,还可以解析 JSON/XML 等类型数据,可以对接 Elasticsearch、Kafka 等数据源,此外传统 / 新兴数据仓库、大数据平台等也可以直接取数计算。

在对接的同时可以针对任意多种数据源进行混合计算,这样实时数据从生产库中读与取自 历史 库 / 数据仓库 / 大数据平台的冷数据混合计算就可以实现 T+0 全量实时数据查询。这样原有应用架构几乎不用变动(尤其是生产库)就可以获得 HTAP(架构层面)期望的效果,成本极低。

使用 SPL 在现有架构上输出 HTAP 能力还有一个好处是可以充分保留原有数据源的优势。NoSQL 仍然可以继续使用而不必强行将结构拉成 RDB 的形式,自己封装的数据访问与交互接口也不必费心去迁就新数据库,原来的优势与个性化仍然保持,风险很低的同时价值几乎没有损耗。

在分析侧也一样,基于 SPL 也可以继续使用原本建设好的分析平台。但如前所述,分析场景面临的数据量大且计算逻辑复杂,尤其需要高性能。SPL 还提供了高性能计算机制,可以全面接管原来分析侧(AP)的业务实现高性能数据计算。

我们知道,高性能计算涉及两方面,一个是数据组织方式即数据存储,另一个是算法,这二者密不可分,很多高性能算法需要将数据组织成相应格式(如有序)才能发挥作用。SPL 提供了自有的高性能存储机制,直接采用文件系统。将数据存储特定格式的文件中,不仅可以获得更高的 IO 存取效率以及文件系统灵活的管理能力,还可以充分利用自有格式的列存、有序、压缩、并行分段等数据存储优势,从而高效地发挥高性能算法效力。

而在算法方面,SPL 提供了十分丰富的高性能算法库。遍历复用、有序归并、外键预关联、标签位维度、并行计算等,都已经封装好,可以直接使用,配合 SPL 的存储机制就能获得高性能。而且这其中有很多算法都是 SPL 独创的,在业内也是首次提出。

如果简单地将 TP 中的行存转换成 SPL 中的列存,工作量也非常低。但为了获得高性能,常常还需要精心设计存储方式,这时,将会有一定量的 ETL 动作,但这个工作与原来从业务系统 ETL 数据到数据仓库基本是一样的,并不会更复杂,而且这个工作对于高性能是少不了的。和一般 HTAP 数据库很难实施经过有效设计的存储相比,SPL 将冷热数据分离后可以从容不迫地像以前 TP/AP 分离时那样实施更高效的存储组织,这样更能将 TP 和 AP 双边的性能发挥到极致。相对大幅的性能提升,数据组织的工作往往是值得的。

在实战中,使用 SPL 存储和算法提升数倍数十倍性能的案例很多。比如在某保险公司车险保单跑批的案例( 开源 SPL 优化保险公司跑批优从 2 小时到 17 分钟 )中,使用 SPL 将计算时间从 2 小时缩短到 17 分钟。这里使用 SPL 接管存储后再利用 SPL 特有的遍历复用技术(在对大数据的一次遍历过程中实现多种运算)有效地减少外了存访问量,同时将涉及对一个大表进行三次关联和汇总的运算只需要遍历一次(SQL 要将大表遍历三次),并在关联运算上采用了不同的算法,因此获得了巨大的性能提升。

还有在 开源 SPL 将银行手机账户查询的预先关联变成实时关联 的案例中,使用 SPL 将原本只能预关联的手机账户查询变成实时关联,同时服务器数量从 6 台降为 1 台。这里充分利用了 SPL 的有序存储机制,一次性读取整个账户数据时可以有效减少硬盘时间(物理存储连续),再借助区分维表和事实表的外键实时关联技术使用单机就能完成实时关联查询,性能提升明显,硬件需求也降低了许多。

基于 SPL 的 HTAP,并不止于 T+0 和高性能。

数据计算(主要指 OLAP 场景)一向有两个难点,跑得慢(性能)和写得简单(开发效率)。前者我们说过了,后者使用 SPL 还可以获得很大改善。

现在我们处理数据还主要基于 SQL(其他高级语言太麻烦),但 SQL 仍然有很多不好描述的运算,这个原因主要是 SQL 的理论限制,这里我们不多说,感兴趣的小伙伴可以阅读这篇文章: 写着简单跑得又快的数据库语言 SPL

鉴于 SQL 在复杂计算方面的描述能力(开发效率)太差,SPL 并没有沿用 SQL 体系,而是基于新的理论重新设计了一套敏捷计算语法,基于这个语法再实施计算尤其复杂计算会更有优势,写法也更简单。

我们可以通过电商系统中常见的漏斗运算来感受一下 SPL 的简洁性。

SQL(oracle)实现:

SPL 实现:

oracle 的 SQL 写出来要三十多行,理解起来有相当的难度。而且这段代码和漏斗的步骤数量相关,每增加一步数就要再增加一段子查询。这种 SQL,写出来就已经不易,性能优化更是无从谈起。

相比之下,SPL 就简单得多,处理任意步骤数都是这段代码。

好了,说到这里各位看官应该了解了,SPL 并不是一个 HTAP 数据库,而是提供了一种新思路来满足 HTAP 的需要。HTAP 数据库很热,厂商的宣传口号很容易让我们陷入只能使用一种数据库来解决 HTAP 问题的藩篱而不自知。但只要我们再多想一点就会发现,HTAP 是一种合理的业务需求,满足它或许并不需要一种新数据库,而是能够解决问题的新技术和架构,而 SPL 提供了这种可能。

SPL下载地址:http://c.raqsoft.com.cn/article/1595816810031

SPL开源地址:https://github.com/SPLWare/esProc




飞利浦蓝牙耳机taph805缺点
缺点如下:1、重量重:飞利浦TAPH805重,会导致在长时间佩戴中感觉不舒适或疲劳。2、延时问题:在观看视频或玩游戏时,飞利浦TAPH805存在的音频延迟问题,导致声音和图像不完全同步。

木马win32.trojan.tap.bqgh 反复清楚 每次都是提示成功清除 但是再次...
你用的是什么杀毒软件?这个应该是顽固木马,先杀一片毒,修复一下系统,再用系统急救箱,是360用顽固木马查杀大全。当然,你有空,电脑里也没什么东西,可以重装系统。

铁拳专用词
- f |tap forward |轻点前 - F |hold forward |拉住前 - b |tap back |轻点后 - B |hold...- LFF |left foot forward |Hwoarang |左构(左脚在前) - RFF |right foot forward |Hwoarang ...- minor ch (mc) |确定反击 |防住对方的攻击后在其硬直时间内施加无法逃避的反击 - dodge & ...

...Serverless HTAP 数据库开始 | PingCAP DevCon 2022
在以"去发现,去挑战"为主题的 PingCAP DevCon 2022 主论坛上,PingCAP 联合创始人兼 CTO 黄东旭分享了"The Future of Database"主题演讲,探讨了云原生、开发者生产力与Serverless HTAP 数据库的意义。演讲内容涉及数据库“第一性原理”、开发者需求、Cloud 趋势、开发者生产力解放方式、抽象解决复杂性...

飞利浦SA4TP404 Tap(4GB)基本参数
飞利浦SA4TP404 Tap是一款专为音乐和视频爱好者设计的MP4播放器,具备4GB的存储容量,采用闪存式存储介质,能满足日常的多媒体需求。它支持多种视频格式,包括MP3、WAV、WMA、AAC、APE、FLAC和MIDI等,同时兼容WMV、RMVB、MPEG-4、H.264、DivX、XivD和Mkv等格式,为用户带来丰富的视听体验。操作上,SA4TP...

孔的标注。 M3.5x。6 ISO-H TAP GHRU 2.9 DRILL (2.900)THRU-(1...
先以 2.9mm的钻头钻孔,再以符合 6H规格的丝攻攻牙.

TiFlash 源码阅读(一) TiFlash 存储层概览
本系列文章聚焦于 TiFlash,读者需具备基本的 TiDB 知识。TiFlash 是 TiDB HTAP 模式的关键组件,作为 TiKV 的列存扩展,通过 Raft Learner 协议实现异步复制,并提供与 TiKV 相同的快照隔离支持。自 5.0 引入 MPP 后,TiDB 的实时分析场景下计算加速能力得到了增强。TiFlash 整体逻辑模块划分如下:通过...

...涉及到一个尺寸标注,大侠们帮忙解读下:M6x1 ISO -H TAP 沉孔...
就是ISO标准的14个螺纹孔M6有效深度12,用5的钻头一直钻到-1

·我们常说的软件的TAP版和CTP版到底指的什么呀?
美国舆论界评价:CTP是一场不可避免的技术革命,它必将取代照排技术,就象5年前电分机被照排机取代的情况...曝光,显影后的印版被送去打孔及打弯功能的K&F版材线上处理,可使用的版材为爱克发的SilverLith SDB

谁能说下思极有容数据库
思极有容数据库数据库具有HTAP部署模式,可以同时支撑大并发的联机交易和复杂的大SQL查询,可以通过分层按需横向准线性扩展,不断满足系统事务交易负载和复杂查询负载的增长需求。趋势价值分析1)分布式是趋势,但是技术门槛高,对研发,运维的水平要求高。2)思极有容数据库作为分布式解决方案对应用透明,研发...

尖扎县15114741784: Windows socket error:请求的名称有效并且在数据库中找到,但是它没有相关的正确的数据来被解析.什么意思 -
陆娴利比: Windows socket error:请求的名称有效并且在数据库中找到,但是它没有相关的正确的数据来被解析.什么意思 可以去猪八戒上找人帮您解决 希望对你有帮助

尖扎县15114741784: XP开机密码破解方法 -
陆娴利比: 如果用户名不是administrator的话 按ctrl+alt+delete 输入用户名 administrator 密码为空 直接进 然后改原来的 如果用户名是 administrator的话用有些安装盘改XP密码忘了,解决方法种种 奇招1:大...

尖扎县15114741784: foxmail接收邮件时提示:请求的名称有效并在数据库中找到,但是它没有相关的正确的数据来被解析.这是什 -
陆娴利比: 服务器存在故障,就是邮件服务器域名解析时出现问题,不是foxmail的问题.你可以在IE里登录下邮件系统试下先.

尖扎县15114741784: 使用FOXMAIL邮箱,突然提示:请求的名称有效并且在数据库中找到,但是它没有相关的正确的数据来被解,求解 -
陆娴利比: 检查下您的收发服务器是否输入错误,可以找邮箱服务商确认的,如果没有填错收发服务器,那就是你本地DNS解析不到域名导致,可以把收发服务器直接改成IP测试,改成IP可以的话就确定是你本地DNS问题了,找你们网管处理.

尖扎县15114741784: Foxmail请求的名称有效并且在数据库中找到,但是它没有相关的正确的数据来被解析 -
陆娴利比: 去掉发送邮件服务器地址中的stmp 去掉pop3服务器地址的pop 保留后面的就行

尖扎县15114741784: 破解机房管理系统!! -
陆娴利比: 首先,机房管理系统是用delphi5.0写的,大家看看,多么旧的版本啊,至少是2002年才投入使用的,用的是sql数据库,当年的98系统,这个管理系统还是有些用处的,毕竟98的机制不完善,不过也难不住我...

尖扎县15114741784: 企业邮箱错误信息:请求的名称有效并且在数据库中找到,但是它没有相关的正确的数据来被解析. -
陆娴利比: 本地备用DNS有问题1.设置本地连接的备用DNS为8.8.8.8;2.ping 下smtp服务器是否能ping出来不行就重启路由器.

尖扎县15114741784: ssh框架无法把一个list类型属性持久化成一张表,如何使用annotation注解把这个属性变成数据库中的表 -
陆娴利比: 可以吧,你放session不就行了.要时候再拿出来,彻底不要时候清空下缓存...莫非是我理解错楼主意思了?HibernateUtils和HibernateSessionFactory得到session 对象 ArrayList list = new ArrayList(); list.add();//你放各种属性 Session session = HibernateUtils.getSession();//得到session session.save(new ArrayList()); hibernate是一种对象关系映框架,可以把JAVA对象保存到关系型数据库中,实现持久化.

尖扎县15114741784: 我最近在测试某个厂商的数据库审计系统,发现该厂商没办法解析出客户端访问数据库时,客户端的操作系统主机名、用户名、访问进程名等信息.厂商给我的答复说这部分是加密的,这个到底是真是假?是不是忽悠我的啊?
陆娴利比: 这要看是什么样的数据库类型,对于加密的数据库,有些还是可以审计出客户端的操作系统主机名、用户名、访问进程名、数据库登录者等信息,具体可访问www.ankki.com,寻找你想要的答案.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网