大规模数据处理实战
蔡元楠
硅谷资深工程师
41608 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 46 讲
大规模数据处理实战
15
15
1.0x
00:00/00:00
登录|注册

03 | 大规模数据处理初体验:怎样实现大型电商热销榜?

解决系统问题的情况
自动化的任务分配优化
高度抽象的数据处理流程描述语言
汇总最终结果
找出销量前K的计算集群
统计每个商品的销量的计算集群
经典的Top K算法
统计每个商品的销量
TB级数据
1000亿行数据
10亿件商品销售
适用于类似的场景
从10个人到1000个人的技术团队
从1万用户到1亿用户
限制职业成长
思考题
大规模数据处理框架的功能要求
大规模分布式解决方案
小规模的经典算法
简化的玩具问题
大型电商热销榜示例
技术规模和数据规模变化
缺乏规模增长的技术思维
怎样实现大型电商热销榜

该思维导图由 AI 生成,仅供参考

你好,我是蔡元楠。
今天我要与你分享的主题是“怎样实现大型电商热销榜”。
我在 Google 面试过很多优秀的候选人,应对普通的编程问题 coding 能力很强,算法数据结构也应用得不错。
可是当我追问数据规模变大时该怎么设计系统,他们却说不出所以然来。这说明他们缺乏必备的规模增长的技术思维(mindset of scaling)。这会限制这些候选人的职业成长。
因为产品从 1 万用户到 1 亿用户,技术团队从 10 个人到 1000 个人,你的技术规模和数据规模都会完全不一样。
今天我们就以大型电商热销榜为例,来谈一谈从 1 万用户到 1 亿用户,从 GB 数据到 PB 数据系统,技术思维需要怎样的转型升级?
同样的问题举一反三,可以应用在淘宝热卖,App 排行榜,抖音热门,甚至是胡润百富榜,因为实际上他们背后都应用了相似的大规模数据处理技术。
真正的排序系统非常复杂,仅仅是用来排序的特征(features)就需要多年的迭代设计。
为了便于这一讲的讨论,我们来构想一个简化的玩具问题,来帮助你理解。
假设你的电商网站销售 10 亿件商品,已经跟踪了网站的销售记录:商品 id 和购买时间 {product_id, timestamp},整个交易记录是 1000 亿行数据,TB 级。作为技术负责人,你会怎样设计一个系统,根据销售记录统计去年销量前 10 的商品呢?
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

大规模数据处理初体验:怎样实现大型电商热销榜? 本文深入探讨了大型电商热销榜的数据处理系统设计思路和技术挑战。从小规模到大规模数据处理系统的技术思维转型,作者以电商热销榜为例,介绍了经典算法在小规模系统中的应用,并深入讨论了大规模数据处理所面临的挑战,如内存占用和磁盘I/O延时问题。随后,文章提出了大规模分布式解决方案,包括统计商品销量的集群和找出销量前K的集群。最后,强调了大规模数据处理框架的功能要求,包括高度抽象的数据处理流程描述语言和自动化的任务分配优化的重要性。 本文的亮点在于深入浅出地介绍了大规模数据处理系统的设计思路和技术挑战,为读者提供了宝贵的技术思考和实践经验。通过分析电商排行榜的数据处理例子,读者能够更好地理解大规模数据处理系统的设计和应用,以及面对数据规模变大时可能出现的问题和解决方法。这篇文章对于对大规模数据处理感兴趣的读者来说,是一篇具有启发性和实用性的技术文章。 文章链接:[文章链接](文章链接)

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《大规模数据处理实战》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(50)

  • 最新
  • 精选
  • Liu C.
    有一次处理一个非常高维的feature矩阵,要给它降维,但手头的电脑cpu和内存都不够好。于是我用了非常hack的手段:先使用random projection算法降低一定维度,这是一个纯矩阵乘法,可以分块放入内存计算。之后剩余的维度还是有些大,于是我把feature拆成几组,对每组分别做pca,之后再选出每组最大的主成分拼起来,就完成了降维。

    作者回复: 谢谢你的经验分享!

    2019-04-22
    34
  • hua168
    分解法…像剁鱼那样,一条一口吃不下就切成块,块一口吃还大,有风险,再就再用筷子分小… 关键问题是怎么切,切多大?怎么不全切碎,让它完整的,让人知道是条鱼😄

    作者回复: 你这比喻很屌

    2019-04-22
    10
  • 乘坐Tornado的线程魔法师
    作者好!找出前K个集群小节里面的第一个计算集群的第二个节点(机器),是否应该像第一个节点一样计算product_id=1的所有记录。文中图示貌似只有第一个节点计算了。请作者查证。

    作者回复: 这个图里面是按照product_id分组了,所以所有product id =1的都归第一个机器

    2019-04-22
    10
  • 做传统数仓时,使用oracle数据库,随着数据量增大会需要使用到分区。分区需要思考使用哪个属性来分,分成多大的区间合适。另外,当视图很大时,有时查询很慢,会使用物化视图的方法。

    作者回复: 谢谢你的经验分享!

    2019-04-22
    5
  • JohnT3e
    数据倾斜,导致任务运行时间超出预期,这个时候就需要对数据做一些分析和采样,优化shuffle。任务出错后,调试周期变长,这个目前没有很好的解决。不过,之前看flumejava论文,其采用了缓存不变结果来加快调试周期。另外,就是集群规模增大,后期运维的问题了

    作者回复: 谢谢你的经验分享!

    2019-04-22
    5
  • 乘坐Tornado的线程魔法师
    顺便复习了王争老师的《数据结构与算法》,看到Top算法的时间复杂度准确来讲应该是是O(nLogK)

    作者回复: 这里K远小于n,写成O(n)没有问题

    2019-04-23
    3
  • Charles.Gast
    数据不数据什么的无所谓,我就想听听那个力学公式的讲解㊣

    作者回复: 哈哈

    2019-04-22
    3
  • 朱同学
    实际上传统服务也是这样,业务初期我们一台物理机,后面又是三台物理机,做的反向代理小集群,到现在几个机柜做了虚拟化,数据库也做了读写分离,说到底就是集群化处理

    作者回复: 谢谢你的经验分享!

    2019-04-26
    2
  • hufox
    以前做订单系统的时候,由于数据量没有那么大,没有考虑到大规模数据处理问题,但是一旦数据量上来了,统计查询都很慢,今天阅读了老师这一讲,原来可以这样设计处理大规模数据问题,涨姿势了!继续学习!

    作者回复: 谢谢支持!

    2019-04-24
    2
  • 乘坐Tornado的线程魔法师
    如果K=3的情况下 并且product=2 product_id=3均有多条记录 请问下关于product_id=2 product=3的记录该如何处理 也是 每台机器都要做product_id=1的聚合吗

    作者回复: 我觉得你想的很仔细啊。可以有一个机器专门处理所有的product_id=2。

    2019-04-22
    1
收起评论
显示
设置
留言
50
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部