目录
一、引言
本基准测试参考自Redis官方博客,本文仅做汇总说明,具体原文可参见:
https://redis.io/blog/search-benchmarking-redisearch-vs-elasticsearch/
二、压测明细
测试项 | 测试说明 | Redis Search | Elastic Search | 结果对比 |
---|---|---|---|---|
索引时长 | 预先导入维基百科的560万份文档(5.3GB), 之后创建索引,记录索引完所有数据的时长 | 221秒 | 349秒 | RS比ES快58% |
搜索性能 | 32个客户端同时对索引的数据集 执行双字(同时检索两个词)搜索查询, 记录吞吐量和平均耗时 | 吞吐量:12.5K/秒 平均耗时:8毫秒 | 吞吐量:3.1K/秒 平均耗时:10毫秒 | RS吞吐量是ES的4倍, RS平均耗时稍微优于ES |
多租户索引 (海量索引) | 同时创建50K个索引, 每个索引存储多达500文档, 总计250万文档 | 总共花费201秒, 平均每秒索引125K个文档 | 在921个索引之后崩溃了 | RS更适用于海量索引的场景, 而ES无法应付这种负载 |
具体的测试统计结果如下图:
三、压测环境及相关配置
相关链接如下:
- wikidump
- Like mentioned here
- Benchmark code here
四、总结
基于上文中的压测过程对Redis Search和ElasticSearch进行了基准测试,总结如下:
- 一个简单的维基百科用例我们发现RedisSearch在索引上
快了58%
,在索引数据集上执行双词搜索时快了4倍
。 - 一个更高级的
多租户用例
Redis Search在201秒内
创建了50k个索引
,而ElasticSearch在创建921个索引
后崩溃了。
ElasticSearch是一个功能丰富的搜索产品,但是在性能方面,它存在固有的架构缺陷,关于二者间的区别总结如下表:
组件 | RediSearch | Elasticsearch |
---|---|---|
搜索引擎 | 基于现代和优化数据结构的专用引擎 | 基于Lucene引擎 |
编程语言 | 基于C,极度优化 | Java |
内存技术 | 本地运行在DRAM和持久内存上 | 基于磁盘并有缓存选项 |
协议 | 优化的RESP(REdis序列化协议) | HTTP |