写点什么

【华为云技术分享】DLI 跨源|当 DLI 遇见 MongoDB

发布于: 2020 年 07 月 31 日

导语:


MongoDB 作为灵活高效易扩展的 no-schema 数据库,越来越受到互联网公司、游戏行业等开发者的青睐,但是 MongoDB 有着独特的语言接口,并不能很好满足数据分析师构建数据治理应用的需求,而数据湖探索 DLI 恰好解决了这一痛点。搭配华为云上 DDS 服务提供的 MongoDB,DLI 无需数据搬迁,便可以直接使用 SQL 分析,并且将分析后的数据导入 OBS,RDS,DWS 等更多的云上数据存储。当 DLI 遇见 MongoDB,让数据不再成为“孤岛”。


一、X 游戏公司的数据分析场景


X 游戏公司最近新上了一款爆款手游 A,日活突破百万,每月都能为 X 公司贡献数千万的利润。随着游戏业务量的迅猛发展,游戏数据分析师小鑫遇到了前所未有的挑战。


当时为了游戏快速上线,架构师选用华为云 DDS 服务提供的 MongoDB 数据库,用于用户数据存储。MongoDB 高性能,易扩展,no-schema 等特性,很好的支撑了游戏爆发式数据增长以及游戏玩法的快速更新迭代。但是,现在存储在 MongoDB 里的海量数据,犹如隐藏在群山中的矿脉,如何才能挖掘其中更大价值?如何筛选出优质客户从而提供更好地服务?如何分析用户行为,为游戏开发提供切实可行的数据支持?。。。种种数据分析需求,让小鑫抓狂了,他急需一种易用高效的分析工具,协助他完成数据挖掘任务。



二、MongoDB 的数据存储



在解决小鑫的问题之前,让我们来了解一下 MongoDB。它是面向文档的数据库,介于关系型数据库和非关系型数据库之间,具有非常强大的扩展能力。其数据库里的一条记录就是一个文档,它由域和值对组成。MongoDB 的文档是一个键值(key-value)对,类似于一个 json 对象。但 MongoDB 的文档不需要设置相同的字段,并且相同的字段不需要相同的数据类型,这也是 MongoDB 的突出特点。


MongoDB 的优势在于,其一:性能强。MongoDB 拥有强大数据持久能力,减少对数据库系统的输入/输出操作;通过构建索引,支持更快的查询速度,并可以支持从嵌入式文档和数组中返回键值。其二:支持丰富的查询语言。MongoDB 具有良好的开放性和兼容性,支持多种语言进行读写操作、文档搜索、数据聚合等操作,当然这些 API 是 MongoDB 特有的,存在一定学习成本。其三:便捷的复制能力。MongoDB 提供一种叫副本集(replica set)的服务,将数据分布在多台机器上以实现数据冗余和自动故障转移。其四:扩展性强。MongoDB 的核心功能之一就是良好的扩展能力。通过分片的方式将数据分布在一组计算机中,让每一个服务器里面存储的数据都是一样大小。


三、DLI 崭露头角


小鑫找到了华为工程师 Z,小 Z 向小鑫极力推荐华为云数据湖分析利器 DLI,只要你会 SQL,就能玩转云上各种数据源,包括了 DDS。DLI 提供跨源融合分析功能,兼容 SQL,SPARK,FLINK 编程 API,只需轻松几步,便可分析 DDS 中的 MongoDB 数据,无需数据搬迁。“这么神奇?”小鑫跃跃欲试。小 Z 立刻祭出了,DLI 分析 MongoDB 三版斧:


1. 建立跨源连接


DLI 分析集群和用户的 DDS 集群分属不同的虚拟子网,存在网络隔离,而建立跨源连接,即可打通 DLI 集群与 DDS 集群的网络。具体步骤是


  • 先查看 DDS 集群网络信息,记录下集群所属 VPC、子网、子网网段



  • 在 DLI 跨源连接管理界面,创建指向 DDS 的增强型跨源连接,在连接中指定 DDS 所属的 VPC 和子网



  • 最后在新建的跨源连接中绑定用户队列,增强型跨源连接绑定的队列需要是非按需队列



2. 创建跨源表


小鑫的样例数据包括了一个用户集合,一个装备集合。用户集合中存放着用户信息,装备集合中存放着用户游戏装备信息。




在 DLI SQL 编辑器中,执行创建 MongoDB 跨源表的 SQL,创建关联的用户表和装备表,如下所示


 CREATE TABLE user(  account string,  phone string,  age int,  sex string,  credit int,  lastlogin int) USING MONGO OPTIONS (  'url' = '192.168.0.95:8635,192.168.0.98:8635/test?authSource=admin',  'database' = 'test',  'collection' = 'user',  'user' = 'rwuser',  'password' = '***');  CREATE TABLE equipment(  account string,  eq_id int,  attack int,  defence int,  weight int,  name string,  value int) USING MONGO OPTIONS (  'url' = '192.168.0.95:8635,192.168.0.98:8635/test?authSource=admin',  'database' = 'test',  'collection' = 'equipment',  'user' = 'rwuser',  'password' = '***');
复制代码



建表成功将在界面中返回成功。


3. 查询分析


建表完成后,在华为工程师的指导下,小鑫开始了再 DLI 中的数据探索,他先执行了一些简单的查询语句:


/*  查询成年用户*/select * from user where age >= 18

/* 查询装备id为666福星装备的记录*/SELECT * FROM equipment where eq_id = 666
复制代码


之后,他又试了试两张表关联查询语句:



/*  查询拥有福星装备的未成年用户信息*/select * from user as a join equipment as b where a.account=b.account and a.age < 18 and b.eq_id=666
复制代码



结果如图所示:


看来这些基本的 sql 查询根本不在话下,小鑫着手开发游戏数据 ETL,并很快搞定了业务部门的需求,收获了领导的认可。但需求总在变化,还有更加紧急的需求在等着小鑫,而 DLI 可以应付的了么?(未完待续...)


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


发布于: 2020 年 07 月 31 日阅读数: 89
用户头像

提供全面深入的云计算技术干货 2020.07.14 加入

华为云开发者社区,提供全面深入的云计算前景分析、丰富的技术干货、程序样例,分享华为云前沿资讯动态,方便开发者快速成长与发展,欢迎提问、互动,多方位了解云计算! 传送门:https://bbs.huaweicloud.com/

评论

发布
暂无评论
【华为云技术分享】DLI跨源|当DLI遇见MongoDB