本文介绍PolarSearch 1.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 1.0
127860
197938
324857
454070
466709
469483
测试场景 2:shard 6,replica 0
HTTP logs Throughput(docs/s)
Client 1
Client 2
Client 4
Client 8(默认)
Client 16
Client 32
PolarSearch 1.0
172384
288195
512037
741541
783537
785893
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 1.0
77098
113670
183412
259955
271045
272685
测试场景 2:shard 6,replica 0
NYC taxis Throughput(docs/s)
Client 1
Client 2
Client 4
Client 8(默认)
Client 16
Client 32
PolarSearch 1.0
126167
187151
311023
451135
482505
488001
搜索性能测试结果
搜索测试在写入完成后执行,replica=1,target_throughput=0(全速压测模式),评估CPU满载情况下的搜索吞吐量上限(ops/s)。
HTTP logs搜索性能
term — 倒排索引精确查找
在logs-*上做精确词项匹配,命中量固定为10,000 条,返回默认10条。考察PolarSearch 1.0版本倒排索引查找效率、跨shard扇出合并开销以及网络协调层处理能力。
HTTP logs term(ops/s) | Client 1 | Client 2 | Client 4 | Client 8 | Client 16 | Client 32 |
PolarSearch 1.0 | 148 | 312 | 591 | 829 | 1147 | 1475 |
asc_sort_timestamp — doc values排序
对全量文档执行match_all + 按时间戳升序排序,返回前10条。@timestamp为date类型,按照doc values列式存储排序。考察PolarSearch 1.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 1.0 | 133 | 262 | 443 | 579 | 732 | 931 |
range — 时间范围扫描
对@timestamp字段执行动态时间窗口range查询。日志产品90%的查询均带时间过滤,该task考察日期范围扫描效率,与term形成点查与范围查的互补对比。
HTTP logs range(ops/s) | Client 1 | Client 2 | Client 4 | Client 8 | Client 16 | Client 32 |
PolarSearch 1.0 | 106 | 269 | 431 | 573 | 707 | 815 |
hourly_agg — 时序聚合
对全量文档执行date_histogram(按小时分桶)。考察date类型聚合吞吐,是日志监控与统计场景的核心操作。
HTTP logs hourly_agg(ops/s) | Client 1 | Client 2 | Client 4 | Client 8 | Client 16 | Client 32 |
PolarSearch 1.0 | 1.48 | 2.97 | 4.3 | 4.76 | 4.8 | 4.8 |
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 1.0 | 281 | 564 | 1115 | 2022 | 3167 | 4508 |
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 1.0 | 10.63 | 21.07 | 39 | 43 | 43 | 43 |
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 1.0 | 17.55 | 37.64 | 64.55 | 73.38 | 74 | 75.84 |
Geonames搜索性能
Geonames数据集基于全球地名兴趣点数据,包含约1,140万条记录,涵盖地名、国家代码、人口数量及地理坐标等字段,主要考察各产品的多类型查询能力。其中,Geonames数据集规模远小于HTTP logs和NYC taxis,写入耗时短,PolarSearch 1.0版本写入性能差异不显著,不具备对比价值。因此Geonames测试重点聚焦于搜索场景,通过覆盖精确查询、全文检索、聚合统计、地理空间及脚本评分等多个维度,全面评估各产品的查询处理能力。
term — 精确词项匹配
Geonames term(ops/s) | Client 1 | Client 2 | Client 4 | Client 8 | Client 16 | Client 32 |
PolarSearch 1.0 | 434 | 866 | 1615 | 2887 | 4433 | 5755 |
phrase — 全文短语匹配
考察全文检索中的短语匹配能力,需要在倒排索引中校验词项位置信息,计算复杂度高于term查询。
Geonames phrase(ops/s) | Client 1 | Client 2 | Client 4 | Client 8 | Client 16 | Client 32 |
PolarSearch 1.0 | 408 | 782 | 1341 | 2523 | 3737 | 4925 |
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 1.0 | 12 | 24.62 | 45 | 50.55 | 51 | 51 |
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 1.0 | 5 | 9.73 | 17 | 18.62 | 19 | 19 |
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 1.0 | 5.52 | 10.85 | 19 | 20.89 | 21 | 21 |
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 1.0 | 250 | 464 | 864 | 1451 | 1960 | 2469 |