小圆点 未来发展的快速功能即将来到你所在城市举办的活动中。

在 Redis 发布活动中加入我们

RediSearch 1.6 性能提升高达 64%

新推出的 RediSearch 1.6 增添了一些重要的新功能,包括别名、低级 API、改进的查询验证以及将 Fork 垃圾收集作为模块的默认选项。但是,更重要的是,RediSearch 1.6 中的原始代码已经过重构,以显著提升性能。改进的性能带来了更好的用户体验,因为应用程序的响应能力比以往任何时候都强。

(有关 RediSearch 1.6 中新功能的更多信息,请参阅我们博客上的帖子 宣布 RediSearch 版本 1.6.)

RediSearch 1.6 中的性能提升究竟有多大?这就是此帖子的全部内容,我们很快就会得到结果。但是为了完全了解性能问题,我们需要一种正确比较数据库搜索速度的方法。 

为了将 RediSearch 版本 1.6 与之前的 1.4 版本进行比较,我们创建了一个全文搜索基准测试。FTSB(已获得许可,具体请参见 麻省理工学院)专门设计用于帮助开发人员、系统架构师和 DevOps 从业人员为其工作负载找到最佳搜索引擎。它允许我们生成数据集,然后对常见搜索查询进行读写性能测试。它支持 两个数据集,这些数据集具有不同的特性:

  • enwiki-abstract:来自 英文维基百科:数据库页面摘要。此用例将生成 590 万个文档,每个文档具有 3 个 TEXT 字段,并且预期的平均文档大小约为 250 字节。
  • enwiki-pages:来自 英文维基百科:数据库上一次的页面修订,包含从完整的维基百科 XML 转储中提取的已处理元数据。此用例将生成 4 个 TEXT 字段(2 个可排序的)、1 个可排序的 TAG 字段以及每个文档的 6 个可排序的 NUMERIC 字段,并且预期的平均文档大小约为 400 字节。

为获得可重复的结果,生成要插入的数据和要运行的查询,并在任何可能的地方使用本机 Go 客户端连接到每个数据库。为了设计共同的基准套件,所有延迟结果均包括与客户端通信的往返网络时间 (RTT),以便我们可以正确地比较其他数据库。

我们建议您亲自运行这些基准以独立验证您在所选硬件和数据集上的结果。更重要的是我们希望收到对工具的反馈和扩展请求,并提出进一步的使用案例(例如电子商务、JSON 数据、地理数据等)和问题域。如果您是全文搜索引擎的开发者,并希望将您的数据库包含在 FTSB 中,请随时打开 issue 或拉取请求以添加它。

测试基础架构

我们在通过基准测试基础架构预置的 Amazon Web Services 实例上运行性能基准。基准测试客户端和数据库服务器都在各自的 c5.24xlarge 实例上运行。测试在单节点 Redis Enterprise 集群设置(版本 5.4.10-22)上执行,数据分布在 10 个主分片上。

除了此主要基准/性能分析场景外,我们还启用了在网络、内存、CPU 和 I/O 上运行基准基准,从而了解底层网络和虚拟机特性。我们将基准测试基础架构表示为代码,使其易于复制且稳定。

数据集和插入速率

下表显示了我们在本基准中使用的数据集的大小。它还显示了每个数据集的总体索引速率。您可以看到 RediSearch 1.6 并不会降低摄入时的性能

FSTB 当前支持三个全文搜索查询,如下表所示(请记住延迟结果包括 RTT)。请注意,我们计划使用更具多样性的 读取查询 集来扩展此基准套件。

我们可以在上表中观察到,RediSearch 1.6 改进的 q99 使其更具可预测性,延迟峰值更少。下图显示,与 RediSearch 1.4 相比,RediSearch 1.6 将吞吐量提高了 48% 至 63%。

同样,延迟 (q50) 下降了 51% 至 64%。 

聚合查询

除了简单的搜索查询外,我们还添加了一组聚合查询。每个查询执行的操作的详细信息可以在我们的 基准存储库 中找到(请再次注意,延迟结果包括 RTT):

在此,RediSearch 1.6 也改善了与 RediSearch 1.4 相比的性能。吞吐量提高了 15% 至 64%:

同样,延迟 (q50) 下降了 17% 至 73%

RediSearch 1.6 的数据

综上所述,您可以看到 RediSearch 1.6 与版本 1.4 相比带来了显著的性能优势。具体来说,RediSearch 1.6 将简单的全文搜索吞吐量提高了 63%,同时将延迟 (q50) 减少了 64%。对于聚合查询,吞吐量增加了 15% 至 64%

同样重要的是,全文搜索基准测试的引入帮助我们持续监控不同版本 RediSearch 之间的性能,并且已被证明在消除性能瓶颈和强化我们的解决方案方面极具价值。