京公网安备 11010802034615号
经营许可证编号:京B2-20210330
什么样的SQL引擎能挑战运营、报表、分析三位一体化?
近几十年,企业级的IT架构最常见的是把业务运营和分析分开。业务运营系统包括ERP、CRM、安全事件管理、和企业自己开发的交易系统。 这些的核心特质是和客户打交道,最重要,对可靠性要求也最高。以呼叫中心的CRM为例:手机用户打10086查询某笔费用,办理国际漫游业务等,都需要重要的业务数据。为了避免BI、报表等干扰业务运营,这些分析型任务往往放在另外的系统里,这就需要将数据从一个或多个运营系统,复制到Data Mart、Data Lake或者数据仓库里。
早在2005年,Google的Alon Halevy和加州大学伯克利分校的Michael Franklin提出,来自于企业、政府机关、图书馆、智能家居等机构依赖于大量分散而相互关联的数据源,而缺乏一种方便、集成、有序的办法来管理他们的“数据空间”,在搜索和查询、规则的实施,一致性和约束,找寻关联、可用性和灾后恢复等等方面有诸多挑战。
Hadoop凭借优秀的海量存储能力和适应于业务增长的线性拓展性,赢得大量的业界部署。越来越多用户开始地尝试在业务运营平台上部署事务型引擎,比如大家熟知的12306订票系统就采用了Geode。刚刚结束的2016年3月的Apache Geode Summit所展示的高并发和不可出错的事务型场景,包括Credit Suisse的证券交易和Southwest Airline的订票系统,让开发者更有信心在核心运营业务系统里实现运营、分析和报表一体化。
新数据类型的出现,让这一进程充满挑战。在大数据发展初期,很多应用,比如线上媒体,简单到仅需要按ID查询,产生相应网页,对事务处理和一致性的要求几乎没有。Key-Value就比关系型数据库实用多了。随着社交媒体、移动设备、物联网的爆炸式发展,新颖的数据类型和数据模型逐渐诞生,比如互动型和观察型。 社交媒体产生的是典型的互动型数据,围绕某话题展开,记录用户的活动、互动和行为,包括文字内容,语音,视频和图像等等;观察型数据常常由设备产生,提供大量的记录,可用于重构现场,记录用户行为等一系列新应用场景。目前半结构型和非结构型数据大致有5ZB,是结构型数据的1.4倍。非结构型数据不仅包括多种数据类型,而且内容意义(WORD文档里的文字,视频里的帧等)和所处的上下文关系很大。 XML、JSON等轻量级数据交换格式的半结构型数据,因为结构可变,也不能简单粗暴地用传统的关系型数据库存储和分析。
这些趋势对数据库提出了大量挑战,也带来重大机遇,2014年Gartner明确提出了用大数据运营和分析的一体化-Hybrid Transactional and Analytical Processing (HTAP)。其首要任务是在确保便宜且能够线性拓展的前提下,达到符合用户实际情况的原子性、一致性和并发性,并提供一系列机制来灵活运用各种结构型、半结构型和非结构型数据,包括社交媒体的互动型和物联网的时序数据。
通过多语言编程来实现的实例和问题
阿里为代表的互联网企业代表了一个重要的技术流派–Martin Fowler等提出的PolyGlot Programming多语言编程。用最适合的语言完成相应的任务,编写相应代码。 比如,Redis处理用户会话,关系型数据库管理财务和报表,Riak负责购物车,Neo4J负责推荐系统,MongoDB负责产品,Cassandra负责分析和用户行为日志。这一做法的挑战也是巨大的,学习新的API和语言并不复杂,第一步是如何调校好不同的存储引擎,解决好分区扩展、定制自己的数据结构、索引管理、将应用和存储去耦合等。接着还需要解决高可用、灾备恢复、多数据中心异地双活、在线升级等,头疼一个接一个。同时,会有太多的数据移动,从一个结构到另一个,以便满足运营、报表和分析等不同任务流的需要。
就拓展而言: 当每日订单二三十万以内,问题不大,但一旦上升到百万级别万左右,核心数据库的TPS可能承压,常见的处理方式是分库分表,Sharding,按业务和TPS比例垂直切分,有时会形成超过10个集群,而且需要自己解决sharding, 重写代码。为了保证对应用透明,需要增加Data Access Layer等中间件。即使这样,升级、回滚、可用性等仍需要耗费大量精力权衡各种影响。 数据一致性、容灾机制、维护难度等等还需要一系列开发解决,多数据中心异地双活、全面的事务保障机制等高级机制甚至自行无法实现。
前几年的互联网应用,抽象出来的数据对象之间的关联很小,比如博客、文章、电商客户,完全可以独立存储,一个表写满再写下一个,因此分表分库是个不错的方案。这几年统计、搜索范围要求更大,需结合的内外部额外数据更多,行为分析、推荐系统、风控、预警等多维度应用越来越多,数据对象之间关联越来越重要,数据模型也越来越复杂。许多开发团队逐渐意识到,这TMD不是成了开发数据库了吗?
因此,还不如一开始就采用一个运营和分析相结合的一体化数据库,让它在处理各种数据组织层面的事情,比如利用不同的数据模型的强处,如Key-value、文档存储、列存储和关系型结构等,透明处理分区和扩展,确保跨数据中心、跨表、跨区的一致性、灾备等。因此,我们开始看到重新崛起的SQL和关系型数据库功能,和NoSQL功能,达到强强结合。
基于SQL的新型一体化技术
传统的关系型数据库虽然在解决大数据问题上力不从心,而SQL却是经过几十年考验的成熟技术。 使用SQL来访问尽可能多的存储系统,包括Hive, HBase, Cassandra,云等,能带来很多好处。
途牛采用基于SQL的分布式数据库,而不是自行搭建复杂的NoSQL平台,就是一个聪明的选择:旅游产品的属性多变,自由行的属性和组团游不同,比如无需当地导游相关的项目,因此需支持列可变的半结构数据以及list, set, hash等类型。所需的数据库操作比较简单:许多任务由简单的Get/Put结合实时价格计算即可完成,但必须跨多个系统进行聚合和实时查询,这也是SQL的优点。 因此,找一个基于SQL的技术,并行支持多种存储系统,足够的并发数,一定的数据一致性,拓展性价比高,能随着订单数、并发度、数据量的增大,非常方便地扩容,保证系统性能在安全区内,就可以满足目前业务需求,并享受x86和线性拓展的成本优势,而且无需考虑分表分库、主从模式,数据一致性、多集群事务处理等麻烦。
架构设计上,可以将查询和存储分开,NoSQL的成功证明了不同的应用应采用不同的数据结构和模型,因此就让数据呆在他们该呆的地方好了,比如Key-value存储,内存存储,列存储,全文搜索系统,图形数据库等等。可以选择一个优秀的查询引擎在同一套数据上运行事务、实时报表和BI任务流,而无需搬动、转换、复制或考验耐心。在多种真实任务流并存时,比如大并发、事务型的短增删改查、随机复杂的长查询、和定期批量报表并存的条件下,无论用户场景需要采用哪种数据模型和存储结构,这一查询引擎都应该能够有相应的机制,来提供尽可能好的性能,达到安全、可靠性、可用性、灾备、线性拓展等等大型数据库必备要求。来自Facebook的分布式内存SQL引擎PrestoDB,MapR支持SQL和NoSQL的Drill,和以惠普大型商用SQL引擎为核心的Trafodion都是这一新型查询引擎的领导者。
SQL引擎处理各种挑战的不同方式
这样的SQL引擎的成熟度非常重要,必须有10年左右的积累,提供丰富的语句,能兼顾运营型和分析型任务流,达到皆大欢喜的性能。运营型任务流数据量很大,高并发,要求响应时间在一秒之内,而分析型任务流的响应时间在秒到分钟级,并发度相对低,需要访问运营、历史和第三方数据。要支持运营型、批量报表或分析型任务流的任一种,已经相当困难了,比如NonStop SQL/MX擅长OLTP或运营型任务流, Teradata 和HP Neoview擅长BI和数据仓库, Vertica, Aster Data, Netezza, Greenplum等以分析为主。要用一个查询引擎来服务所有这些任务流意味着需要满足一大堆需求。
具体来说,查询引擎必须能分辨需要全表扫描还是单行访问。假设是访问单行,即使数据结构没有提供主键,也应该有办法缩小扫描范围,避免全表扫描。查询引擎需要掌握表的主键结构,以便判断是按整个主键还是主键的一部分来匹配,如果是整个主键,则是单行访问,可选用最小开销的机制,得到结果。 按主键前面的列、还是后面的列?大概涉及多少行,这些数据分布于哪些节点,在各硬盘、节点上如何分布?都将决定它采用何种方式获得最佳的访问性能。
运营型任务流无需每次处理大量的数据,因此产生执行计划时,无需过多考虑数据倾斜,事先做好分区的主键就行了。但对于BI和分析型任务,数据倾斜就是一个重要因素。而并行度也需要考虑到数据倾斜,比如某些节点处理某个大数据集的query时,需要其他节点等待,而影响整个集群的任务流。
不同的任务流在JOIN类型、多层级管线的数据流等方面也有很大区别。需要视情况使用nested join,merge join和其他join类型。 对于每种备选JOIN不能仅仅按预估成本来选择,还需要结合在悲观情况下的性能恶化程度。 在处理大数据集的BI和分析时,对内存压力的检测也很重要,以便及时主动释放至磁盘,而对运营型查询往往无需处理大量数据,则可采取更简化的检测。
内部数据流方式也截然不同。 对于大数据集的BI和分析类场景,应由多个进程和运算子并行进行扫描、JOIN和Aggregate,让数据以Pipeline形式流动,来达到高性能。而事务型则应采取截然不同的数据流方式,来获得最短的路径,快进快出。
这种引擎最大的挑战在于处理“混合数据流”。实验室的性能报告都将失去意义,引擎直面真实、不可预知、不可专门调优的事务型和复杂查询相混合。这就需要专门的任务流管理能力。 它将所有查询按数据源、用户、角色等分类,允许用户将某些任务流赋予更高的优先权,以便获得更多的计算、内存和I/O资源。 同时,在存储引擎上也需要相应优化—大查询可以自动让路给短增删查改事务,可以被暂停和继续。
如前文所述,对不同存储引擎的支持尤为重要。 运营型任务需要大量单行增删改,适合行存储,而BI和分析型任务含有大数据集的聚集,更适合列存储。写操作较多的任务适合逐行写。同样的数据用不同的方式访问, 性能会大打折扣。HBase可以满足低延迟,而列存储的ORC文件或Parquet更适合BI和分析。
开源的Presto,Trafodion和Drill等优秀的引擎也受到了普遍关注。他们的共性在于,无需移动数据,可以访问不同数据源,如Hive、ORC、关系型数据库和HBase等,并在一秒内到几分钟内得到结果,很好地兼顾Ad-hoc即席查询和大表扫描或aggregate,更能在实时发生的业务数据上进行分析,比如及时捕捉用户行为,推荐内容,即时风控等。
不过多数引擎主要用于分析,比如Presto和Drill, 在兼容各种存储类型上下了大力气,涵盖Hadoop, Cassandra, MapR, MongoDB等等,而对业务运营的支持相对薄弱。来自HP的开源Trafodion在OLTP继承了大型机的引擎,更胜任运营、分析和报表相结合的场景。该项目在国内的落地比较好,有上海易鲸捷等专业团队支持。
结合内存型数据库,一体化引擎的前景相当激发想象力。Oracle, SAP Hana, Vertica统治的金融、电信IT架构,已经逐渐被新技术替代。前文提到的内存式Apache Geode商业版Gemfire常用于证券交易系统,经过10多年,在事务处理上已经相当成熟,能确保高并发交易处理、合规监察、交割保障等,并被中国12306铁路票务系统所采纳。 结合Trafodion这样的一体化数据库引擎,能享受到Hadoop便宜的拓展性,并确保持久化的安全、高可用、异地双活,全程ACID保障等特点。仅用一个SQL引擎,操作同一套内存和Hadoop系统,无需移动数据和多套系统,即能满足监管、合规、交割安全、个股分析,批量报表、BI等各种监管和创新。
数据分析咨询请扫描二维码
若不方便扫码,搜微信号:CDAshujufenxi
在 “神经网络与卡尔曼滤波融合” 的理论基础上,Python 凭借其丰富的科学计算库(NumPy、FilterPy)、深度学习框架(PyTorch、T ...
2025-10-23在工业控制、自动驾驶、机器人导航、气象预测等领域,“状态估计” 是核心任务 —— 即从含噪声的观测数据中,精准推断系统的真 ...
2025-10-23在数据分析全流程中,“数据清洗” 恰似烹饪前的食材处理:若食材(数据)腐烂变质、混杂异物(脏数据),即便拥有精湛的烹饪技 ...
2025-10-23在人工智能领域,“大模型” 已成为近年来的热点标签:从参数超 1750 亿的 GPT-3,到万亿级参数的 PaLM,再到多模态大模型 GPT-4 ...
2025-10-22在 MySQL 数据库的日常运维与开发中,“更新数据是否会影响读数据” 是一个高频疑问。这个问题的答案并非简单的 “是” 或 “否 ...
2025-10-22在企业数据分析中,“数据孤岛” 是制约分析深度的核心瓶颈 —— 用户数据散落在注册系统、APP 日志、客服记录中,订单数据分散 ...
2025-10-22在神经网络设计中,“隐藏层个数” 是决定模型能力的关键参数 —— 太少会导致 “欠拟合”(模型无法捕捉复杂数据规律,如用单隐 ...
2025-10-21在特征工程流程中,“单变量筛选” 是承上启下的关键步骤 —— 它通过分析单个特征与目标变量的关联强度,剔除无意义、冗余的特 ...
2025-10-21在数据分析全流程中,“数据读取” 常被误解为 “简单的文件打开”—— 双击 Excel、执行基础 SQL 查询即可完成。但对 CDA(Cert ...
2025-10-21在实际业务数据分析中,我们遇到的大多数数据并非理想的正态分布 —— 电商平台的用户消费金额(少数用户单次消费上万元,多数集 ...
2025-10-20在数字化交互中,用户的每一次操作 —— 从电商平台的 “浏览商品→加入购物车→查看评价→放弃下单”,到内容 APP 的 “点击短 ...
2025-10-20在数据分析的全流程中,“数据采集” 是最基础也最关键的环节 —— 如同烹饪前需备好新鲜食材,若采集的数据不完整、不准确或不 ...
2025-10-20在数据成为新时代“石油”的今天,几乎每个职场人都在焦虑: “为什么别人能用数据驱动决策、升职加薪,而我面对Excel表格却无从 ...
2025-10-18数据清洗是 “数据价值挖掘的前置关卡”—— 其核心目标是 “去除噪声、修正错误、规范格式”,但前提是不破坏数据的真实业务含 ...
2025-10-17在数据汇总分析中,透视表凭借灵活的字段重组能力成为核心工具,但原始透视表仅能呈现数值结果,缺乏对数据背景、异常原因或业务 ...
2025-10-17在企业管理中,“凭经验定策略” 的传统模式正逐渐失效 —— 金融机构靠 “研究员主观判断” 选股可能错失收益,电商靠 “运营拍 ...
2025-10-17在数据库日常操作中,INSERT INTO SELECT是实现 “批量数据迁移” 的核心 SQL 语句 —— 它能直接将一个表(或查询结果集)的数 ...
2025-10-16在机器学习建模中,“参数” 是决定模型效果的关键变量 —— 无论是线性回归的系数、随机森林的树深度,还是神经网络的权重,这 ...
2025-10-16在数字化浪潮中,“数据” 已从 “辅助决策的工具” 升级为 “驱动业务的核心资产”—— 电商平台靠用户行为数据优化推荐算法, ...
2025-10-16在大模型从实验室走向生产环境的过程中,“稳定性” 是决定其能否实用的关键 —— 一个在单轮测试中表现优异的模型,若在高并发 ...
2025-10-15