Redis 的内存架构众所周知。当您需要“高吞吐量下的快速响应”时,Redis 是显而易见的选择。
Redis 也以“结构存储”而闻名。虽然其他数据库以表/列、文档或键值对的形式对数据进行建模,但 Redis 同时支持所有这些结构。您可以将表、文档、键值对和其他数据类型组合到一个数据库中,并为每个实体分配最适合其的数据类型。如果您“掀开引擎盖”,查看其他可用引擎,您会发现存储在数据库中的文档通常会被分割并存储在系统理解的某些底层本机数据类型中。Redis 没有这样的抽象!每种数据类型都以本机方式存储在引擎中,并附带其自己的“动词”来对数据类型执行本机操作。借助模块(于 2016 年 5 月推出),您现在可以将自己的复杂数据类型嵌入 Redis 中,而不会牺牲性能。
在 Redis,我们已经使用模块有一段时间了。一个月前,我们推出了 RediSearch 模块,它通过将倒排全文索引与内存架构相结合,提供了最快的搜索引擎。本周,我们 发布了另一个突破性的模块:Redis-ML,它与流行的 Apache Spark MLlib 和其他机器学习库一起使用。
使用 Spark + Redis-ML,您可以将 Spark 生成的 ML 模型直接保存在 Redis 中,并为交互式实时应用程序生成预测。我们与 Databricks 团队一起开发了这种方法,因为我们对 Spark 训练 ML 模型的能力印象深刻。但是,在进行实时预测时,Redis 是引擎!借助 Redis 的企业集群,您可以
Apache Spark 的典型机器学习流程如下所示
Spark 使用您的历史数据训练模型。该模型通常保存在磁盘上,并在以后加载以生成预测。但是,Spark 特别不适合最终用户应用程序。
通过结合 Spark 和 Redis 的优势,您可以极大地简化流程:(1) 使用 Spark 进行训练后,您可以使用 Redis-ML 将 ML 模型直接保存在 Redis 中,然后 (2) 使用 Redis-ML“动词”为交互式应用程序实时生成预测。
Redis 团队使用大约 1000 个模型进行了基准测试,每个模型都包含大约 15,000 棵树,这些树由 Spark ML 使用随机森林算法生成。使用 Spark ML 的 Redis ML 使模型分类时间减少了 13 倍,而无需使用任何额外的内存,同时还减少了模型保存和加载时间!
操作 | Spark 延迟 | Spark+Redis-ML 延迟 | Redis 提升 |
---|---|---|---|
模型保存时间 | 3785 毫秒 | 292 毫秒 | 13 倍 |
模型加载时间 | 2769 毫秒 | 0 毫秒(模型在内存中) | ∞ |
分类时间(平均) | 13 毫秒 | 1 毫秒 | 13 倍 |
Redis-ML 可以做到这一点的原因有很多。Redis 的内存架构是原因之一。Redis 专为实时交互式应用程序而构建。像 Redis-ML 这样的模块还避免了其他数据库所面临的抽象层。ML 结构直接从内存中提供其本机“动词”,无需经过额外的翻译层。
随着机器学习成为大多数下一代应用程序(包括推荐引擎、欺诈检测、风险评估、需求预测、情感分析、机器人和自动驾驶汽车)中用户体验的关键组成部分,您将需要一个能够可靠地将这些模型交付给应用程序的机器学习数据库。Redis-ML 将是将 ML 模型投入生产的关键组件。
了解更多详情