阿里云SelectDB:开启实时数仓新时代
阿里云 SelectDB 作为云原生实时数仓领域的佼佼者,凭借其基于 Apache Doris 内核的稳定基础和云原生改造的创新架构,展现出诸多核心优势。其存算分离架构实现了存储与计算资源的独立弹性伸缩,大幅降低成本的同时,还能保障负载隔离。在数据处理上,支持丰富数据源的快速导入与同步,提供灵活且高效的数据更新策略。查询性能更是卓越,无论是宽表分析、高并发点查还是复杂的多表关联查询,都能轻松应对,
一、引言
在当今大数据时代,数据如同企业的 “石油”,蕴含着巨大的价值。随着数据量呈指数级增长,企业对于实时数据分析的需求愈发迫切。实时数据分析能够帮助企业及时捕捉市场动态,快速做出决策,从而在激烈的市场竞争中占据优势。无论是电商企业需要实时分析用户购买行为以进行精准营销,还是金融机构需要实时监测风险以保障资金安全,实时数据分析都发挥着关键作用。
阿里云 SelectDB 作为一款专为实时数据分析打造的云原生数仓产品,应运而生。它基于成熟的 Apache Doris 内核,并进行了云原生改造,具备卓越的性能和强大的功能,在实时数仓领域占据着关键地位 。阿里云 SelectDB 不仅能处理海量数据,还能实现秒级甚至毫秒级的查询响应,满足企业对实时性的严格要求。同时,它提供了简单易用的操作界面和丰富的生态集成,大大降低了企业使用和运维的门槛,帮助企业将更多精力投入到数据分析和业务创新中,真正释放数据的价值,为企业的数字化转型和持续发展提供坚实的技术支持。
二、SelectDB 是什么
SelectDB 是基于 Apache Doris 构建的商业化云原生实时数仓产品,而 Apache Doris 是一款开源的、基于 MPP(大规模并行处理)架构的分布式 OLAP(联机分析处理)数据库,在实时数仓领域拥有成熟且稳定的内核 。经过多年的发展与社区的积极贡献,Apache Doris 被众多企业用于生产环境,涵盖互联网、金融、制造业等多个行业,其稳定性和性能得到了充分验证。
阿里云 SelectDB 不仅继承了 Apache Doris 的诸多优势,如高效的查询性能、丰富的数据分析函数、简单易用的 SQL 语法等,还进行了云原生改造,以更好地适应云计算环境。它具备存算分离的架构,计算资源和存储资源可以独立弹性扩展,用户无需担心资源瓶颈问题,能根据业务量的波动灵活调整资源配置,有效降低成本。同时,SelectDB 是全托管服务,用户无需关注底层基础设施的搭建、运维以及软件的安装、升级等繁琐工作,阿里云会负责保障服务的稳定运行,极大地降低了使用门槛和运维成本 。而且 SelectDB 与 Apache Doris 100% 兼容,这意味着基于 Apache Doris 开发的应用和脚本可以无缝迁移到阿里云 SelectDB 上,无需进行大量的代码修改,保护了企业的前期技术投入,方便企业在云环境中快速构建和部署实时数仓解决方案 。
三、核心特性与技术优势
(一)存算分离架构
阿里云 SelectDB 采用云原生存算分离架构,将计算资源和存储资源分离,全量数据存储于价格低廉的对象存储 OSS 中 。这种架构带来了多方面的显著优势。在成本控制上,相比传统存算一体架构,SelectDB 的单位存储成本可降低 90% 以上,经测算,使用云数据库 SelectDB 版所需成本仅是企业自建部署成本的 1/5 - 1/2 。在资源弹性伸缩方面,存储和计算可以独立按需扩缩容。当企业业务量突然增加,面临大量数据查询请求时,可快速扩展计算资源,提升查询处理能力;而在业务低谷期,又能及时缩减计算资源,避免资源浪费,降低成本。同时,SelectDB 支持计算集群弹性伸缩,还能根据工作负载的高低峰运行时段、作业执行规律,灵活配置不同规模的计算资源,在集群空置时,还支持集群自动挂起,以进一步降低资源成本 。
在负载隔离上,为满足用户对同一份数据上的分析负载隔离的需求,例如导入的工作负载与查询的负载进行隔离,Adhoc 的大查询负载和在线点查询的负载间相互隔离,避免不同负载间相互抢占资源,阿里云 SelectDB 提供了同一个实例多个物理计算集群(Multi-Cluster)的特性 。用户可按需创建多个计算集群但共享同一份数据,同时多集群之间的资源是物理隔离的,能更好地保证隔离性。以某电商企业为例,在促销活动期间,数据导入量剧增,同时用户查询商品信息、订单状态等操作也更为频繁。通过 SelectDB 的存算分离架构和多计算集群特性,该企业将数据导入任务分配到一个独立的计算集群,将查询任务分配到其他集群,实现了写入与读取隔离,避免了因写入压力影响查询服务的性能,保障了业务的稳定运行。
(二)数据导入与同步
SelectDB 具有良好的开放性和生态兼容性,支持各种数据源,包括流式和批量的大数据链路加速导入 。其支持的数据类型和数据源非常丰富,如 CSV、MySQL、SQLServer、Oracle 等数据源,都能够进行数据类型的转换和导入。在流式数据导入方面,SelectDB 与 Flink、Kafka 等常见链路有完善的对接方式。例如,某互联网公司通过 Kafka 收集用户的实时行为数据,如点击、浏览、购买等操作,然后利用 SelectDB 与 Kafka 的对接,将这些实时数据快速导入到数仓中,实现对用户行为的实时分析,以便及时调整营销策略 。
对于大数据体系如 Hive,Hadoop,MaxCompute 等,SelectDB 支持通过 DataWorks 和 DataX 等平台及工具,进行批量离线数据的导入 。假设一家金融企业拥有大量历史交易数据存储在 Hive 中,该企业借助 DataWorks 和 DataX 工具,将 Hive 中的数据批量导入到 SelectDB,为后续的风险评估、业务报表生成等提供数据支持 。此外,对于数据湖的数据,为了进行数据湖的联邦查询和湖仓统一管理,SelectDB 与 Iceberg、Hudi 有良好的兼容性 。这使得在数据湖层面可以进行很好的数据分析,在业务层面可以通过统一的 SelectDB 访问层向上层业务提供数据湖和数仓的统一服务接口,方便企业对不同来源的数据进行整合分析。
(三)数据更新策略
对于 TP 库的数据,分析时业务对数据的唯一性要求比较高,SelectDB 提供了主键(Unique)模型,可以保证数据从 TP 到数仓中的数据一致性,支持全列和部分列的更新 。同时基于业务场景,提供了两种更新方式。MoR (Merge On Read) 即读时合并,这种方式适用于人群画像标签导入等涉及低频、大批量数据更新的场景 。以人群画像为例,其中包含很多标签,离线标签通过 T+1 或小时级别的计算进行批量导入。在 MOR 方式下,数据能够以更大的吞吐量批量写入,吞吐量可达 100 万每秒 。
MoW (Merge On Write) 即写时合并,适用于实时分析场景,满足极致的时效性和实时性要求 。比如订单状态变更,需要进行实时更新,这种方式面向高频、小批量更新,在数据进仓时同步更新原有数据,消耗更多 IO 资源,对 IOPS 要求较高 。在这种模式下,数据写入过程中事务性保证完成一致性处理,查询时直接获取一致性的数据结果,减少查询时数据一致性处理,查询性能相比批量导入方式可提升 5 - 10 倍 。
对于聚合场景,SelectDB 提供了 Agg 聚合引擎类型。此类业务查询多是进行聚合结算结果的查询,如用户积分的写入和更新,新增积分记录会进行存量和新增计费的聚合计算 。基于聚合引擎和聚合函数就可以完成增量写入过程的的聚合更新。对于聚合表引擎中进行替换更新的列,也支持通过 replace_if_not_null 方式实现部分列的更新操作,满足企业复杂业务场景下的数据更新需求。
(四)查询性能
在宽表分析场景中,SelectDB 表现卓越,其在业界常用的 ClickBench 测试中荣登榜首 。ClickBench 测试涵盖数据类型多样、覆盖了即席查询和统计报表等典型场景,能真实反映数据库在生产环境中的性能 。在该测试中,SelectDB 在全部 43 条 SQL 中,执行耗时均在 1s 以内,呈现出极其稳定的性能表现,无论是简单的 Count (*) 去重计数、基于 ID 的点查询、关键词检索匹配或是分组聚合排序,各类查询场景下 SelectDB 的 SQL 执行效率均位居榜单前列,已大幅超越 ClickHouse、Snowflake、BigQuery 等国际知名数据库项目 。这充分证明了 SelectDB 在宽表分析场景下的数据分析性能处于业界领先位置,能为企业的人群画像、BI 报表等业务提供高效的数据支持。
在高并发点查场景中,SelectDB 同样表现出色。使用 YCSB 测试集,在 10 列测试中,主键高并发点查能力提升 20 倍;在 100 列测试中,主键高并发点查吞吐是某云产品 H 的 2.5 倍,非主键高并发点查吞吐是某云产品 H 的 11 倍 。其技术原理主要得益于多方面。在查询优化器上,SelectDB 采取更先进的 Cascades 框架、基于丰富的统计信息,实现了更智能化的自适应调优,在绝大多数场景无需任何调优和 SQL 改写即可实现极致的查询性能,同时对复杂 SQL 支持得更加完备,可完整支持 TPC-DS 全部 99 个 SQL 。在执行模型上,采用 MPP 并行执行模型,可以充分利用节点间和节点内的并行计算能力,同时引入了自适应的 Pipeline 执行模型,由数据驱动控制流变化、减少了线程频繁创建和销毁带来的开销,实现了阻塞操作的异步化和资源池化以及更加系统资源的灵活分配,提升了 SelectDB 对于 CPU 多机多核的资源利用率,在混合负载场景下获得更高效的执行效率 。此外,SelectDB 实现了全面向量化,包括查询、导入、Schema Change、Compaction、数据导出、UDF 等,通过向量化减少虚函数调用与 Cache Miss、进一步利用 SIMD 指令,充分发挥现代 CPU 的计算能力,还支持前缀索引、ZoneMap、Bitmap、Bloom Filter、倒排索引等多种索引结构进行查询时数据剪枝优化,引入行列混合存储以及行级 Cache,结合点查询短路径优化,最终实现点查询并发能力大幅提升 。
(五)融合统一的分析体验
阿里云 SelectDB 可以提供融合统一的解决方案,满足用户在多种典型的数据处理与分析场景的需求,在一套系统中即可完成点查询、报表分析、即席查询、ETL/ELT 等多种查询负载 。在 ETL/ELT 场景性能表现优异,在相同资源下,其速度是 Hive 的 54 倍、Spark 的 12 倍 。
在联邦查询方面,其 Multi-Catalog 功能支持多种异构数据源的元数据自动映射与同步,目前已经支持 Hive、Hudi、Iceberg、DLF、MaxCompute、Elasticsearch、Trino、ClickHouse、Oceanbase 等数十种数据源,兼容世面上主流的开放湖仓格式和 Metastore,实现了便捷的元数据管理和数据打通,在此基础上可实现联邦查询 。例如,某大型企业拥有多个数据源,包括 Hive 中的历史数据、Elasticsearch 中的日志数据等,通过 SelectDB 的联邦查询能力,可直接在 SelectDB 中对这些不同数据源的数据进行统一查询分析,无需繁琐的数据迁移和转换,简化了系统搭建和运维过程,为用户提供更加统一的使用体验 。
SelectDB 还支持 Array、JSON、Map 等复合数据类型和动态 Schema 特性,简化了结构化数据写入流程,降低了写入难度 。同时提供倒排索引、NGram BloomFilter 、BKD 索引等丰富的索引结构,可实现对结构化 / 半结构化数据的高效分析和处理,让企业能够一站式处理和分析各种类型的数据,提升数据分析的效率和灵活性。
四、应用场景解析
(一)实时报表分析
在当今快节奏的商业环境中,企业需要及时掌握业务运营状况,实时报表分析因此成为关键环节。实时报表分析要求系统能够实时更新数据,并在用户查询时快速返回准确结果 。以电商企业为例,在促销活动期间,企业管理者需要实时了解商品销售情况,如销售额、销售量、客单价等指标,以便及时调整营销策略 。阿里云 SelectDB 在实时报表分析场景中表现出色。它具备高吞吐数据写入及实时更新能力,能够快速将销售数据写入数仓,并支持实时更新订单状态等业务数据,保证数据的及时性和准确性 。在查询性能方面,SelectDB 采用先进的查询优化器和执行模型,能实现秒级甚至毫秒级的查询响应。例如,某电商企业使用 SelectDB 构建实时报表分析系统,在大促期间,面对海量的销售数据,其报表查询响应时间从原来的平均数十秒缩短至 1 秒以内,让企业管理者能够实时、准确地掌握销售动态,及时做出决策,极大地提升了运营效率 。
(二)用户行为分析
随着互联网的发展,用户行为数据呈爆炸式增长,对这些数据进行深入分析,能够帮助企业了解用户需求、优化产品体验、实现精准营销 。用户行为分析场景通常需要处理海量数据,并且面临高并发查询的挑战 。以在线视频平台为例,每天会产生海量的用户观看行为数据,包括用户观看的视频内容、观看时长、暂停次数、跳转次数等 。平台需要对这些数据进行实时分析,以了解用户的兴趣偏好,为用户推荐更符合其口味的视频内容,同时也能帮助广告商实现精准投放 。阿里云 SelectDB 凭借其强大的性能,能够很好地应对用户行为分析场景的挑战。在数据处理方面,它支持从多种数据源高速导入数据,包括 Kafka 等流式数据源,能实时采集用户行为数据并快速导入数仓 。在高并发查询处理上,SelectDB 通过向量化执行、自适应 Pipeline 执行模型以及丰富的索引结构等技术,实现了万级 QPS 高并发点查能力。例如,某在线视频平台使用 SelectDB 进行用户行为分析,在高并发查询场景下,能够快速响应用户查询请求,查询响应时间平均在毫秒级,不仅能够快速为用户提供个性化推荐,还能支持广告商实时查询广告投放效果数据,助力平台提升用户粘性和广告收益 。
(三)日志检索分析
日志数据是系统运行的记录,包含了丰富的信息,如系统错误信息、用户操作记录、网络请求日志等 。对日志数据进行检索分析,有助于企业进行故障排查、安全监控和业务优化 。日志数据具有数据量大、格式多样、实时性要求高等特点,给分析带来了诸多挑战 。以金融企业的交易系统为例,每天会产生海量的交易日志,这些日志记录了每一笔交易的详细信息,包括交易时间、交易金额、交易双方信息等 。当出现交易异常时,需要能够快速从海量日志中检索出相关记录,以便及时进行处理,保障交易安全 。阿里云 SelectDB 针对日志检索分析场景进行了优化,具备强大的文本检索和日志分析能力。它支持倒排索引,能够快速精准定位匹配的数据,结合时序存储模型特点和 TopN 查询的动态剪枝算法,实现了高效的日志检索 。同时,SelectDB 对灵活 Schema 的日志数据提供了多方面支持,对于顶层字段的少量变化,可以通过 LightSchemaChange 发起 ADD/DROP COLUMN 增加 / 删除列、ADD/DROP INDEX 增加 / 删除索引,完成秒级 Schema 变更;对于扩展字段,提供了原生半结构化数据类型 VARIANT,支持写入任意 JSON 数据 。例如,某金融企业采用 SelectDB 构建日志检索分析平台,在处理海量交易日志时,写入性能相比传统方案提升了 4.2 倍,查询性能提升了 2.3 倍,能够快速定位异常交易日志,大大提高了故障排查效率,保障了交易系统的稳定运行 。
(四)湖仓一体分析
湖仓一体是一种融合数据湖和数据仓库优势的架构理念,旨在提供统一的数据管理和分析平台,让企业能够在一个系统中处理结构化、半结构化和非结构化数据 。在湖仓一体场景中,需要实现对不同数据源的数据进行联邦查询和统一管理 。以制造业企业为例,企业内部可能存在多个数据源,包括生产系统中的结构化数据、设备日志等半结构化数据以及来自外部的非结构化市场数据等 。企业需要将这些数据进行整合分析,以优化生产流程、预测设备故障、制定市场策略等 。阿里云 SelectDB 的 Multi-Catalog 功能支持多种异构数据源的元数据自动映射与同步,目前已经支持 Hive、Hudi、Iceberg、DLF、MaxCompute、Elasticsearch、Trino、ClickHouse、Oceanbase 等数十种数据源,兼容世面上主流的开放湖仓格式和 Metastore,实现了便捷的元数据管理和数据打通,在此基础上可实现联邦查询 。例如,某制造业企业使用 SelectDB 构建湖仓一体分析平台,通过 SelectDB 可以直接对 Hive 中的生产数据、Elasticsearch 中的设备日志数据进行统一查询分析,无需进行复杂的数据迁移和转换,数据导入效率提升了 3 - 6 倍,查询分析性能提升了 10 - 18 倍,实时性提升至 5 秒内,帮助企业实现了数据的高效利用,提升了决策的科学性和及时性 。
五、使用教程与实践指南
(一)创建 SelectDB 实例
- 账号准备:
-
- 首先,确保你拥有阿里云账号(主账号) 。若尚未注册,前往阿里云官网完成注册流程。若已注册且开通了应用实时监控服务 ARMS(Application Real-Time Monitoring Service),可直接进入下一步;若未开通 ARMS,需按照相关指引开通 ARMS 。
-
- 出于安全考虑,强烈建议创建 RAM 用户。阿里云账号(主账号)权限最高,多用户共享主账号密码或访问密钥(AccessKey)存在安全风险 。创建 RAM 用户后,按需为其分配最小权限,如创建 SelectDB 实例时,RAM 用户账号必须拥有管理 SelectDB 的权限 AliyunSelectDBFullAccess,具体授权操作可参考阿里云官方文档中为 RAM 用户授权的相关内容 。
- 创建实例步骤:
-
- 访问按量付费页面,进入云数据库 SelectDB 版(按量付费)售卖页面 。若需创建包年包月实例,可通过对应入口进入相关创建页面。
-
- 选择地域和可用区:根据业务需求和地理位置,慎重选择地域和可用区 。合理的选择有助于提高访问 SelectDB 实例的速度,业务地理位置与实例所在地域距离越短,访问速度越快 。需注意,SelectDB 实例创建后暂不支持更改地域。若业务部署在阿里云上,建议选择与业务相同的地域。
-
- 设置专有网络(VPC):专有网络是云上独有的虚拟网络,属于地域级别的资源,无法跨越地域,但涵盖所属地域的所有可用区 。若账号下没有可用 VPC,需前往专有网络管理控制台创建 。SelectDB 实例创建后不支持变更 VPC,所以设置时需谨慎,若业务在阿里云上,建议选择与业务相同地域的 VPC。
-
- 设置网络交换机:交换机(vSwitch)是组成专有网络的基础网络设备,用于连接不同的云资源实例 。若没有可用的交换机,需前往专有网络管理控制台创建。
-
- 选择内核版本:售卖页的内核版本分为稳定版本和最新版本,页面默认选择稳定版本 。若无特殊需求,建议保持默认选择。SelectDB 内核版本与 Apache Doris 版本存在对应关系,详细信息可查看内核发布记录。
-
- 配置计算资源:计算资源的性能和费用与计算资源的规格呈线性相关 。合理选择计算资源可降低成本并保障业务稳定性。售卖页面默认配置为 8 核 32GB 。新建实例时,系统将默认创建一个按量付费的集群,此处配置的计算资源即为该默认集群的计算资源。
-
- 设置缓存空间:缓存空间用于存储热数据,可提高 SelectDB 的读写速度,其上下限受计算资源约束 。选择不同的计算资源时,缓存空间的上下限不同。新建实例时,此处设置的缓存空间为默认集群的缓存空间。
-
- 设置存储空间(按量付费场景无需设置):在创建按量付费实例时,此参数无需设置 。存储空间用于存储全量数据,计量系统每小时统计实例存储的适用量,并根据实际使用量按小时计费,从账户中扣除相应费用。
-
- (可选)选择资源组:资源组(Resource Group)可帮助解决单个阿里云账号内的资源分组和授权管理的复杂性问题,是在阿里云账号下进行资源分组管理的一种机制 。若有相关需求,可根据实际情况选择资源组,更多资源组信息可查看什么是资源组 。
-
- (可选)设置标签:标签可从不同维度对具有相同特征的云资源进行分类、搜索和聚合,让资源管理更轻松 。若有需要,可根据业务需求设置标签,更多标签信息可查看什么是标签 。
-
- 完成上述参数设置后,单击 “立即购买” ,根据页面提示完成支付 。实例创建大约需要 10 - 15 分钟,可在实例列表页通过刷新列表查看新建的 SelectDB 实例。
(二)连接与基本操作
- 连接 SelectDB 实例:
-
- 通过 MySQL 客户端连接:SelectDB 采用 MySQL 网络连接协议,所以可以从 MySQL 官方网站下载 MySQL Client,或者下载阿里云提供的免安装 Linux 版的 MySQL 客户端 。当前 SelectDB 主要兼容 MySQL 5.7 及其以上的客户端 。从阿里云 SelectDB 管理控制台中相应实例下的 “连接” 菜单里,获得连接相关的信息,包括连接地址和端口等 。如果开启了 IP 白名单,需要让管理员将客户端的 IP 加入实例连接的白名单 。在下载的 MySQL 客户端的 bin / 目录下找到 mysql 命令行工具,执行连接命令,例如:mysql -h 实例公网地址 -P 端口 -u 用户名 ,输入密码后即可尝试连接 。如果显示 “ERROR 2013 (HY000): Lost connection to MySQL server at'reading initial communication packet', system error: 2” ,一般是由于客户端的 IP 未加入到管理控制台的连接白名单中;若显示类似 “Welcome to the MySQL monitor. Commands end with ; or \g.” 的信息,则代表连接成功。
-
- 通过 JDBC 连接:从 MySQL 官方网站下载相应的 JDBC Connector 。根据控制台连接信息中的 JDBC 连接信息来配置连接 。在开源 Apache Doris 中,经常需要配置多个 FE 节点地址,以便提供高可用的 FE 服务,但在阿里云 SelectDB 中,无需配置多个 FE 的节点地址,只需要使用控制台给出的单一 IP,这个 IP 为负载均衡器 IP,后端有多个服务器提供服务,可保证负载均衡与高可用 。以 Java 代码为例,连接示例如下:
import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; public class SelectDBJDBCExample { public static void main(String[] args) { String user = "admin"; String password = "admin_password"; String newUrl = "jdbc:mysql://实例连接地址:端口/数据库名@集群名?useUnicode=true&characterEncoding=utf8&useTimezone=true&serverTimezone=Asia/Shanghai&useSSL=false&allowPublicKeyRetrieval=true"; try { Connection myCon = DriverManager.getConnection(newUrl, user, password); Statement stmt = myCon.createStatement(); ResultSet result = stmt.executeQuery("show clusters"); ResultSetMetaData metaData = result.getMetaData(); int columnCount = metaData.getColumnCount(); while (result.next()) { for (int i = 1; i <= columnCount; i++) { System.out.println(result.getObject(i)); } } } catch (Exception e) { e.printStackTrace(); } } }
- 通过 JDBC 连接:从 MySQL 官方网站下载相应的 JDBC Connector 。根据控制台连接信息中的 JDBC 连接信息来配置连接 。在开源 Apache Doris 中,经常需要配置多个 FE 节点地址,以便提供高可用的 FE 服务,但在阿里云 SelectDB 中,无需配置多个 FE 的节点地址,只需要使用控制台给出的单一 IP,这个 IP 为负载均衡器 IP,后端有多个服务器提供服务,可保证负载均衡与高可用 。以 Java 代码为例,连接示例如下:
- 基本操作:
-
- 创建库表:使用CREATE DATABASE语句创建数据库,例如:CREATE DATABASE mydatabase; 。创建表时,需要根据业务需求选择合适的数据模型,如 Unique 模型、Duplicate 模型或 Aggregate 模型 。以创建一个 Unique 模型的表为例,创建订单表 orders 的语句如下:
CREATE TABLE IF NOT EXISTS orders( `order_id` LARGEINT NOT NULL COMMENT "订单id", `order_time` DATETIME NOT NULL COMMENT "订单时间", `customer_id` LARGEINT NOT NULL COMMENT "用户id", `total_amount` DOUBLE COMMENT "订单总金额", `status` VARCHAR(20) COMMENT "订单状态", `payment_method` VARCHAR(20) COMMENT "支付方式", `shipping_method` VARCHAR(20) COMMENT "运输方式", `customer_city` VARCHAR(20) COMMENT "用户所在城市", `customer_address` VARCHAR(500) COMMENT "用户地址" ) UNIQUE KEY(`order_id`, `order_time`) PARTITION BY RANGE(`order_time`) () DISTRIBUTED BY HASH(`order_id`) PROPERTIES ( "enable_unique_key_merge_on_write" = "true", "dynamic_partition.enable" = "true", "dynamic_partition.time_unit" = "DAY", "dynamic_partition.start" = "-7", "dynamic_partition.end" = "3", "dynamic_partition.prefix" = "p" );
- 创建库表:使用CREATE DATABASE语句创建数据库,例如:CREATE DATABASE mydatabase; 。创建表时,需要根据业务需求选择合适的数据模型,如 Unique 模型、Duplicate 模型或 Aggregate 模型 。以创建一个 Unique 模型的表为例,创建订单表 orders 的语句如下:
上述语句表示将 orders 表指定为 Unique 模型,将 order_id 和 order_time 设定为联合主键,并启用写时合并模式 。同时,通过PARTITION BY RANGE按订单时间进行分区,通过DISTRIBUTED BY HASH按 order_id 进行分桶 ,并设置了一些动态分区相关的属性 。
- 数据导入导出:
-
- 数据导入:支持多种数据导入方式,如通过 StreamLoad 进行流式数据导入 。以从本地文件导入数据为例,假设本地有一个 CSV 文件orders_data.csv ,包含订单相关数据,可使用如下命令进行导入(需确保文件路径正确,且 SelectDB 实例已配置好相关权限):
curl --location-trusted -u username:password -T /path/to/orders_data.csv -H "label:your_label" -H "column_separator:," http://实例IP:8040/api/mydatabase/orders/_stream_load
- 数据导入:支持多种数据导入方式,如通过 StreamLoad 进行流式数据导入 。以从本地文件导入数据为例,假设本地有一个 CSV 文件orders_data.csv ,包含订单相关数据,可使用如下命令进行导入(需确保文件路径正确,且 SelectDB 实例已配置好相关权限):
其中,username和password为 SelectDB 的用户名和密码,your_label为导入任务的标签,可自定义,用于标识导入任务,方便后续跟踪和管理 。column_separator指定了 CSV 文件中的列分隔符 。
- 数据导出:可以使用EXPORT语句将数据导出到指定的存储位置 。例如,将 orders 表中的数据导出到 OSS 上的指定路径:
EXPORT DATA TO 'oss://your-bucket/path/to/export/orders' FROM orders WHERE order_time >= '2023-01-01' AND order_time < '2023-02-01';
上述语句将 orders 表中 2023 年 1 月 1 日到 2023 年 2 月 1 日之间的数据导出到 OSS 的your-bucket桶下的path/to/export/orders路径中 。在执行此操作前,需要确保 SelectDB 实例已配置好 OSS 的访问权限,并且目标路径在 OSS 中存在且可写 。
(三)性能优化建议
- 索引优化:
-
- 合理创建索引:SelectDB 主要支持两类索引,内建的智能索引(如 ZoneMap 索引和前缀索引)和创建的二级索引(如倒排索引、Bitmap 索引、BloomFilter 索引和 NGram BloomFilter 索引) 。ZoneMap 索引由系统自动创建维护,用于在列存格式上对每一列自动维护索引信息,包括 Min/Max,Null 值个数等 。前缀索引是在数据存储按指定列排序的基础上,实现的一种根据给定前缀列快速查询数据的索引方式 。在建表时,正确选择列顺序能够极大地提高前缀索引的查询效率 。例如,对于如下表结构:
CREATE TABLE user_info ( user_id BIGINT, age INT, message VARCHAR(100), max_dwell_time DATETIME, min_dwell_time DATETIME ) ENGINE=OLAP DUPLICATE KEY(user_id, age, message) DISTRIBUTED BY HASH(user_id) BUCKETS 10;
- 合理创建索引:SelectDB 主要支持两类索引,内建的智能索引(如 ZoneMap 索引和前缀索引)和创建的二级索引(如倒排索引、Bitmap 索引、BloomFilter 索引和 NGram BloomFilter 索引) 。ZoneMap 索引由系统自动创建维护,用于在列存格式上对每一列自动维护索引信息,包括 Min/Max,Null 值个数等 。前缀索引是在数据存储按指定列排序的基础上,实现的一种根据给定前缀列快速查询数据的索引方式 。在建表时,正确选择列顺序能够极大地提高前缀索引的查询效率 。例如,对于如下表结构:
其前缀索引为 user_id (8 Bytes)+age (4 Bytes)+message (prefix 20 Bytes) 。当查询条件是前缀索引的前缀时,如SELECT * FROM user_info WHERE user_id = 123 AND age = 25; ,查询速度会远高于其他非前缀索引条件的查询 。对于需要快速过滤文本数据的场景,可以创建倒排索引 。例如,在日志分析场景中,对日志内容字段创建倒排索引,能够快速定位包含特定关键词的日志记录 。
- 避免过度索引:虽然索引能够提升查询性能,但过多的索引会降低数据写入和更新的性能,因为每次数据变更时,都需要更新相关的索引结构 。所以,应根据实际查询需求,只对经常用于查询条件的列创建索引 。
- 查询语句优化:
-
- 减少返回列数:只查询需要的列,避免使用SELECT * 。例如,若只需要查询用户表中的用户 ID 和用户名,应使用SELECT user_id, user_name FROM users; ,而不是SELECT * FROM users; ,这样可以减少数据传输量和查询处理的数据量,提高查询效率。
-
- 合理使用 WHERE 子句:确保 WHERE 子句中的条件能够有效地过滤数据 。避免使用函数或表达式对列进行操作,因为这可能会导致索引失效 。例如,应避免使用SELECT * FROM orders WHERE YEAR(order_time) = 2023; ,而应使用SELECT * FROM orders WHERE order_time >= '2023-01-01' AND order_time < '2024-01-01'; ,这样可以利用 order_time 列上的索引进行数据过滤。
-
- 使用 JOIN 代替子查询:在某些情况下,使用 JOIN 可以比子查询更高效 。例如,有两张表 orders 和 customers,orders 表中存储订单信息,包含 customer_id 字段,customers 表中存储客户信息,包含 customer_id 和 customer_name 字段 。若要查询每个订单对应的客户名称,使用 JOIN 的方式如下:
SELECT o.order_id, c.customer_name FROM orders o JOIN customers c ON o.customer_id = c.customer_id;
- 使用 JOIN 代替子查询:在某些情况下,使用 JOIN 可以比子查询更高效 。例如,有两张表 orders 和 customers,orders 表中存储订单信息,包含 customer_id 字段,customers 表中存储客户信息,包含 customer_id 和 customer_name 字段 。若要查询每个订单对应的客户名称,使用 JOIN 的方式如下:
相比使用子查询,这种方式在大数据量下通常具有更好的性能表现 。
- 资源配置和监控调优:
- 合理配置计算资源:根据业务的负载情况,合理配置计算资源 。如果业务查询量较大,且查询复杂度较高,可以适当增加计算资源,如增加计算节点的 CPU 核心数、内存大小等 。可以通过阿里云控制台对 SelectDB 实例的计算资源进行弹性伸缩 。
- 监控与分析:利用阿里云提供的监控工具,实时监控 SelectDB 实例的性能指标,如 CPU 使用率、内存使用率、查询响应时间、数据读写吞吐量等 。通过分析这些指标,及时发现性能瓶颈和异常情况 。例如,如果发现 CPU 使用率持续过高,可能是查询过于复杂或数据量过大导致,可以进一步分析查询语句和数据分布,进行相应的优化;如果查询响应时间突然变长,可能是某个查询出现了问题,或者是资源不足,需要及时排查原因并采取措施,如优化查询语句、增加资源等 。
六、与其他数据库的对比
(一)性能对比
在查询性能方面,SelectDB 在业界常用的 ClickBench 测试中表现卓越,荣登榜首 。在全部 43 条 SQL 中,执行耗时均在 1s 以内,呈现出极其稳定的性能表现 。与其他知名数仓产品相比,优势显著。在宽表聚合场景下,使用 SSB-FLAT 测试,SelectDB 是 ClickHouse 的 3.4 倍,是 Presto 的 92 倍,是业界标杆产品 Snowflake 的 6 倍 。在多表关联场景下,使用 TPC-H SF100 测试,SelectDB 的性能可达到 Redshift 的 1.5 倍,ClickHouse 的 49 倍,同时是业界标杆产品 Snowflake 的 2.5 倍 。在高并发点查场景中,使用 YCSB 测试集,在 10 列测试中,主键高并发点查能力提升 20 倍;在 100 列测试中,主键高并发点查吞吐是某云产品 H 的 2.5 倍,非主键高并发点查吞吐是某云产品 H 的 11 倍 。
在数据导入性能上,SelectDB 同样出色。在 ClickBench 测试中,其数据写入效率在同机型所有产品中位列第二,压缩前 70G 数据写入仅耗时 482s,单节点写入速度超过 140MB/s 。相比一些传统数仓产品,SelectDB 支持各种数据源,包括流式和批量的大数据链路加速导入,能更高效地实现数据入仓 。例如,在与某传统数仓产品对比从 Kafka 导入数据的测试中,SelectDB 的导入速度是该产品的 3 倍,且数据延迟更低,能更好地满足实时数据分析对数据及时性的要求 。
(二)功能特性对比
在数据更新方面,对于 TP 库的数据,SelectDB 提供了主键(Unique)模型,可以保证数据从 TP 到数仓中的数据一致性,支持全列和部分列的更新 。同时基于业务场景,提供了 MoR (Merge On Read) 和 MoW (Merge On Write) 两种更新方式,分别适用于低频大批量数据更新和高频小批量数据更新场景 。而部分数据库可能仅支持单一的数据更新方式,无法很好地满足复杂业务场景下的数据更新需求 。
在存储模式上,SelectDB 采用云原生存算分离架构,全量数据存储于价格低廉的对象存储 OSS 中 。这种架构使得存储和计算可以独立按需扩缩容,并且支持计算集群弹性伸缩,还能根据工作负载的高低峰运行时段、作业执行规律,灵活配置不同规模的计算资源,在集群空置时,还支持集群自动挂起,以进一步降低资源成本 。与存算一体架构的数据库相比,在资源利用和成本控制上具有明显优势 。
在生态集成方面,SelectDB 的 Multi-Catalog 功能支持多种异构数据源的元数据自动映射与同步,目前已经支持 Hive、Hudi、Iceberg、DLF、MaxCompute、Elasticsearch、Trino、ClickHouse、Oceanbase 等数十种数据源,兼容世面上主流的开放湖仓格式和 Metastore,实现了便捷的元数据管理和数据打通,在此基础上可实现联邦查询 。而一些数据库在生态集成上相对较弱,支持的数据源种类有限,难以实现不同数据源之间的便捷数据交互和统一查询分析 。
(三)成本效益对比
从计算成本来看,SelectDB 支持计算资源的弹性伸缩,可以根据工作负载的高低峰运行时段、作业执行规律,灵活配置不同规模的计算资源 。在业务低谷期,可及时缩减计算资源,避免资源浪费,降低成本 。例如,某电商企业在非促销期间,通过 SelectDB 的弹性伸缩功能,将计算资源缩减了 50%,计算成本降低了 40% 。
在存储成本上,SelectDB 采用存算分离架构,全量数据存储于价格低廉的对象存储 OSS 中,单位存储成本可降低 90% 以上 。经测算,使用云数据库 SelectDB 版所需成本仅是企业自建部署成本的 1/5 - 1/2 。假设一家企业原本自建数仓,每年存储成本为 100 万元,迁移至 SelectDB 后,每年存储成本可降低至 20 - 40 万元 。
在运维成本方面,SelectDB 是全托管服务,用户无需关注底层基础设施的搭建、运维以及软件的安装、升级等繁琐工作,阿里云会负责保障服务的稳定运行 。相比企业自建数据库,可节省大量的运维人力和时间成本 。据统计,使用 SelectDB 后,企业在数据库运维方面的人力投入可减少 70% 以上,运维成本大幅降低 。
七、未来发展趋势与展望
在云原生方面,阿里云 SelectDB 有望进一步优化存算分离架构。随着云原生技术的不断成熟,未来 SelectDB 可能会更加紧密地与云基础设施结合,实现计算和存储资源的更细粒度管理与调度 。例如,通过与阿里云的弹性计算服务、存储服务等深度集成,实现资源的秒级弹性伸缩,以应对突发的业务高峰 。同时,在云原生安全方面,将进一步加强数据加密、访问控制等安全机制,保障数据在云端的安全存储与传输 。
在实时分析领域,SelectDB 将持续提升性能。随着数据量的不断增长和业务对实时性要求的不断提高,SelectDB 会在查询优化、数据处理算法等方面进行持续创新 。例如,进一步优化查询引擎,采用更先进的 Cascades 框架和基于 AI 的查询优化技术,实现更智能化的自适应调优,提升复杂查询的性能和效率 。同时,在数据导入方面,会不断优化导入链路,提高数据导入的速度和稳定性,以满足企业对实时数据处理的更高要求 。
在湖仓一体方向,SelectDB 将继续完善其功能和生态。未来,SelectDB 可能会支持更多的数据源和数据格式,进一步拓展其在湖仓一体场景中的应用范围 。例如,支持更多新兴的数据湖格式和数据源,如 Delta Lake 等,实现与更多企业现有数据架构的无缝对接 。同时,在联邦查询方面,会不断优化查询性能和用户体验,实现对多数据源数据的更高效、更便捷的统一查询分析 。
可以预见,阿里云 SelectDB 凭借其不断创新的技术和强大的功能,未来将在实时数仓领域发挥更为重要的作用 。随着各行业数字化转型的加速,对实时数据分析的需求将持续增长,SelectDB 有望在金融、电商、制造业、医疗等众多行业得到更广泛的应用 。例如,在金融行业,帮助银行实现对交易数据的实时风险监测和精准营销;在制造业,助力企业实现生产过程的实时监控和优化;在医疗行业,支持医疗机构对患者数据的实时分析,提高医疗服务质量 。它将为企业提供更强大的数据支持,助力企业在数字化浪潮中把握机遇,实现创新发展 。
八、结语
阿里云 SelectDB 作为云原生实时数仓领域的佼佼者,凭借其基于 Apache Doris 内核的稳定基础和云原生改造的创新架构,展现出诸多核心优势 。其存算分离架构实现了存储与计算资源的独立弹性伸缩,大幅降低成本的同时,还能保障负载隔离 。在数据处理上,支持丰富数据源的快速导入与同步,提供灵活且高效的数据更新策略 。查询性能更是卓越,无论是宽表分析、高并发点查还是复杂的多表关联查询,都能轻松应对,实现毫秒级到秒级的响应 。而且,SelectDB 提供融合统一的分析体验,支持联邦查询和多种数据类型,满足企业多样化的数据处理与分析需求 。
从应用场景来看,SelectDB 在实时报表分析、用户行为分析、日志检索分析和湖仓一体分析等场景中都发挥着重要作用,帮助企业及时洞察数据价值,做出科学决策 。通过与其他数据库的对比,SelectDB 在性能、功能特性和成本效益方面都具有显著优势,为企业提供了更高效、更经济的数据管理和分析解决方案 。
展望未来,随着云原生技术的发展和企业数字化转型的加速,阿里云 SelectDB 有望在技术创新和应用拓展方面取得更大突破 。相信在未来的大数据分析领域,阿里云 SelectDB 将成为更多企业的首选,助力企业在数据驱动的时代中乘风破浪,实现可持续发展 。如果您还在为实时数据分析的性能、成本和复杂性而烦恼,不妨尝试阿里云 SelectDB,开启您的数据价值探索之旅 。
更多推荐
所有评论(0)