云原生数据仓库ByteHouse性能白皮书(企业版)_第1页
云原生数据仓库ByteHouse性能白皮书(企业版)_第2页
云原生数据仓库ByteHouse性能白皮书(企业版)_第3页
云原生数据仓库ByteHouse性能白皮书(企业版)_第4页
云原生数据仓库ByteHouse性能白皮书(企业版)_第5页
已阅读5页,还剩67页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

目录CONTENTS在数据处理和分析的领域,提升查询效率始终是一项关键挑战。在OLAP领域,性能的关键需求在于能够快速进行数据检索,支持实时分析,具备处理大规模数据的能力,轻松应对复杂查询,提供快速响应,具备良好的可扩展性,高效处理并发操作,以及实现高效的数据压缩和存储。这些方面对于满足高效、准确的数据分析它全面继承了开源ClickHouse的高性能和强大的分析能力,并在架构上遵循新一代云原生理念进行全面重构,实现了容器化、存储计算分离、多租户管理和读写分离等功能。在可扩展性、稳定性、可运维性、性能以及资源利用率等方面都有显著提升。截至2022年2月,ByteHouse在字节跳动内部的部署规模超过18000台,单集群超过2400台。它经过了内部数百个应用场景和数万用户的锤炼,并在多个外部企业客户中得到了广泛本文将介绍ByteHouse企业版的一系列优化措施。这些改进旨在缩短查询执行时间、优化资源利用,提供更流畅的数据分析体验。通过智能优化算法和先进的执行技为了让大家亲身感受这些优化带来的效果,我们提供了的性能测试步骤。您可以按照这些步骤进行测试,亲自验证ByteHouse企业版在查询效率方面的显著提升。1.2CDC(ChangeDataCapture)011.3Upsert&部分列更新023.2Zerocopy优化063.4UncompressedCache优化074.1BitEngine/BitMap07行为分析08Vector向量检索GIS时空分析SSB性能测试TPC-H性能测试TPC-DS性能测试6464 Kafka&Kafka&FlinkHaKafkaHaKafka:更稳定的高可用Kafka消费引擎ByteHouse的HaKafkaEngine是一款自研表引擎,在数据实时消费性能不降级的基础上解决了Kafka消费的高可用问题,提供了low-level消费模式,保证了At-least-once消费语义。用户可以通过ByteHouse控制台可视化创建实时导入任务。FlinkConnectorFlinkConnectorFlinkConnectorforByteHouse连接器专用于通过Flink将数据加载到ByteHouse,目前FlinkConnector已经支持通过TableAPI&SQL和FlinkDataStreamAPI两种方式来连接ByteHouse并处理数据,详情请参见产品手册(/docs/6464/1198033)。CDCCDC(ChangeDataCapture)实时数据同步数据快车服务(DES,DataExpressService)是一个用于将多源异构数据源和数据结构导入到ByteHouse的服务,通过提供数据集成、结构映射、高效导入、安全可靠等功能,帮助用户快速、准确地将各种类型的数据(如关系型数据库、日志文件、对象存储等)导入到ByteHouse中进行后续的处理使用DES可实现数据秒级同步到目标端,用户可以根据业务需求选择不同规格的独享资源以享受更高性能的同步体验,同步性能可达到25万records/s以上,详情请参见产品手册。目前,数据快车的CDC同步任务已支持MySQL/PostgreSQL数据源的历史或增量数据同步。为了强化实时数仓的能力,便于将为了强化实时数仓的能力,便于将MySQL中的表映射到ByteHouse企业版中,ByteHouse引入了MaterializedMySQL数据库引擎,ByteHouse服务作为MySQL副本,可以读取Binlog并执行DDL和DML请求,实现了基于MySQLBinlog机制的业务数据库实时同步功能。ByteHouse企业版在实现MaterializedMySQL时,底层引擎采用了自研的HaUniqueMergeTree引擎,增强了MaterializedMySQL引擎的稳定性和易用性。 内置MaterializedMySQL引擎UpsertUpsert&部分列更新解决了社区版查询时去重的效率问题,可以帮助业务更轻松地开发实时分析应用。同时,在ByteHouse中,我们可以在HaUniqueMergeTree表中实现部分列更新的功能。部分列更新模式在指定变量enable_unique_partial_update=1后,允许以部分列更新的模式进行写入。--以部分列更新的模式进行写入,并主动制定更新列示例SETenable_unique_partial_update=1;--主动指定_update_columns_INSERTINTOt1(k,c1,m1,a1,_update_columns_)VALUES(1,20,{,k2,:2},[,world,],,k,厂—k—丁—c1—丁———c2—丁—c3———丁———c4—丁—m1———————丁—a1————————口____」」」」」」 」数据库优化器是DBMS中一个核心组件,它负责分析查询语句,并根据表的结构、索引等信息来生成最优的执行计划。通过优化查询执行计划,可以提高查询的执行效率,减少资源消耗,提升系统性能。为了提升在复杂场景的查询性能,ByteHouse的自研优化器进行了大量的优化,主要包括四个大的优化方向:优化器实现了常见的优化规则。例如列裁剪、分区裁剪、表达式简化、子查询解关优化器实现了常见的优化规则。例如列裁剪、分区裁剪、表达式简化、子查询解关联、谓词下推、冗余算子消除、Outer-JOIN转INNER-JOIN、算子下推存储、分布式算子拆分等常见的启发式优化能力。解关联很多OLAP引擎不支持相关子查询,在语法分析阶段就会报错。优化器实现了完整的解关联能力,对于关联查询可以转换为常见的joinaggfilter等算子执行,下图就是一个简单的解关联例子。对于一些特殊类型的关联查询也可以利用window算子执行,更加快速简洁。0102SELECTcount(c_custkey)FROMcustomerWHERESELECTcount(c_custkey)FROMcustomerWHERE10000<(SELECTSUM(o_totalprice)FROMordersWHEREocustkey=c_custkey);FilterNodeSUM(o_totalprice)>10000JoinNodeJoinKind:INNERJoinStrictness:AllJoinKeysc_custkey=o_custkeyJoinFilter1HasUsing:0GreaterOrEqualsReadFromStorageNodeDatabase:tpchTable;customerProjectionNodeAssignments:count(c_custkey):‘count(c_custkey)AggrcgatingNodeGroupBy:Functions:count(c_custkey)AggregatingNodeGrupBy:o_custkeyFunctions;SUM(o_totalprice)ProjectionNodeAssignments:o_totalprice:o_totalpriceo_custkey:o_custkeybuildsidenonnullsymbol:1Ulnt8ReadFromStorageNodeDatabase:tpchTable:orders非等值非等值Join优化在很多引擎中,带有非等值条件的join需要通过多个算子来组合执行(innerjoin+filter+group-by),而在ByteHouse中,支持非等值join之后可以直接在join算子中完成非等值条件的执行。优化器会对一些关联子查询转成非等值join来执行,相较于转成其他常见的算子(innerjoin,filter,agg)性能有一倍以上的提升。基于基于Cascade搜索框架,利用GraphPartition技术实现了高效的Join枚举算法,以及基于HistogramJoinReorder对10表级别规模的JoinReorder问题,能够全量枚举并寻求最优解,同时针对大于10表规模的JoinReorder支持启发式枚举并寻求最优解。CBO支持基于规则扩展搜索空间,除了常见的JoinReorder问题以外,还支持Outer/Semi/Anti-Join的Reorder。03业界主流实现分为两个阶段,首先寻求最优的单机版计划,然后将其分布式化。但是这样的设计流程,不能提前考虑分布式系统的特点,可能会导致网络延迟、数据分布不均衡,并导致可扩展性限制等问题。从代价的角度选择最优的分布式计划。同时在Join/Aggregate过程中,也支持Partition属性展开。另外,我们也在CBO中实现了对于Aggregate/JoinReorder,MagicSetPlacement等相关能力。对于CTE的实现方式也基于Cost进行选择,在inline,shared和partialinline之间做权衡,选出最优的计划。在tpcds等benchmark中都有一定的应用。ExchangeExchange在执行层中,数据的传入和传出依赖于Exchange模块。Exchange是数据在PlanSegment实例之间进行数据交换的逻辑概念。在具体实现上,我们将其分为数据传输层和算子层。数据传输层主要基于定义的Receiver/Sender接口,同进程传输基于队列,跨进程基于BRPCStream,支持保序、状态码传输、压缩和连接池复用。简单来说,就是在大所有查询都在这个连接上通信。由于我们使用连接池,实际上两个节点之间是固定数量的连接,这样稳定性更高。算子层支持四种场景:一对多的Broadcast、多对多的Repartition、多对一的Gather,以及本进程之间的Round-Robin。ByteHouse中另外还做了一些优化,包括避免Broadcast重复序列化、提升Repartition性能以及sink攒批。在大集群下,通过一个ExchangeSource读取多个receiver的数据来降低线程数。04ProcessorsModuleIQueryPlanStepRemoteExchangeSourceStepRemoteBroadcastAPIBRPCProcessorsModuleIQueryPlanStepRemoteExchangeSourceStepRemoteBroadcastAPIBRPCBroadcastLocalBroadcastQueryPlanQueryPipelineDataTransportLayerIProcessorBufferedCopyTransformRepartitionTransformTransformerExchangeSourceIProcessorBufferedCopyTransformRepartitionTransformTransformerExchangeSourceExchangeSinkSinglePartitionExchangeSinkBroSinglePartitionExchangeSinkBroadcastExchangeSinkMultiPartitionExchangeSinkMultiPartitionExchangeSinkLoadBalancedExchangeSinkRuntimeFilterRuntimeFilter优化在OLAP场景中,Join是一个十分常见的操作,也是查询的性能瓶颈。RuntimeFilter是在Join的Probe端提前过滤掉那些不会命中Join的数据,减少存储扫描、网络传输和算子计算的数据,是优化复杂查询的重要手段之一。TableScan(withRuntimeFilter)RuntimeFilterBuilderRuntimeFilterBuilder提前过滤FilterProbeTableScanTableScanTableScanRuntimeFilterFilterJoinJoin05RuntimeFilter也称为DynamicFilter,是一种在执行引擎中动态构建Filter的能力。它的目的是通过在Join的Probe端提前过滤掉那些不会命中Join的输入数据,来大幅减少Join中的数据传输和计算,从而减少整体的执行时间。例如在HashJoin的过程中,当右表HashTable构建完成后,将根据JoinKey+HashTable生成RuntimeFilter,并将其作用于左表的Scan节点,从而减少左表的扫描数据量,可进一步减少磁盘IO、网络数据传输等,最终使得Query的性能显著提高。ByteHouse支持根据不同的场景生成最优的RuntimeFilter,优化了生成和Apply的流程,同时支持Distributed和Local的RuntimeFilter,在较大规模集群上也自适应的支持Shuffle-Aware的RuntimeFilter。ClickHouseClickHouse内部的并行执行在Agg和Join上存在一些性能瓶颈,主要表现在不能很好地结合数据上下游的数据特征,以及在中间执行过程中引入了不必要的FinalMerge和数据Shuffle。在此基础上,ByteHouse对ClickHouse进行了并行化重构,支持AggregationStreaming并结合HashTableTwo-Level的并行和数据的分布特征,有效减少了中间出现的AggFinalMerge和ConcurrentHashJoin中的数据Shuffle,从而显著提升了整体Query的执行性能。 并行化重构+Bucket表物化视图存储了SQL查询语句包含的数据,并提供更新机制。物化视图最重要的功能就是查询加速。用查询物化视图来替代直接查询数据表,可以避免对数据进行再次的计算与聚合,能够以空间换时间的方式节省查询时间,达到查询加速和简化查询逻辑的目的。数据仓库中存在大量在大型表上执行复杂的查询,并会消耗大量资源和时间。物化视图可以通过预计算的结果回答查询,消除昂贵的Join和聚合计算所带来的开销,大幅度改善查询处理时间,降低系统负载。对于可以预见并反复使用相同子查询结果的查询,物化视图非常高效。06ProjectionProjection是按照ByteHouse的存算分离架构进行设计的,Projecton数据由分布式存储统一进行管理,而针对projection的查询和计算则在无状态的计算节点上进行。相比于社区版,ByteHouseProjection●对于Projection数据的存储节点和计算节点可以独立扩展,即可以根据不同业务对于Projection的使用需求,增加存储或者计算节点。●当进行Projection查询时,可以根据不同Projection的数据查询量来分配计算节点的资源,从而实现资源的隔离和优化,提高查询效率。●Projection的元数据存储十分轻量,在业务数据急剧变化的时候,计算节点可以做到业务无感知扩缩容,无需额外的Projection数据迁移。ProjectionZeroZerocopy优化Zerocopy是一种优化技术,用于在数据传输过程中减少数据的拷贝次数,从而提高数据传输的效率和性能。Zerocopy可以避免原来前期需要的大量deepcopy操作。在减少deepcopy降低查询计算overhead的同时,也可以避免内存IO吞吐过早达到内存IO带宽上限,从而缓解高并发下内存IO吞吐带宽瓶颈带来的问题。全局字典以全局字典编码的方式进行数据的读写计算,针对Agg、Function和Exchange实现了基于编码值的处理,将基于非定长字符串类型的计算改变为基于定长整型编码值的计算,以此提升计算效率。UncompressedCacheUncompressedCache优化UncompressedCache优化提高了多线程下cache访问的效率。社区OLAP多个cache模块使用LRUcache,在多线程并发场景中存在锁竞争激烈,影响cache效率的情况。而UncompressedCache优化解决了这一问题,提高了系统的性能和响应能力。BitEngine/BitMapBitEngine/BitMapBitEngine是一个高效集合数据处理模型,它是查询分析数据库ClickHouse的一部分。BitEngine底层基于MergeTreeFamily存储引擎,并在此基础上引入了BitMap64类型,开发了系列相关运算函数。BitEngine提供的BitMap64类型适合表达具有特定关系的大量实体ID的集合,将集合的交并补运算转化为bitmap之间的交并补运算,从而达到远超普通查询的性能指标。已上线业务的测试表明,使用BitEngine相比普通和Array或者用户表方式,在查询速度上有10-50倍不等的提升,详情可参见官方文档(/docs/6464/1172136)。BitMap索引(BitMapindex)目前用于Array+Int8/16/32/64/StringUInt/8/16/32/64/String类型,它为Array数组中每个元素构建一个bitmap-index,在查询的时候,我们使用arraySetCheck(column,(item))检测item是否在数组里的时候会使用bitmap-index做过滤,从而避免大量的array数据读取,目前大部分Array类型的过滤操作都使用了bitmap-index,性能有4-10倍不等的提升。人群圈选分析是客户画像平台(CDP)中的核心功能。分析师利用各种标签组合,挑选出最合适的人群,进而进行广告推送,达到精准投放的效果。同时由于人群查询在不同标签组合下的结果集大小不同,在一次广告投放中,分析师需要经过多次的逻辑调整,以获得"更合适"的人群包。在这种高频的操作下,画像平台通常会遇到两方面的问题:●第一,由于此类查询分析是临时性的,各种标签组合数巨大,离线预计算无法满足此类灵活性。第二,由于此类查询是实时场景,查询性能变得非常关键,通常一次查询在分钟级,耗时较长,无法满足分析师需求。10s,展现了优异的性能。随着经营成本的大幅增加,企业必须改变过去粗放型的营销与运营方式,尤其是在产品制造、销售,市场营销以及客户服务等各个方面都需要向更加科学、高效的方向转变。行为分析是数字化营销中非常重要的一个指标。以电商业务的用户运营为例,通常需要整合各类业务数据,按照用户粒度进行数据加工,并形成结构化的数据,继而进行标签计算,以便能够精准描绘画像特征。ByteHouse根据用户行为分析使用场景,定制了部分函数,包括留存分析类函数genArrayIf()/retention2()、路径分析类函数pathSplit()/pathCount(),以及漏斗分析函数finderFunnel()/funnelRep()等。漏斗分析和留存分析是常用的转化分析方法,在用户行为分析和App数据分析的流量分析、产品目标转化等数据运营和分析中得到广泛应用,使用这些函数相比拼装SQL或者ClickHouse原生函数更为高效。留存分析函数通常用于分析用户在一段时间内的留存情况。这些函数可以帮助我们了解用户在特定时间段后是否仍然活跃或继续使用产品或服务。通过对留存率数据分析数据,可以识别用户行为模式,并通过持续不断的优化产品和数据监测,可以提高用户满意度和忠诚度,增加留存率。/07082周后3周后4周后5周后6周后7周后8周后9周后43%44.9%45.8%首次使用时间留存用户新增用户留存率09-20-09-2609-27-10-0310-25-10-3109-13-09-1910-04-10-1010-18-10-2443%漏斗模型是一种常见的分析方法,用于描述一个过程中各个阶段的转化情况,就像一个漏斗一样,数据从宽口进入,逐渐缩小,最终到达窄口。ByteHouse中的漏斗函数主要用于统计用户在不同阶段的转化率和转化路径。它可以根据用户的行为数据,分析用户的每一步操作,并将其分为不同的阶段。根据不同的条件,例如访问量、点击量、注册量等,计算每个阶段的转化率,并显示出用户在整个转化路径上的例如,在一些业务场景中,需要选定一段时间范围,观察此时间范围内每一个时间单位(天)内用户按一定时间范围划分的漏斗分层汇总情况。访问访问激活注册活跃交易目前,通过使用ByteHouse作为查询加速引擎,帮助行为分析系统接入了字节跳动内部几乎所有的产品线。业务上,在满足了高效查询性能的同时,扩展了时间分析的范围与事件埋点的数量。让分析用户能够在海量数据的情况下,依然可以灵活地进行交互式分析,洞察事件行为背后的原因。DAU:4000+OLAP高并发场景指的是在在线分析处理(OnlineAnalyticalProcessing)环境中,有大量用户同时进行数据分析操作的情况。在这种场景下,系统需要处理多个并发请求,以满足用户对快速数据查询和分析的需求。比如,在部分在线服务的分析场景下(如游戏日志检索,用户信息检索等),需要给多个分析师提供相似SQLPattern的查询服务。通常此类查询性能要求极高,需要有10000以上、可线性扩展的业内主流OLAP引擎在高并发能力上表现不佳,通常需要借助行存引擎去支持高并发点查场景,但是对建模和运维管理都带来了很多额外工作量。ByteHouse针对性做了很多增强,在纯列存模式上极大提升广告推荐业务上,仅仅256Core的算力,即可支持10万+QPS。Vector向量检索向量是一种常见的非结构化数据表现形式。基于向量相似度的KNN计算广泛使用于图像搜索、多模态搜索、推荐、大模型推理等场景。ByteHouse企业版已提供向量数据的管理与近似度查询功能,同时通过支持多种常见近近似最近邻搜索算法(ApproximateNearestNeighbor,ANN)算法来提升检索性能,以提供对非结构化数据的处理能力。ByteHouse企业版当前支持HNSW(hnswlib)、Faiss两个算法库,后续还会对DiskANN等算法库提供HNSWHNSW索引(HierarchicalNavigableSmallWorldgraphs,分层-可导航-小世界-图)热门的基于图的近似最近邻搜索算法(ANN)。HNSW是一种非常流行和强大的算法,具有超快的搜索速度和出色的召回率。FaissFaissFacebook开源的ANN算法库,包含了倒排(IVF,InvertedFile)、PQ、SQ等多种类型的索引,以减少索引的内存使用。0910Seriallatency_p99(lessisSeriallatency_p99(lessisbetter)Milvus5.4msByteHouse-HNSWSearchPerformanceTest(1MDataset,768Dim)Qps(moreisbetter)ByteHouse-HNSWRecall(moreisbetter)ByteHouse-HNSWMilvusLoadduration(lessisbetter)ByteHouse-HNSWMilvus表:Vector大模型向量检索核心应用场景广泛应用场景应用场景互联网互联网-电商商品以图搜搜互联网-社交互联网-社交图像去重、视频原创验证、风控审核、关联推荐、舆情监控政府机构政府机构人脸识别、视频检索、指纹搜索、人体图像检索、车辆查找、内容查重人脸识别、文本检索、智能客服人脸识别、商品识别、自动售货机基于业界最新的VectorDBBench测试工具进行测试,在cohere1M标准测试数据集上、recall98的情况下,ByteHouse可以达到与专用向量数据库(以专用向量数据库Milvus为例)同等水平的性能。在数字化时代,地理空间分析(GeospatialAnalytics)成为辅助企业市场策略洞察的重要手段。无论是精准广告投放,还是电商物流的效率优化,都离不开对地理空间数据的查询、分析和可视化处理,以便助力企业更好决策。ByteHouse的GIS功能不仅提供了高性能的地理空间分析能力,还具有易于使用、实时分析和云原生等特点。这使得企业可以更灵活、更高效地利用地理空间数据,从而在激烈的市场竞争中获得优势。在关键性能层面,ByteHouseGIS在列式小批组织的数据结构上引入RTree等二维空间索引能力,并在CPU硬件层面实现了二维空间函数的性能优化,整体提升了端到端性能。在功能层面,兼容OGC标准,支持导入标准GIS文件格式,目前已支持超过50个主流的空间函数。位置洞察:通过高性能GIS(ST_DistanceSphere)函数,企业可以快速获取指定范围内的相关信息,为定价策略和市场定位提供数据支持。作战地图:利用GIS(ST_Within)函数,企业可以实时观察特定区域内的商家供给和客流量,为即时零售业务的配送优化提供决策依据。为了说明性能效果,我们基于两个关键的GIS函数:ST_DistanceSphere和ST_Within;并使用NYCManhattan选取其中3个不同大小的地理区域(按照过滤度区分:zone1、zone2、zone3将ByteHouse与ClickHouse、PostGIS、DuckDB等常见数据库进行了性能对比。基于标准数据集的测试结果来看,ByteHouseGIS对比传统的PostGIS:在OLAP层面,ByteHouse在GIS层面,空间数据对象按照列的方式存储,而非序列化成字节数组,在存储上能够做到更加紧凑并节省空间,在计算上能够充分发挥向量化的优势。在空间函数层面,可以利用硬件的并行化能力提速。ByteHouseByteHouseGIS对比社区ClickHouse:ByteHouseGIS兼容OGC标准,能够水平替换之前PostGIS的场景。空间索引能力可以大大减少ClickHouse的读放大的现象。ByteHouse自研的优化器同样具备适配GIS特性的能力。STST_Within函数性能对比ST_DistanceSphere函数性能对比某汽车内容平台借助ByteHouse的GIS时空分析功能,帮助用户在选择店址时快速评估商某汽车品牌使用该平台的建店选址产品,可以快速了解该城市的人口分布、消费水平、竞争对手等信息,从而选择最合适的店址,提高开店成功率。/13 SSB、TPC-H和TPC-DS都是常用于测试分析型数据库/数据仓库的数据集。这些数据集被广泛应用于数据仓库领域,并且包含了常见的业务场景和数据模式。通过测试这些数据集,可以全面评估数仓在处理复杂数据结构和查询操作时的性能和效率。SSB:StarSchemaBenchmark是一种在学术界和工业界广泛应用的数据库系统性能评估基准测试方法。它能够对比不同数据仓库在处理星型模式查询时的性能,帮助数据库管理员和决策者选择最符合需求的数据库系统。此外,参考OLAP行业的做法,将SSB中的星型模型展平转化为宽表,还可以改造成单一表测试Benchmark(SSBflat)。TPC-H:TPC-H作为一种决策支持基准,被广泛应用于学术界和工业界,用于评估决策支持技术应用的性能。它以真实的生产运行环境为基础进行建模,模拟了一个包含8张表的销售系统数据仓库。其选择的查询和填充数据库的数据具有广泛的行业相关性,同时具备足够的易实现性。TPC-DS:TPC-DS由TPC委员会制定并发布,是一种面向决策支持系统的、涵盖多维度常规应用模型的决策支持基准,包括查询和数据维护。该基准对被测系统在决策支持系统层面的表现评估具有代表性。TPC-DS查询包含共计99个测试语句。以下内容将以性能著称的某开源OLAPC*为基准产品,通过SSB、TPC-H和TPC-DS三种数据集,展示ByteHouse的性能效果。您可以按照这些数据集的测试步骤进行测试,验证ByteHouse在查询效率方面的显著提升。14SSB性能测试SSB宽表测试的13个查询中,ByteHouse查询性能全面超越开源产品C*,整体查询性能达到该产品的3.6+倍。SSB标准测试的13个查询中,开源产品C*最后三个查询因为内存问题查询失败,整体查询性能与ByteHouse相差较大。SSB宽表测试结果如下:查询查询完成时间(完成时间(ms)ByteHouseByteHouse开源产品开源产品C*996060334334q3.2q3.2q3.3q3.3q3.4q3.4q4.2q4.2q4.3q4.3sum709sum7092558标准SSB测试结果如下:查询查询完成时间(完成时间(ms)ByteHouseByteHouse开源产品开源产品C*20920976307630q3.2q3.2q3.3q3.3q3.4q3.4q4.2q4.2q4.3q4.39516下面列举了本次SSB性能测试所使用的环境信息。每个测试环境3个节点,配置如下:操作系统:CentOSLinuxrelease7.8.2003(Core)ByteHoue企业版:31(混布ZooKeeper:3.8.1)ByteHouse测试所使用的数据、生成、导入和查询步骤如下。lineorderlineordercustomer300万partsupplier20万dateslineorder_flatSSB打平后的宽表解释首先下载ssb工具包并编译Bash$gitclone/vadimtk/ssb-dbgen.git$cdssb-dbgen$makeBash$./dbgen-s1000-Tc$./dbgen-s1000-Tl$./dbgen-s1000-Tp$./dbgen-s1000-Ts$./dbgen-s1000-TdDROPDATABASEIFEXISTSssb_localONCLUSTERch_benchmark;CREATEDATABASEssb_localONCLUSTERch_benchmark;USEssb_local;CREATETABLEcustomerONCLUSTERch_benchmark(C_CUSTKEYUInt32,C_NAMEString,C_ADDRESSString,C_CITYGlobalLowCardinality(String),C_NATIONGlobalLowCardinality(String),C_REGIONGlobalLowCardinality(String),C_PHONEFixedString(15),C_MKTSEGMENTGlobalLowCardinality(String))ENGINE=MergeTree()ORDERBY(C_CUSTKEY);CREATETABLEdwdateONCLUSTERch_benchmark(D_DATEKEYUInt32,D_DATEString,18D_DAYOFWEEKString,--defineD_DAYOFWEEKString,--definedinSection2.6asSize8,butWednes-dayis9lettersD_MONTHString,D_YEARUInt32,D_YEARMONTHNUMUInt32,D_YEARMONTHString,D_DAYNUMINWEEKUInt32,D_DAYNUMINMONTHUInt32,D_DAYNUMINYEARUInt32,D_MONTHNUMINYEARUInt32,D_WEEKNUMINYEARUInt32,D_SELLINGSEASONString,D_LASTDAYINWEEKFLUInt32,D_LASTDAYINMONTHFLUInt32,D_HOLIDAYFLUInt32,D_WEEKDAYFLUInt32)ENGINE=MergeTree()ORDERBY(D_DATEKEY);CREATETABLElineorderONCLUSTERch_benchmark(LO_ORDERKEYUInt32,UInt8,LO_CUSTKEYUInt32,LO_PARTKEYUInt32,LO_SUPPKEYUInt32,LO_ORDERDATEUInt32,GlobalLowCardinality(String),LO_SHIPPRIORITYUInt8,LO_QUANTITYUInt8,LO_EXTENDEDPRICEUInt32,LO_ORDTOTALPRICEUInt32,LO_DISCOUNTUInt8,UInt32,LO_SUPPLYCOSTUInt32,LO_TAXUInt8,LO_COMMITDATEDate,LO_SHIPMODEGlobalLowCardinality(String))ENGINE=MergeTree()PARTITIONBYtoYear(toString(LO_ORDERDATE))ORDERBY(LO_ORDERDATE,LO_ORDERKEY);CREATETABLEpartONCLUSTERch_benchmark(P_PARTKEYUInt32,P_NAMEString,P_MFGRGlobalLowCardinality(String),P_CATEGORYGlobalLowCardinality(String),P_BRANDP_COLORP_TYPEGlobalLowCardinality(String),GlobalLowCardinality(String),GlobalLowCardinality(String),UInt8,P_CONTAINERGlobalLowCardinality(String))ENGINE=MergeTree()ORDERBY(P_PARTKEY);CREATETABLEsupplierONCLUSTERch_benchmark(S_SUPPKEYUInt32,S_NAMEString,S_ADDRESSString,S_CITYGlobalLowCardinality(String),S_NATIONGlobalLowCardinality(String),S_REGIONGlobalLowCardinality(String),S_PHONEString)ENGINE=MergeTree()ORDERBY(S_SUPPKEY);--CreatedistributedtableDROPDATABASEIFEXISTSssbONCLUSTERch_benchmark;CREATEDATABASEssbONCLUSTERch_benchmark;usessb;CREATETABLEcustomerONCLUSTERch_benchmarkASssb_local.customerENGINE=Distributed(ch_benchmark,ssb_local,customer,C_CUSTKEY);CREATETABLEdwdateONCLUSTERch_benchmarkASssb_local.dwdateENGINE=Distributed(ch_benchmark,ssb_local,dwdate,D_DATEKEY);CREATETABLElineorderONCLUSTERch_benchmarkASssb_local.lineorderENGINE=Distributed(ch_benchmark,ssb_local,lineorder,rand());CREATETABLEpartONCLUSTERch_benchmarkASssb_local.partENGINE=Distributed(ch_benchmark,ssb_local,part,P_PARTKEY);CREATETABLEsupplierONCLUSTERch_benchmarkASssb_local.supplierENGINE=Distributed(ch_benchmark,ssb_local,supplier,S_SUPPKEY);/1920在在ByteHouse集群中建表:CREATETABLEssb_local.lineorder_flatONCLUSTERch_benchmark(LO_ORDERKEYUInt64,UInt8,LO_CUSTKEYUInt32,LO_PARTKEYUInt32,LO_SUPPKEYUInt32,LO_ORDERDATEDate,GlobalLowCardinality(String),LO_SHIPPRIORITYUInt8,LO_QUANTITYUInt8,LO_EXTENDEDPRICEUInt32,LO_ORDTOTALPRICEUInt32,LO_DISCOUNTUInt8,UInt32,LO_SUPPLYCOSTUInt32,LO_TAXUInt8,LO_COMMITDATEDate,LO_SHIPMODEGlobalLowCardinality(String),C_NAMEString,C_ADDRESSString,C_CITYGlobalLowCardinality(String),C_NATIONGlobalLowCardinality(String),C_REGIONGlobalLowCardinality(String),C_PHONEFixedString(15),C_MKTSEGMENTGlobalLowCardinality(String),S_NAMEString,S_ADDRESSString,S_CITYGlobalLowCardinality(String),S_NATIONGlobalLowCardinality(String),S_REGIONGlobalLowCardinality(String),S_PHONEString,P_NAMEString,P_MFGRGlobalLowCardinality(String),P_CATEGORYGlobalLowCardinality(String),P_BRANDGlobalLowCardinality(String),P_COLORGlobalLowCardinality(String),P_TYPEGlobalLowCardinality(String),P_SIZEUInt8,P_CONTAINERGlobalLowCardinality(String))ENGINE=MergeTree()PARTITIONBYtoYear(LO_ORDERDATE)ORDERBY(LO_ORDERDATE,LO_ORDERKEY);CREATETABLEssb.lineorder_flatONCLUSTERch_benchmarkASssb_local.li-neorder_flatENGINE=Distributed(ch_benchmark,ssb_local,lineorder_flat,rand());Bashclickhouse-client-dbench--query"INSERTINTOcustomerFORMATCSV"<customer.tblclickhouse-client-dbench--query"INSERTINTOpartFORMATCSV"<part.tblclickhouse-client-dbench--query"INSERTINTOsupplierFORMATCSV"<supplier.tblclickhouse-client-dbench--query"INSERTINTOlineorderFORMATCSV"<lineorder.tblclickhouse-client-dbench--query"INSERTINTOdwdateFORMATCSV"<dwdate.tbl插入数据到宽表lineorder_flat。INSERTINTOssb.lineorder_flatSELECTl.LO_ORDERKEYASLO_ORDERKEY,l.LO_CUSTKEYASLO_CUSTKEY,l.LO_PARTKEYASLO_PARTKEY,l.LO_SUPPKEYASLO_SUPPKEY,toDate(toString(l.LO_ORDERDATE))ASLO_ORDERDATE,l.LO_ORDERPRIORITYASLO_l.LO_SHIPPRIORITYASLO_SHIPPRIORITY,l.LO_QUANTITYASLO_QUANTITY,l.LO_EXTENDEDPRICEASLO_EXl.LO_ORDTOTALPRICEASLO_ORDTOTALPRICE,l.LO_DISCOUNTASLO_DISCOUNT,l.LO_SUPPLYCOSTASLO_SUPPLYCOST,l.LO_TAXASLO_TAX,l.LO_COMMITDATEASLO_COMMITDATE,l.LO_SHIPMODEASLO_SHIPMODE,c.C_NAMEASC_NAME,22c.C_c.C_ADDRESSASC_ADDRESS,c.C_CITYASC_CITY,c.C_NATIONASC_NATION,c.C_REGIONASC_REGION,c.C_PHONEASC_PHONE,c.C_MKTSEGMENTASC_MKTSEGMENT,s.S_NAMEASS_NAME,s.S_ADDRESSASS_ADDRESS,s.S_CITYASS_CITY,s.S_NATIONASS_NATION,s.S_REGIONASS_REGION,s.S_PHONEASS_PHONE,p.P_NAMEASP_NAME,p.P_MFGRASP_MFGR,p.P_CATEGORYASP_CATEGORY,p.P_BRANDASP_BRAND,p.P_COLORASP_COLOR,p.P_TYPEASP_TYPE,p.P_SIZEASP_SIZE,p.P_CONTAINERASP_CONTAINERFROMssb.lineorderlINNERJOINssb.customerAScONc.C_CUSTKEY=l.LO_CUSTKEYINNERJOINssb.supplierASsONs.S_SUPPKEY=l.LO_SUPPKEYINNERJOINssb.partASpONp.P_PARTKEY=l.LO_PARTKEY23--Q1.1sum(LO_EXTENDEDPRICE*LO_DISCOUNT)ASrevenuelineorder_flatLO_ORDERDATE>='1993-01-01'andLO_ORDERDATE<='1993-12-31'ANDLO_DISCOUNTBETWEEN1AND3ANDLO_QUANTITY<25;--Q1.2sum(LO_EXTENDEDPRICE*LO_DISCOUNT)ASrevenuelineorder_flatLO_ORDERDATE>='1994-01-01'andLO_ORDERDATE<='1994-01-31'ANDLO_DISCOUNTBETWEEN4AND6ANDLO_QUANTITYBETWEEN26--Q1.3sum(LO_EXTENDEDPRICE*LO_DISCOUNT)ASrevenuelineorder_flattoISOWeek(LO_ORDERDATE)=6ANDLO_ORDERDATE>='1994-01-01'andLO_ORDERDATE<='1994-12-31'ANDLO_DISCOUNTBETWEEN5AND7ANDLO_QUANTITYBETWEEN2624lineorder_flatlineorder_flatP_BRAND='MFGR#2239'year,P_BRANDyear,P_BRAND;--Q3.1C_NATION,S_NATION,toYear(LO_ORDERDATE)ASyear,sum(LO_REVENUE)ASrevenuelineorder_flatANDLO_ORDERDATE>='1992-01-01'C_NATION,S_NATION,yearyearASC,revenueDESC;----Q2.1sum(LO_REVENUE),toYear(LO_ORDERDATE)ASyear,P_BRANDlineorder_flatP_CATEGORY='MFGR#12'year,P_BRANDyear,P_BRAND;--Q2.2sum(LO_REVENUE),toYear(LO_ORDERDATE)ASyear,P_BRANDlineorder_flatANDP_BRAND<='MFGR#2228'year,P_BRANDyear,P_BRAND;--Q2.3sum(LO_REVENUE),toYear(LO_ORDERDATE)ASyear,P_BRAND/2526----Q3.4C_CITY,S_CITY,toYear(LO_ORDERDATE)ASyear,sum(LO_REVENUE)ASrevenuelineorder_flatC_CITY,S_CITY,yearyearASC,revenueDESC;--Q4.1toYear(LO_ORDERDATE)ASyear,C_NATION,sum(LO_REVENUE-LO_SUPPLYCOST)ASprofitlineorder_flatyear,C_NATIONyearASC,C_NATIONASC;----Q3.2C_CITY,S_CITY,toYear(LO_ORDERDATE)ASyear,sum(LO_REVENUE)ASrevenuelineorder_flatC_NATION='UNITEDSTATES'ANDS_NATION='UNITEDSTATES'ANDLO_ORDERDATE>='1992-01-01'C_CITY,S_CITY,yearyearASC,revenueDESC;--Q3.3C_CITY,S_CITY,toYear(LO_ORDERDATE)ASyear,sum(LO_REVENUE)ASrevenuelineorder_flatANDLO_ORDERDATE>='1992-01-01'C_CITY,S_CITY,yearyearASC,revenueDESC;/2728----Q4.2toYear(LO_ORDERDATE)ASyear,S_NATION,P_CATEGORY,sum(LO_REVENUE-LO_SUPPLYCOST)ASprofitlineorder_flatAND(LO_ORDERDATE>='1997andLO_ORDERDATE<='1998-12-31')year,S_NATION,P_CATEGORYyearASC,S_NATIONASC,P_CATEGORYASC;----Q4.3toYear(LO_ORDERDATE)ASyear,S_CITY,P_BRAND,sum(LO_REVENUE-LO_SUPPLYCOST)ASprofitlineorder_flatS_NATION='UNITEDSTATES'AND(LO_ORDERDATE>='1997andLO_ORDERDATE<='1998-12-31')ANDP_CATEGORY='MFGR#14'year,S_CITY,P_BRANDyearASC,S_CITYASC,P_BRANDASC;/2930标准SSB查询:--Q1.1SUM(LO_EXTENDEDPRICE*LO_DISCOUNT)ASREVENUElineorder,dwdateLO_ORDERDATE=D_DATEKEYANDLO_DISCOUNTBETWEEN1AND3ANDLO_QUANTITY<25;--Q1.2SUM(LO_EXTENDEDPRICE*LO_DISCOUNT)ASREVENUElineorder,dwdateLO_ORDERDATE=D_DATEKEYANDD_YEARMONTHNUM=199401ANDLO_DISCOUNTBETWEEN4AND6ANDLO_QUANTITYBETWEEN26--Q1.3SUM(LO_EXTENDEDPRICE*LO_DISCOUNT)ASREVENUElineorder,dwdateLO_ORDERDATE=D_DATEKEYANDD_WEEKNUMINYEAR=6ANDD_YEAR=1994ANDLO_DISCOUNTBETWEEN5AND7ANDLO_QUANTITYBETWEEN26----Q2.1SUM(LO_REVENUE),D_YEAR,P_BRANDlineorder,dwdate,part,supplierLO_ORDERDATE=D_DATEKEYANDLO_PARTKEY=P_PARTKEYANDLO_SUPPKEY=S_SUPPKEYANDP_CATEGORY='MFGR#12'D_YEAR,P_BRANDD_YEAR,P_BRAND;--Q2.2SUM(LO_REVENUE),D_YEAR,P_BRANDlineorder,dwdate,part,supplierLO_ORDERDATE=D_DATEKEYANDLO_PARTKEY=P_PARTKEYANDLO_SUPPKEY=S_SUPPKEYANDP_BRAND<='MFGR#2228'D_YEAR,32LO_CUSTKEY=C_CUSTKEYANDLO_SUPPKEY=S_SUPPKEYANDLO_ORDERDATE=D_DATEKEYANDC_REGION=S_REGIONC_NATION,S_NATION,D_YEARD_YEARASC,--Q3.2C_CITY,S_CITY,D_YEAR,customer,lineorder,supplier,dwdateLO_CUSTKEY=C_CUSTKEYANDLO_SUPPKEY=S_SUPPKEYANDLO_ORDERDATE=D_DATEKEYANDC_NATION='UNITEDSTATES'ANDS_NATION='UNITEDSTATES'ANDS_NATION=C_NATIONC_CITY,S_CITY,D_YEARD_YEARASC,P_P_BRANDD_YEAR,P_BRAND;--Q2.3SUM(LO_REVENUE),D_YEAR,P_BRANDlineorder,dwdate,part,supplierLO_ORDERDATE=D_DATEKEYANDLO_PARTKEY=P_PARTKEYANDLO_SUPPKEY=S_SUPPKEYANDP_BRAND='MFGR#2339'D_YEAR,P_BRANDD_YEAR,P_BRAND;--Q3.1C_NATION,S_NATION,D_YEAR,customer,lineorder,supplier,dwdate3334lineorder,lineorder,supplier,dwdateLO_CUSTKEY=C_CUSTKEYANDLO_SUPPKEY=S_SUPPKEYANDLO_ORDERDATE=D_DATEKEYAND()AND()ANDD_YEARMONTH='Dec1997'C_CITY,S_CITY,D_YEARD_YEARASC,--Q4.1D_YEAR,C_NATION,SUM(LO_REVENUE-LO_SUPPLYCOST)ASPROFITdwdate,customer,supplier,part,lineorderLO_CUSTKEY=C_CUSTKEYANDLO_SUPPKEY=S_SUPPKEYANDLO_PARTKEY=P_PARTKEYANDLO_ORDERDATE=D_DATEKEY----Q3.3C_CITY,S_CITY,D_YEAR,customer,lineorder,supplier,dwdateLO_CUSTKEY=C_CUSTKEYANDLO_SUPPKEY=S_SUPPKEYANDLO_ORDERDATE=D_DATEKEYAND()AND()C_CITY,S_CITY,D_YEARD_YEARASC,--Q3.4C_CITY,S_CITY,D_YEAR,customer,/3536D_YEAR,C_NATIOND_YEAR,C_NATION;--Q4.2D_YEAR,S_NATION,P_CATEGORY,SUM(LO_REVENUE-LO_SUPPLYCOST)ASPROFITdwdate,customer,supplier,part,lineorderLO_CUSTKEY=C_CUSTKEYANDLO_SUPPKEY=S_SUPPKEYANDLO_PARTKEY=P_PARTKEYANDLO_ORDERDATE=D_DATEKEYAND()D_YEAR,S_NATION,P_CATEGORYD_YEAR,S_NATION,P_CATEGORY;----Q4.3D_YEAR,S_CITY,P_BRAND,SUM(LO_REVENUE-LO_SUPPLYCOST)ASPROFITdwdate,customer,supplier,part,lineorderLO_CUSTKEY=C_CUSTKEYANDLO_SUPPKEY=S_SUPPKEYANDLO_PARTKEY=P_PARTKEYANDLO_ORDERDATE=D_DATEKEYANDS_NATION='UNITEDSTATES'AND()ANDP_CATEGORY='MFGR#14'D_YEAR,S_CITY,P_BRAND;3738TPC-H性能测试中无法正常执行,整体查询周期很长。在两者均完成查询的结果中,开源产品C*与ByteHouse查询时间相差55倍,其中Q3、Q5、Q7等语句的查询效率相差100倍以上,具体数据如下图:39查询查询q2q3q4q5q6q7q8q9q20q22完成时间(ms)开源产品C*002440023886580442559000000ByteHouse40650884640下面列举了本次性能测试所使用的环境信息。每个测试环境3个节点,配置如下:操作系统:CentOSLinuxrelease7.8.2003(Core)ByteHoue企业版:.231customercustomerlineitemnationorderspart2000万partsupp8000万region5supplier100G数据行数41下载tpch-tool工具包生成TPC-H标准测试集scalefactor=100的数据。Bash./dbgen-s100--CreatelocaltableUSEtpch_local;CREATETABLEcustomerONCLUSTERch_benchmark(c_custkeyInt32NOTNULL,c_nameStringNOTNU

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论