点击了解 RediSearch 的更多信息:RediSearch:作为 Redis 模块的高性能搜索引擎白皮书
RediSearch 是一个构建在 Redis 之上的分布式全文搜索和聚合引擎模块。它使用户能够以极快的速度在其 Redis 数据集上执行复杂的搜索查询。 RediSearch 采用 C 语言编写,其独特的架构从头开始基于优化的数据结构构建,使其成为市场上其他搜索引擎的真正替代品。它作为独立的搜索引擎,在索引和检索可搜索数据方面表现出色。
当我们首次推出 RediSearch 时,我们将其与 Elasticsearch 和 Solr 等流行的搜索引擎进行了基准测试,以测试引擎的强大程度。这次,我们决定尝试一种略有不同的基准测试,以便 (a) 为您提供一个清晰、可重现的设置,所有搜索引擎都经过优化以提供最佳性能,以及 (b) 根据我们从 RediSearch 用户那里看到的情况模拟多个真实场景。
在此搜索基准测试中,我们比较了 RediSearch 和 Elasticsearch 在两种用例下的表现
我们首先对 Wikipedia 的 560 万份文档(5.3GB)进行索引,然后对索引后的数据集执行双词搜索查询。
如下图所示,RediSearch 在 221 秒内构建了索引,而 Elasticsearch 花费了 349 秒,RediSearch 快了 58%。
数据集索引完成后,我们在专用的负载生成器服务器上使用 32 个客户端执行了双词搜索查询。如下图所示,RediSearch 的吞吐量达到 12.5K ops/秒,而 Elasticsearch 为 3.1K ops/秒,即 快了 4 倍。此外,RediSearch 的延迟略好,平均为 8 毫秒,而 Elasticsearch 为 10 毫秒。
在这里,我们模拟了一个多租户电子商务应用,其中每个租户代表一个产品类别并维护自己的索引。在此基准测试中,我们构建了 5 万个索引(或产品),每个索引存储多达 500 份文档(或项目),总计 2500 万份文档。RediSearch 仅在 201 秒内构建了这些索引,平均速度为 12.5 万个索引/秒。然而,Elasticsearch 在创建 921 个索引后崩溃了,显然不是为应对此负载而设计的。
云实例类型 | vCPU | 内存 (GiB) | 网络 |
---|---|---|---|
一台 AWS c4.8xlarge:一台用于负载生成器,一台用于搜索引擎 | 36 | 60 | 10 千兆 |
名称 | 描述与来源 | 文档数 | 大小 |
---|---|---|---|
wikidump | 日期:2019年2月7日 | 5.6M | 5.3 GB |
名称 | 值 |
---|---|
分片数量 |
|
文档表大小 | 10M |
名称 | 值 |
---|---|
分片数量 | 5 |
JVM 设置 (Xms 和 Xmx) | 25GB |
index.refresh_interval | -1 |
index.number_of_replicas | 0 |
Indices.queries.cache.size 和 index.queries.cache.enabled | 如这里所述 |
名称 | 值 |
---|---|
RediSearch | 版本 1.4.3 |
Elasticsearch | 版本 6.6.0,Lucene 版本 7.6.0 |
RediSearch 基准测试 | 基准测试代码在这里 |
我们对 RediSearch 和 Elasticsearch 在以下用例下进行了基准测试
Elasticsearch 是由 Elastic.co 的优秀团队创建的、功能丰富的出色搜索产品,但在性能方面,它存在固有的架构缺陷,如下表所示
组件 | RediSearch | Elasticsearch |
---|---|---|
搜索引擎 | 基于现代优化数据结构的专用引擎 | 基于 Lucene 引擎 |
编程语言 | 基于 C 语言,高度优化 | Java |
内存技术 | 原生运行于 DRAM 和持久内存 | 基于磁盘,带有缓存选项 |
协议 | 优化的RESP (REdis 序列化协议) | HTTP |
阅读更多关于 RediSearch 的信息此处以及其背后的技术。要开始使用 RediSearch – 请试用我们的Redis Cloud Pro此处或下载 Redis Enterprise Software此处。
根据读者的反馈,我们更新了对 wikipedia 数据集的引用,并添加了基准测试源代码的链接,以便重现结果。欢迎提供更多反馈意见。