热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

华为云PB级数据库GaussDB(forRedis)揭秘第13期:如何搞定推荐系统存储难题

本文分享自华为云社区《GaussDB(forRedis)揭秘第13期:如何搞定推荐系统存储难题

本文分享自华为云社区《GaussDB(for Redis)揭秘第13期:如何搞定推荐系统存储难题?》,作者:高斯Redis官方博客 。


一、推荐偏差引发的思考

七夕过后,笔者的一个朋友遇到了尴尬事:当女友点开他的购物APP,竟然自动弹出一系列推荐:玫瑰包邮、感动哭了、浪漫小夜灯……回想七夕那天,礼物并没有出现,于是问题出现了:从实招来,你送谁了?


为了帮助友人重建信任,笔者进行了一番技术调研:这一定是“推荐系统”出了偏差。


推荐系统是一种信息过滤系统,它能够快速分析海量用户行为数据,预测出用户喜好,从而进行有效推荐。在商品推荐、广告投放等业务中,推荐系统责任重大。根据亚马逊2019年度报告,其40%的营收来自内部稳定的推荐系统。

在本文开篇的例子中,正是由于推荐系统问题,才导致了尴尬的场面。笔者决定力挺友人,用可靠的知识让人信服!



二、推荐系统长什么样

通常来说,在一套成熟的推荐系统中,分布式计算、特征存储、推荐算法是关键的三大环节,缺一不可。

下面介绍一类完整的推荐系统,在系统中GaussDB(for Redis)负责核心的特征数据存储。该系统也是华为云诸多客户案例中较为成熟的最佳实践之一。


第一部分:获取特征数据


原始数据采集

点赞、收藏、评论、购买……这些行为都属于原始数据,他们随时都在发生,因此数据量庞大。经由Kafka、Redis Stream等流组件向下游传递,或存入数仓,等待后期提取使用。

分布式计算

原始数据离散、含义模糊,无法直接给算法使用。此时就要进行大规模的离线、在线计算,对数据加工。Spark、Flink都是典型的大数据计算组件,其强大的分布式计算能力是推荐系统不可或缺的。

特征数据存储

经过加工的数据也就是特征、标签,是推荐算法所需的宝贵数据源。在特定场景下,也可以称之为用户画像、物品画像。这部分数据有着反复共享、复用的价值,不仅能用于训练算法模型,还能为生产环境提供服务。

确保特征数据的可靠存储,是推荐系统中极为关键的一环。


第二部分:消费特征数据


线下模型训练

有了关键的特征数据,业务就可以开始训练算法模型。只有充分利用特征库,以及最新行为数据,不断打磨推荐算法,这样才能提升推荐系统整体水平,最终带给用户更好的体验。

线上推理预测

算法模型训练结束后,将被部署到线上生产环境。它将继续利用已有的特征存储,根据用户的实时行为进行推理,快速预测出与用户最匹配的优质内容,形成推荐列表,并推送给终端用户。


三、推荐系统的存储难题

很显然, “特征数据”在整个系统中起到了关键的衔接作用。由于KV形式的数据抽象与特征数据极为接近,因此推荐系统里往往少不了Redis的身影。

在上述系统的方案中,数据库选型为GaussDB(for Redis),而不是开源Redis。原因是开源Redis在大数据场景下还是存在显而易见的痛点:


1. 数据无法可靠存储

推荐系统其实希望既能使用KV数据库,又能放心将数据长久保存。但开源Redis的能力更侧重于数据的缓存加速,而不是数据存储。而且开源Redis毕竟是纯内存设计,即使有AOF持久化,但通常也只能秒级落盘,数据的保存并不可靠。


2. 数据量上不去,成本下不来

涉及推荐的业务往往用户体量也不会小,随着业务发展,也会有更多的特征数据需要保存。实际上,相同容量的内存与极速SSD相比,价格贵10倍以上都很正常。于是,当数据量达到几十GB、几百GB,开源Redis会变得越来越“烧钱”,因此一般只当做“小”缓存使用。除此之外,开源Redis自身fork问题导致容量利用率低,硬件资源有很大的浪费。


3. 灌库表现不佳

特征数据需要定期更新,往往以小时或天为周期进行大规模数据灌入任务。如果存储组件不够“皮实”,大量写入造成数据库故障,将导致整个推荐系统发生异常。这就可能造成开篇提到的尴尬用户体验。

开源Redis抗写能力并不强,这是由于集群中有一半节点是备节点,它们只能处理读请求。当大批量写入到来时,主节点容易出问题,引发连锁反应。

理论上,架构设计并不是越复杂越好,如果可以,谁不想使用一种既能兼顾特征数据KV类型、成本友好、性能又有保障的可靠数据存储引擎?


四、相见恨晚,遇见GaussDB(for Redis)

与开源Redis不同,GaussDB (for Redis)基于存算分离架构,为推荐系统这一类大数据场景带来关键的技术价值:

1. 可靠存储

数据命令级落盘,在底层存储池中三副本冗余存储,真正做到了0丢失。

2. 降本增效

高性能持久化技术+细粒度存储池,帮助企业将数据库使用成本降低75%以上。

3. 抗写能力强

多线程设计+全部节点可写,抗写能力足够强大,从容应对Spark灌库压力和实时更新。华为云企业级数据库GaussDB (for Redis)提供稳定、可靠的KV存储能力,正是推荐系统核心数据的极佳选型。


五、完美衔接,实现想存就存的自由

其实,在Spark后端接入Redis已经成为一种主流方案,而使用Flink从Redis中提取维度表也是很常见的用法。它们也都提供了用于接入Redis的连接器。GaussDB(for Redis)完全兼容Redis协议,即开即用,用户随时都可以快速创建实例并接入业务。


