前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Redis通过多线程查询引擎将查询吞吐量提高了16倍!

Redis通过多线程查询引擎将查询吞吐量提高了16倍!

作者头像
用户1278550
发布2024-07-02 17:03:20
1370
发布2024-07-02 17:03:20
举报
文章被收录于专栏:idbaidba

Redis 一直以来都追求数据访问速度。我们的使命是为企业提供极速的数据访问能力和人工智能基础设施,使之能够大规模应用。我们最新改进的 Redis 查询引擎,加速查询、搜索以及提升向量工作负载,以更快的速度提供更高的吞吐量。这意味着您可以构建更快速的应用程序,并在扩展时为最终用户提供更好的性能。

我们正式宣布新版本的 Redis 查询引擎 GA。新的 Redis 查询引擎将当前版本的 Redis 查询吞吐量提升了 16 倍,使其速度超过了我们基准测试中所有其他的向量数据库。

Redis 提供了优于其他任何厂商的性能表现。

我们测试了其他顶尖的七个向量数据库,Redis 在各种场景中都表现卓越。在性能测试中使用行业标准的基准测试,在相同的硬件条件下,使用四个不同案例的数据集进行测试。

欲了解更多关于我们如何实现这一目标的内容,请阅读我们的技术博客 技术博客

我们的用户正在构建 高吞吐,低延迟的创新应用。随着生成式人工智能(GenAI)的发展,客户部署的聊天机器人需要实时的检索增强生成(RAG),必须瞬间处理多个步骤并从向量数据库中检索数据。同时,大规模语言模型(LLMs)不断加快速度,这也增加了其他组件需要加速的需求。OpenAI 发布了 GPT-4o,而谷歌推出了 Gemini 1.5 Flash,以应对应用程序对实时性能的需求。这些应用需要在高负载下大规模地以毫秒级响应,因此我们需要提升吞吐量以支持客户不断变化的需求。

Redis 查询引擎采用多线程来提升查询吞吐量。

Redis 能够实现高性能,得益于几个关键的设计选择。

首先,Redis 一直以来都是单线程的架构。Redis 的架构采用了“无共享”模型,避免了多线程访问内存时的瓶颈和锁定问题。另一个设计原则是,每个操作都需要具有低时间复杂度。因此,即便是单线程,Redis 也能够提供非常高的吞吐量。

随着越来越多的用户将 Redis 用于实时数据平台,对其独特的高级查询能力的需求也在不断增长。要为高速应用传递更相关的数据,需要更复杂和精细的查询。当数据量增加到数亿个文档时,部分查询的RT也相应增加。这导致在执行复杂查询时花费更多的时间,从而减少了主线程的可用性,限制了吞吐量的提升。虽然横向扩展可以提升 Redis 操作的吞吐量,但在 Redis 查询上则不适用。我们必须进行纵向扩展。

通过使查询能够并发访问索引,Redis 实现了纵向扩展,不仅使 Redis 操作的吞吐量得到提升,也使查询的吞吐量得到提升。新的 Redis 查询引擎为需要更高吞吐量的大型数据集解锁了新的性能层级。在速度方面,我们的延迟依然保持在亚毫秒级的响应,如开发者对 Redis 操作的期望那样,而查询的平均延迟则维持在个位数毫秒级。

多线程在大规模搜索时显著提升了速度。

要有效地扩展搜索,需要将数据负载的水平分布(扩展出去)和多线程的纵向扩展(向上扩展)结合起来,从而在访问索引时实现并发。下图展示了单个分片的架构。

架构说明:

水平分布:数据被分片,分散到多个 Redis 实例中,通过分布式处理来均衡负载。

多线程:每个分片内部采用多线程并发访问索引,提高数据查询和检索速度,使系统能高效地处理更多请求。

这种架构设计充分利用了 Redis 的分布式能力和多线程技术,使得在处理大规模数据时,搜索速度显著提升。

多个查询分别在独立线程上执行。我们采用了简单但著名的生产者-消费者模式

  1. 查询上下文准备:在主线程上准备查询上下文(规划),并将其放入共享队列中。
  2. 并发执行:线程从队列中获取任务,并与其他线程并发地执行查询流水线。这允许我们在保持主线程活跃的情况下执行多个并发查询,主线程可以处理更多的传入请求,例如其他 Redis 命令,或者准备和排队更多的查询。
  3. 结果返回:查询完成后,结果会被发送回主线程。

