本文介绍TairSearch、ElasticSearch数据写入和搜索性能的测试方法及测试结果。
TairSearch是基于Redis module全自研(不基于Lucene等开源搜索库)的全文搜索数据结构,采用和Elasticsearch相似(ES-LIKE)的查询语法,可实现高效的全文搜索,更多信息请参见TairSearch。
测试说明
测试环境
执行测试的服务器规格:
- 架构:x86_x64
- 内存:251 GB
- CPU:32 Core,64 Threads
- 操作系统版本:Linux 4.19.91-011.ali4000.alios7.x86_64
数据库内核:
TairSearch | ElasticSearch |
---|---|
|
|
测试数据
本次测试数据为维基百科公开的英文文章摘要。
压测工具
下载TairSearch测试工具,解压后,选择对应操作系统(Linux、Windows、Darwin)的二进制可执行文件。
以Linux为例,执行
./TairSearchBench.linux --help
可查看使用方法,用法如下:Usage of ./TairSearchBench.linux:
-a string
The address of network to connect
# 实例连接地址。
-c int
Benchmark concurrency (default 30)
# 并发数,默认为30。
-e string
The engine backend to run [tairsearch/elasticsearch]
# 指定运行引擎为TairSearch或ElasticSearch。
-f string
Input file to ingest data from (wikipedia abstracts)
# 执行数据文件路径。
-h string
Print usage (default "help")
# 显示使用方法。
-n uint
Specify the number of times to benchmark (default 10000)
# 指定总测试数,默认为10000。
-q string
Search query string to benchmark
# 指定压测的查询语句。
-t string
Specify the type of benchmark [write/search]
# 指定测试类型为write或search。
测试步骤与测试用例
测试结果
- 数据写入
类别 TairSearch ElasticSearch(Refresh频率为1s) 使用内存(GB) 3.89 5 GB内存与1 GB磁盘 总耗时(s) 257.33 1995.75 QPS值 19430.09 2505.34 平均时延(ms) 1.54 11.97 说明 同时测试了ElasticSearch(Refresh为实时),由于写入时间较慢,仅测试写入个1000个文档数,压测并发数为30,测试结果:总耗时为5.16s、QPS值为199.54、平均时延为148.22ms。 - 关键字查询
类别 TairSearch ElasticSearch 总耗时(s) 7.04 39.56 QPS值 14209.48 2528.23 平均时延(ms) 2.11 11.86 - 聚合查询
类别 TairSearch(默认) TairSearch(关闭Query cache) ElasticSearch(默认) ElasticSearch(关闭缓存) 总耗时(s) 1.75 124.98 12.86 121.95 QPS值 57025.44 800.37 7780.01 82.24 平均时延(ms) 0.53 37.48 3.86 364.60 说明 ElasticSearch(关闭缓存)由于查询较慢,仅查询10000次,其余均为100000次。
总结
TairSearch经过精巧的倒排索引设计和算法实现,充分利用了内存运算速度快的优势,提升数据写入与查询性能;通过并发结构的设计实现无锁并发搜索,提升搜索吞吐量;同时在实现时尽量保证存储的局部性,提升缓存命中(Cache hit)概率。