RediSearch与Elasticsearch对比

RediSearch是基于redis构建的分布式全文搜索和聚合引擎,能以极快的速度在redis数据集上执行复杂的搜索查询。

RediSearch架构采用C语言编写,基于优化的数据结构进行构建,用于索引和检索数据。

RediSearch与Elasticsearch对比

基准测试

a)基于一个清晰的、可重现的配置,所有搜索引擎都经过优化,以提升性能。

b)从用户角度模拟多个真实RediSearch应用场景。

基准

1、索引并查询维基百科数据集。

2、在多租户环境中快速编制索引。

维基百科基准测试

从Wikipedia索引了560万个文档(5.3GB),对索引的数据集执行两个单词的搜索查询。

索引构建测试结果

如下图所示,RediSearch构建索引耗时221秒,Elasticsearch耗时349秒,RediSearch比Elasticsearch快58%。

RediSearch indixing results

检索测试结果

在专用负载生成服务器上运行32个客户端,执行两个单词的检索操作。

如下图所示,RediSearch吞吐量达12.5K ops/sec,Elasticsearch为3.1K ops/sec。

此外,RediSearch延迟相对小一点,平均为8毫秒,Elasticsearch为10毫秒。

RediSearch查询结果

多租户索引测试

模拟多租户电子商务应用程序,每个租户代表一个产品类别并维护自己的索引。

基准测试将构建5万个索引(产品),每个索引最多存储500个文档(项目),共包含2500万个文档。

RediSearch构建仅用201秒,平均每秒执行12.5万。

Elasticsearch在921个索引之后崩溃了,显然,它并不是为处理这种负载而设计。

RediSearch multi tenent indexing

基准配置

硬件

云实例类型:AWS c4.8xlarge

vCPU:36

Mem (GiB):60

Network:10千兆

数据集

wikidump

size:5.3 GB

Elasticsearch配置

Number of shards:5用于维基百科基准、20用于多租户基准

Doc table size:10M

RediSearch配置

Number of shards:5

JVM settings (Xms and Xmx) :25GB

index.refresh_interval: -1

index.number_of_replicas: 0

Indices.queries.cache.size and index.queries.cache.enabled query cache

测试版本

RediSearch: Version 1.4.3

Elasticsearch: Version 6.6.0

RediSearchBenchmark: 基准测试代码

测试结论

维基百科用例:

RediSearch构建索引速度比es快58%,执行两个单词检索时比es快4倍。

多租户用例:

RediSearch 201秒创建了50k索引,Elasticsearch创建921个索引后崩溃。

Elasticsearch是一个功能丰富的搜索产品,但性能却受限于固有的架构缺陷,以下是参照:

RediSearch

基于现代引擎和专用优化的数据结构。

C语言

在DRAM和持久内存上运行

优化的RESP(REdis序列化协议)

Elasticsearch

基于Lucene引擎

Java语言

基于磁盘的缓存选项

HTTP协议