这种设计使得我们能够有效地处理大量并发查询,同时保持主线程的灵活性和响应能力。

我们将 Redis 与三类向量数据库提供商进行了对比。

这三类包括纯粹的向量数据库提供商、具备向量功能的通用数据库以及 Redis 模仿者。我们发现,这三类在速度、扩展性及企业功能上有显著的差异。纯粹的向量数据库在性能方面较佳,但在扩展性上表现不佳;通用数据库在性能上明显落后,但在其他集成方面表现更好。而 Redis 模仿者在没有最新的速度改进情况下,明显速度较慢。许多用户认为 Redis 模仿者速度相同,但我们希望通过对比揭示现实,帮助您节省时间和金钱。

Redis 的速度比纯粹的向量数据库更快,而且扩展性也更强。

我们从客户那里了解到的一个挑战是,他们需要一种能够支持大规模应用并提供企业级服务的解决方案。在我们对其他纯向量数据库进行基准测试时,自己也遇到了类似的问题,即在高负载下很难保持服务的可用性。这迫使我们将测试环境从它们的云服务迁移到本地部署进行基准测试。尽管这些向量数据库的性能相对较接近,但在我们的测试中,它们在云服务设置和运行过程中存在一些问题。我们在详细的基准测试报告中记录了这些问题。

Redis 比增加向量支持的通用数据库快得多。 随着检索增强生成(RAG)成为增强生成式人工智能(GenAI)应用的顶级框架,过去两年向量数据库选项激增。许多已经被广泛采用的数据库新增了向量支持,因此也可以方便地用于向量操作。然而,我们发现 Redis 在这一点上发挥了其一贯的优势:速度快。Redis 被广泛使用的原因之一是我们加速了传统数据库的数据访问。同样地,我们的客户也更喜欢 Redis,因为我们以同样的方式加速了 GenAI 应用。 Redis 在这一领域依旧保持了它快速高效的特点,无论是对于传统的数据访问需求,还是对于新兴的向量操作需求,都能提供卓越的性能表现。

Redis 模仿者无法跟上脚步。 与其他 Redis 模仿者相比,如 Amazon MemoryDB 和 Google Cloud MemoryStore for Redis,Redis 展现出了显著更高的吞吐量。对于低维度数据集,Redis 的吞吐量是 Amazon MemoryDB 的 3.9 倍,是 Google Cloud MemoryStore for Redis 的 77% 以上。不要满足于模仿者,选择 Redis 才能真正体验到卓越的性能。

Redis 一直以其高性能和可靠性著称,无论是在处理传统数据还是新兴的向量数据操作,都能够提供最佳的解决方案,不仅能够满足当前的需求,还能为未来的扩展预留足够的空间。 参考资料

详细的测试过程以及对数据的解释清参考如下文章连接:

https://redis.io/blog/benchmarking-results-for-vector-databases/

原文 https://redis.io/blog/announcing-faster-redis-query-engine-and-our-vector-database-leads-benchmarks/

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-06-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 yangyidba 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Redis 提供了优于其他任何厂商的性能表现。
  • Redis 查询引擎采用多线程来提升查询吞吐量。
  • 多线程在大规模搜索时显著提升了速度。
    • 架构说明:
    • 我们将 Redis 与三类向量数据库提供商进行了对比。
    • Redis 的速度比纯粹的向量数据库更快,而且扩展性也更强。
    • Redis 比增加向量支持的通用数据库快得多。 随着检索增强生成(RAG)成为增强生成式人工智能(GenAI)应用的顶级框架,过去两年向量数据库选项激增。许多已经被广泛采用的数据库新增了向量支持,因此也可以方便地用于向量操作。然而,我们发现 Redis 在这一点上发挥了其一贯的优势:速度快。Redis 被广泛使用的原因之一是我们加速了传统数据库的数据访问。同样地,我们的客户也更喜欢 Redis,因为我们以同样的方式加速了 GenAI 应用。 Redis 在这一领域依旧保持了它快速高效的特点,无论是对于传统的数据访问需求,还是对于新兴的向量操作需求,都能提供卓越的性能表现。
    相关产品与服务
    云数据库 Redis
    腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档