本文介绍PolarSearch 3.0版本在HTTP logs、NYC taxis与Geonames三个标准负载下的OpenSearch Benchmark性能测试结果。
具体测试步骤请参见PolarSearch基准性能测试方法。
写入性能测试结果
写入测试使用append-no-conflicts-index-only test procedure,将完整语料批量写入集群,评估在不同并发写入客户端数(bulk_indexing_clients)下的写入吞吐量(docs/s)。每轮测试均从空索引开始。
HTTP logs 写入性能
数据集基于1998年世界杯期间真实Web服务器访问日志,包含约2.47亿条日志记录。
测试场景1:shard 6,replica 1
HTTP logs Throughput(docs/s)
Client 1
Client 2
Client 4
Client 8(默认)
Client 16
Client 32
PolarSearch 3.0
129830
216656
345442
528321
552017
551569
测试场景2:shard 6,replica 0
HTTP logs Throughput(docs/s)
Client 1
Client 2
Client 4
Client 8(默认)
Client 16
Client 32
PolarSearch 3.0
189685
326329
577366
880890
957399
951244
NYC taxis 写入性能
数据集基于2015年纽约出租车行程数据,包含约1.65亿条记录。
测试场景1:shard 6,replica 1
NYC taxis Throughput(docs/s)
Client 1
Client 2
Client 4
Client 8(默认)
Client 16
Client 32
PolarSearch 3.0
92773
134968
222221
321173
335255
336760
测试场景2:shard 6,replica 0
NYC taxis Throughput(docs/s)
Client 1
Client 2
Client 4
Client 8(默认)
Client 16
Client 32
PolarSearch 3.0
139770
222312
370978
555390
601674
598330
搜索性能测试结果
搜索测试在写入完成后执行,replica=1,target_throughput=0(全速压测模式),评估CPU满载情况下的搜索吞吐量上限(ops/s)。
HTTP logs搜索性能
term - 倒排索引精确查找
在logs-*上做精确词项匹配,命中量固定为10,000 条,返回默认10条。考察PolarSearch 3.0版本倒排索引查找效率、跨shard扇出合并开销以及网络协调层处理能力。
HTTP logs term(ops/s) | Client 1 | Client 2 | Client 4 | Client 8 | Client 16 | Client 32 |
PolarSearch 3.0 | 256 | 519 | 868 | 1361 | 1914 | 2592 |
asc_sort_timestamp - doc values排序
对全量文档执行match_all + 按时间戳升序排序,返回前10条。@timestamp为date类型,按照doc values列式存储排序。考察PolarSearch 3.0版本doc values读取效率、top-N堆排序及协调节点合并能力。
HTTP logs asc_sort_timestamp(ops/s) | Client 1 | Client 2 | Client 4 | Client 8 | Client 16 | Client 32 |
PolarSearch 3.0 | 193 | 432 | 779 | 1020 | 1514 | 2073 |
range - 时间范围扫描
对@timestamp字段执行动态时间窗口range查询。日志产品90%的查询均带时间过滤,该task考察日期范围扫描效率,与term形成点查与范围查的互补对比。
HTTP logs range(ops/s) | Client 1 | Client 2 | Client 4 | Client 8 | Client 16 | Client 32 |
PolarSearch 3.0 | 219 | 494 | 893 | 1338 | 2005 | 2646 |
hourly_agg - 时序聚合
对全量文档执行date_histogram(按小时分桶)。考察date类型聚合吞吐,是日志监控与统计场景的核心操作。
HTTP logs hourly_agg(ops/s) | Client 1 | Client 2 | Client 4 | Client 8 | Client 16 | Client 32 |
PolarSearch 3.0 | 48 | 145 | 251 | 315 | 339 | 346 |
NYC taxis 搜索性能
match-all - 基础调度基线
对全量约1.65亿条记录执行match_all,仅返回默认10条,无排序、无聚合。考察引擎请求解析、shard调度及结果序列化的基础路径效率。
NYC taxis match-all(ops/s) | Client 1 | Client 2 | Client 4 | Client 8 | Client 16 | Client 32 |
PolarSearch 3.0 | 271 | 612 | 1292 | 2326 | 3668 | 5531 |
range - 数值范围扫描
对total_amount(车费金额,scaled_float类型)执行固定数值范围过滤,查询车费在5~15美元之间的行程,返回默认10条。考察数值字段范围扫描效率。
NYC taxis range(ops/s) | Client 1 | Client 2 | Client 4 | Client 8 | Client 16 | Client 32 |
PolarSearch 3.0 | 161 | 441 | 906 | 1335 | 1723 | 1958 |
autohisto_agg - 自适应时间聚合
对20天时间窗口内的数据执行auto_date_histogram(自动分桶,buckets=20),考察引擎自适应聚合能力。与range形成互补(range是数值范围查询,auto_date_histogram是时间范围聚合)。
NYC taxis autohisto_agg(ops/s) | Client 1 | Client 2 | Client 4 | Client 8 | Client 16 | Client 32 |
PolarSearch 3.0 | 170 | 444 | 733 | 966 | 1117 | 1142 |
Geonames 搜索性能
Geonames数据集基于全球地名兴趣点数据,包含约1,140万条记录,涵盖地名、国家代码、人口数量及地理坐标等字段,主要考察各产品的多类型查询能力。其中,Geonames数据集规模远小于HTTP logs和NYC taxis,写入耗时短,PolarSearch 3.0版本写入性能差异不显著,不具备对比价值。因此Geonames测试重点聚焦于搜索场景,通过覆盖精确查询、全文检索、聚合统计、地理空间及脚本评分等多个维度,全面评估各产品的查询处理能力。
term - 精确词项匹配
Geonames term(ops/s) | Client 1 | Client 2 | Client 4 | Client 8 | Client 16 | Client 32 |
PolarSearch 3.0 | 594 | 1118 | 2004 | 3871 | 5851 | 8186 |
phrase - 全文短语匹配
考察全文检索中的短语匹配能力,需要在倒排索引中校验词项位置信息,计算复杂度高于term查询。
Geonames phrase(ops/s) | Client 1 | Client 2 | Client 4 | Client 8 | Client 16 | Client 32 |
PolarSearch 3.0 | 481 | 1153 | 1686 | 3014 | 4719 | 6803 |
country_agg_uncached - terms聚合 + 嵌套子聚合
对全量文档执行terms聚合(按国家代码分桶)+ 嵌套sum子聚合,聚合缓存禁用以反映真实计算开销。该任务是计算密集型聚合场景的代表,考察引擎在重聚合场景下的CPU利用效率。
Geonames country_agg_uncached(ops/s) | Client 1 | Client 2 | Client 4 | Client 8 | Client 16 | Client 32 |
PolarSearch 3.0 | 17 | 32.56 | 40.95 | 43.56 | 45 | 45 |
decay_geo_gauss_function_score - 地理距离衰减评分
基于geo_point字段执行地理距离衰减函数评分查询(Gaussian 衰减),综合考察地理空间索引查询效率与评分计算能力。
Geonames decay_geo_gauss(ops/s) | Client 1 | Client 2 | Client 4 | Client 8 | Client 16 | Client 32 |
PolarSearch 3.0 | 5.78 | 11.32 | 19 | 21 | 21.38 | 21.34 |
painless_static - Painless脚本自定义评分
使用Painless脚本对每条文档执行自定义评分计算,脚本预编译后以静态方式执行(static binding)。该任务考察引擎脚本执行引擎(JIT 编译)的计算吞吐,是高自定义评分场景的典型代表。
Geonames painless_static(ops/s) | Client 1 | Client 2 | Client 4 | Client 8 | Client 16 | Client 32 |
PolarSearch 3.0 | 12 | 14 | 21 | 23.51 | 23.71 | 23.74 |
desc_sort_population - doc values数值排序
对全量文档按population(整数类型)降序排序,返回前10条。按照doc values列式存储完成排序。考察数值字段列式读取效率及top-N排序性能。
Geonames desc_sort_population(ops/s) | Client 1 | Client 2 | Client 4 | Client 8 | Client 16 | Client 32 |
PolarSearch 3.0 | 316 | 463 | 1047 | 1894 | 2577 | 3593 |