图片来自Pexels。本文记录测试结果。需要做大数据量分析技术选型的朋友可以参考。服务器信息如下:CPU:IntelXeonGold6240@8x2.594GHz内存:32G系统:CentOS7.6Linux内核版本:3.10.0磁盘类型:机械硬盘文件系统:ext4Clickhouse信息如下:部署方式:单机部署版本:20.8.11.17测试情况测试数据和测试方法来自Clickshouse官方StarSchemaBenchmark:https://clickhouse.tech/docs/en/getting-started/example-datasets/star-schema/按照官方指导创建好测试数据后,先看看数据量和空间使用情况。①数据量和占用空间如下图:可以看出Clickhouse的压缩率很高,压缩率在50以上,基本可以达到70左右。数据量的减少可以在减少磁盘空间使用和提高I/O性能方面非常有效,这对于提高整体查询性能非常有效。supplier,customer,part,lineorder是一个简单的“供应商-客户-订单-区域”星型模型。lineorder_flat就是按照这种星型模式数据关系合并的大宽表。所有的分析都直接在这张大宽表中进行,减少了不必要的表关联,符合我们实际工作中的分析建表逻辑。以下性能测试的所有解析SQL都运行在这个没有表关联查询的大宽表上。查询性能测试详情①查询1.1SELECTsum(LO_EXTENDEDPRICE*LO_DISCOUNT)ASrevenueFROMlineorder_flatWHERE(toYear(LO_ORDERDATE)=1993)AND((LO_DISCOUNT>=1)AND(LO_DISCOUNT<=3))AND(LO_QUANTITY<25)┌──────────收入──┐│44652567249651│└──────────────────────────┘1rowsinset.Elapsed:0.242sec.Processed91.01millionrows,728.06MB(375.91millionrows/s.,3.01GB/s.)扫描线数:91,010,000,约9100万耗时(秒):0.242。查询列数:2结果行数:1②查询1.2SELECTsum(LO_EXTENDEDPRICE*LO_DISCOUNT)ASrevenueFROMlineorder_flatWHERE(toYYYYMM(LO_ORDERDATE)=199401)AND((LO_DISCOUNT>=4)AND(LO_DISCOUNT<=6))AND((LO_QUANTITY>=26)AND(LO_QUANTITY)5<┌────────收入──┐│9624332170119│└──────────────────────┘1rowsinset.Elapsed:0.040sec.Processed7.75millionrows,61.96MB(191.44millionrows/s.,1.53GB/s.)扫描行数:7,750,000,775万.耗时(秒):0.040.查询列数:2.返回的行数:1。③查询2.1SELECTsum(LO_REVENUE),toYear(LO_ORDERDATE)ASyear,P_BRANDFROMlineorder_flatWHERE(P_CATEGORY='MFGR#12')AND(S_REGION='AMERICA')GROUPBYyear,P_BRANDORDERBYyearASC,P_BRANDASC┌──UE─(LO_REVEN)────┐│056428│1992│MFGR#121││63389346096│1992│MFGR#1210│............│......│............││39679892915│1998│MFGR#128││35300513083│1998│MFGR#129└──────────────────────────────┴──────────────┘280rowsinset.Elapsed:8.558sec.Processed600.04millionrows,6.20GB(7011millionrows/s.,725.04MB/s.)扫描行数:600,040,000,约6亿。耗时(秒):8.558。查询列数:3。结果行数:280。④查询2.2SELECTsum(LO_REVENUE),toYear(LO_ORDERDATE)ASyear,P_BRANDFROMlineorder_flatWHERE((P_BRAND>='MFGR#2221')AND(P_BRAND<='MFGR#2228')AND(S_REGION='ASIA')ASGROUPBYyear,P_BRANDORDERCBYyear,P_BRANDORDERCBYyear┌─sum(LO_REVENUE)─┬─year─┬─P_BRAND───┐│66450349438│1992│MFGR#2221││65423264312│1992│MFGR#2222││......................................。...│…………││39907545239│1998│MFGR#2227││40654201840│1998│MFGR#2228│└────────────────────┴────────┴────────────┘56rowsinset.Elapsed:1.242sec.Processed600.04millionrows,5.60GB(482.97millionrows/s.,4.51GB/s.)扫描行数:600,040,000,约6亿条耗时(秒):1.242查询列数:3,结果行数:56⑤查询3.1SELECTC_NATION,S_NATION,toYear(LO_ORDERDATE)ASyear,sum(LO_REVENUE)ASrevenueFROMlineorder_flatWHERE(C_REGION='ASIA')AND(S_REGION='ASIA')AND(year>=1992)AND(year<=1997)GROUPBYC_NATION,S_NATION,yearORDERBYyearASC,revenueDESC┌─C_NATION──┬─S_NATION──┬─year─┬──────收入─┐│INDIA│INDIA│1992│537778456208││INDONESIA│1992│536681409304.│....│..........│......│......││中国│中国│1997│525562838002││日本│越南│1997│525495763677│└──────────────┴──────────────┴────────┴────────────────────────────────────────────────┘150rowsinset.Elapsed:3.533sec。Processed546.67millionrows,5.48GB(154.72millionrows/s.,1.55GB/s.)扫描行数:54667万行,约5.4亿。耗时(秒):3.533。查询列数:4。结果行数:150。⑥查询3.2SELECTC_CITY,S_CITY,toYear(LO_ORDERDATE)ASyear,sum(LO_REVENUE)ASrevenueFROMlineorder_flatWHERE(C_NATION='UNITEDSTATES')AND(S_NATION='UNITEDSTATES')AND(year>=1992)AND(year<=1997)GROUPBYC_CITY,yearORDERBYyearASC,revenueDESC┌──C_CITY──────┬──S_CITY──────┬──年──┬──────revenue──┐│UNITEDST6│UNITEDST6│1992│5694246807││UNITEDST0│UNITEDST0│1992│5676049026│...........│......│......│......│UNITEDST9│UNITEDST9│1997│4836163349││UNITEDST9│UNITEDST5│1997│4769919410│└───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘600rowsinset.Elapsed:1.000sec.Processed546.67millionrows,5.56GB(546.59millionrows/s.,5.56GB/s。)扫描行数:546,670,000,约5.4亿。经过的时间(秒):1.00。查询列数:4。结果行数:600。⑦查询4.1SELECTtoYear(LO_ORDERDATE)ASyear,C_NATION,sum(LO_REVENUE-LO_SUPPLYCOST)ASprofitFROMlineorder_flatWHERE(C_REGION='AMERICA')AND(S_REGION='AMERICA')AND((P_MFGR='MFGR#1')OR(P_MFGR#'MFGR2'))GROUPBYyear,C_NATIONORDERBYyearASC,C_NATIONASC┌─year─┬─C_NATION────────┬────────利润─┐┐┐┐1992│阿根廷│1041983042066││1992│巴西│1031193572794││。...│……│…………││1998│秘鲁│603980044827││1998│美国│605069471323│└──────┴──────────────────┴────────────────────────────────┘35rowsinset.Elapsed:5.066sec.Processed600.04millionrows,8.41GB(118.43millionrows/s.,1.66GB/s.)扫描线数:600,040,000,约6亿。耗时(秒):5.066。查询列数:4。结果行数:35。⑧查询4.2SELECTtoYear(LO_ORDERDATE)ASyear,S_NATION,P_CATEGORY,sum(LO_REVENUE-LO_SUPPLYCOST)ASprofitFROMlineorder_flatWHERE(C_REGION='AMERICA')AND(S_REGION='AMERICA')AND((year=1997)OR(year=1998))AND((P_MFGR='MFGR#1')OR(P_MFGR='MFGR#2'))GROUPBYyear,S_NATION,P_CATEGORYORDERBYyearASC,S_NATIONASC,P_CATEGORYASC┌─year─┬─S_NATION──────┬─P_CATEGORY─┬────────利润─┐┐│1997│阿根廷│MFGR#11│102369950215││1997│阿根廷│MFGR#12│103052774082││......│............│.......│............│1998│美国│MFGR#24│60779388345││1998│美国│MFGR#25│60042710566│└────────┴──────────────────┴──────────────────────────────────────────────────┘100rowsinset.Elapsed:0.826sec.Processed144.42millionrows,2.17GB(174.78millionrows/s.,2.63GB/s.)扫描行数:144,420,000,大约1.4亿。耗时(秒):0.826。查询列数:4结果行数:100性能测试结果总结如下图:在目前的软硬件环境下,扫描了6亿多行数据,普通的分析语句大约可以返回结果最慢的第一次运行8秒。当改变同样的分析逻辑,再次查询条件时,效率明显提升,可以缩短到1秒左右。如果只是简单的列查询,没有加减乘除聚合等逻辑,第一次扫描全表6亿多行数据的查询基本可以在2秒内执行完。作者:LifeLogs编辑:陶佳龙来源:cnblogs.com/asimov/p/14546106.html