1. Spark-Redis-Connector

Spark-Redis-Connector完美实现了Spark RDD、DataFrame到GaussDB(for Redis)实例中String、Hash、List、Set等结构的映射。用户可使用熟悉的Spark SQL语法轻松访问GaussDB(for Redis),完成特征数据灌库、更新、提取等关键任务。

使用方法非常简单:

1)当需要读取Hash、List、Set结构到Spark RDD时,分别只用一行即可搞定:


2)而当推荐系统进行灌库或特征数据更新时,可以按如下方式轻松完成写入:



2. Flink-Redis-Connector

Flink这款计算引擎流行程度不亚于Spark,它同样有成熟的Redis连接方案。使用Flink提供的Connector或结合Jedis客户端,都可轻松完成Flink到Redis的读写操作。

以使用Flink统计单词频次的简单场景为例,数据源经过Flink加工后,便可轻松存入GaussDB(for Redis)中。



六、结语

大数据应用对核心数据的存储有着很高的要求,云数据库GaussDB(for Redis)拥有存算分离的云原生架构,在完全兼容Redis协议的基础上,同时做到了稳定性、可靠性的全面领先。面对海量核心数据存储,它还能为企业带来相当可观的成本节约。面向未来,GaussDB(for Redis)极有潜力成为下一个大数据浪潮的新星。


七、附录

本文作者:华为云数据库GuassDB(for Redis)团队

杭州/西安/深圳简历投递:yuwenlong4@huawei.com

GuassDB(for Redis)产品主页:https://www.huaweicloud.com/product/gaussdbforredis.html

更多技术文章,关注高斯Redis官方博客:https://bbs.huaweicloud.com/community/usersnew/id_1614151726110813

 

点击关注,第一时间了解华为云新鲜技术~



推荐阅读
  • 从0到1搭建大数据平台
    从0到1搭建大数据平台 ... [详细]
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • 秒建一个后台管理系统?用这5个开源免费的Java项目就够了
    秒建一个后台管理系统?用这5个开源免费的Java项目就够了 ... [详细]
  • 阿里巴巴终面技术挑战:如何利用 UDP 实现 TCP 功能?
    在阿里巴巴的技术面试中,技术总监曾提出一道关于如何利用 UDP 实现 TCP 功能的问题。当时回答得不够理想,因此事后进行了详细总结。通过与总监的进一步交流,了解到这是一道常见的阿里面试题。面试官的主要目的是考察应聘者对 UDP 和 TCP 在原理上的差异的理解,以及如何通过 UDP 实现类似 TCP 的可靠传输机制。 ... [详细]
  • 本文深入解析了Java 8并发编程中的`AtomicInteger`类,详细探讨了其源码实现和应用场景。`AtomicInteger`通过硬件级别的原子操作,确保了整型变量在多线程环境下的安全性和高效性,避免了传统加锁方式带来的性能开销。文章不仅剖析了`AtomicInteger`的内部机制,还结合实际案例展示了其在并发编程中的优势和使用技巧。 ... [详细]
  • 第二章:Kafka基础入门与核心概念解析
    本章节主要介绍了Kafka的基本概念及其核心特性。Kafka是一种分布式消息发布和订阅系统,以其卓越的性能和高吞吐量而著称。最初,Kafka被设计用于LinkedIn的活动流和运营数据处理,旨在高效地管理和传输大规模的数据流。这些数据主要包括用户活动记录、系统日志和其他实时信息。通过深入解析Kafka的设计原理和应用场景,读者将能够更好地理解其在现代大数据架构中的重要地位。 ... [详细]
  • 如何高效启动大数据应用之旅?
    在前一篇文章中,我探讨了大数据的定义及其与数据挖掘的区别。本文将重点介绍如何高效启动大数据应用项目,涵盖关键步骤和最佳实践,帮助读者快速踏上大数据之旅。 ... [详细]
  • 字节跳动深圳研发中心安全业务团队正在火热招募人才! ... [详细]
  • 技术日志:深入探讨Spark Streaming与Spark SQL的融合应用
    技术日志:深入探讨Spark Streaming与Spark SQL的融合应用 ... [详细]
  • 本文总结了Java初学者需要掌握的六大核心知识点,帮助你更好地理解和应用Java编程。无论你是刚刚入门还是希望巩固基础,这些知识点都是必不可少的。 ... [详细]
  • 网络爬虫的规范与限制
    本文探讨了网络爬虫引发的问题及其解决方案,重点介绍了Robots协议的作用和使用方法,旨在为网络爬虫的合理使用提供指导。 ... [详细]
  • 结城浩(1963年7月出生),日本资深程序员和技术作家,居住在东京武藏野市。他开发了著名的YukiWiki软件,并在杂志上发表了大量程序入门文章和技术翻译作品。结城浩著有30多本关于编程和数学的书籍,其中许多被翻译成英文和韩文。 ... [详细]
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • Kafka核心理论问题汇编【持续更新中】
    本文汇总了Kafka的核心理论问题,涵盖了常见的技术难点和解决方案。内容将持续更新,旨在为开发者提供全面的参考。文章源自博客园,作者呱嗒呱嗒,转载时请注明出处。 ... [详细]
  • 如何在Spark数据排序过程中有效避免内存溢出(OOM)问题
    本文深入探讨了在使用Spark进行数据排序时如何有效预防内存溢出(OOM)问题。通过具体的代码示例,详细阐述了优化策略和技术手段,为读者在实际工作中遇到类似问题提供了宝贵的参考和指导。 ... [详细]
author-avatar
陈晏亚363951
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有