导语:

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可以应付的了么?(未完待续...)

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

【华为云技术分享】DLI跨源|当DLI遇见MongoDB的更多相关文章

  1. 成为高手前必懂的TCP干货【华为云技术分享】

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/devcloud/article/detai ...

  2. Python正则表达式,看完这篇文章就够了...#华为云&#183;寻找黑马程序员#【华为云技术分享】

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/devcloud/article/detai ...

  3. AIOps产品与架构浅析【华为云技术分享】

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/devcloud/article/detai ...

  4. Spring Boot 最流行的 16 条实践解读!【华为云技术分享】

    置顶:华为云618大促火热进行中,全场1折起,免费抽主机,消费满额送P30 Pro,点此抢购. Spring Boot是最流行的用于开发微服务的Java框架.在本文中,将与大家分享自2016年以来笔者 ...

  5. 性能达到原生 MySQL 七倍,华为云 Taurus 技术解读【华为云技术分享】

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/devcloud/article/detai ...

  6. 挑战10个最难的Java面试题(附答案)【上】【华为云技术分享】

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/devcloud/article/deta ...

  7. 华为云实战开发】5.如何快速创建免费Git代码仓库【华为云技术分享】

    1 文章目的 本文主要帮助已经掌握或者想要掌握Git的开发者,如何更好的应用Git,以及更好的将Git与DevCloud结合应用. 2 概述 2.1 版本控制系统介绍 从狭义上来说,版本控制系统是软件 ...

  8. 【华为云技术分享】MongoDB经典故障系列五:sharding集群执行sh.stopBalancer()命令被卡住怎么办?

    [摘要] MongoDB sharding集群执行sh.stopBalancer()命令时被卡住怎么办?别慌,华为云数据库来给您支招,收下这份方案指南,让您分分钟远离被自建MongoDB数据库支配的恐 ...

  9. 【华为云技术分享】数据库开发:MySQL Seconds_Behind_Master简要分析

    [摘要]对于mysql主备实例,seconds_behind_master是衡量master与slave之间延时的一个重要参数.通过在slave上执行"show slave status;& ...

  10. 【华为云技术分享】跟唐老师学习云网络 : Kubernetes网络实现

    当今K8s独霸天下之时,咱们站在更高的角度,好好的看看K8s网络是以什么理念构筑的.以及一个容器集群的好保姆,是如何分别照顾 南北流量和东西流量的. 一.简单介绍下Kubernetes 略..容器集群 ...

随机推荐

  1. HTTP协议中四种交互方法学习

    一.Get Get用于获取信息,注意,他只是获取.查询数据,也就是说它不会修改服务器上的数据.而根据HTTP规范, 获取信息的过程是安全和幂等的.GET请求的数据会附在URL之后,以"?&q ...

  2. 使用 DDPO 在 TRL 中微调 Stable Diffusion 模型

    引言 扩散模型 (如 DALL-E 2.Stable Diffusion) 是一类文生图模型,在生成图像 (尤其是有照片级真实感的图像) 方面取得了广泛成功.然而,这些模型生成的图像可能并不总是符合人 ...

  3. Android-Java-反序列化JSON

    import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; String jsonStr= WebAPIOperato ...

  4. 二。docker安装mysql 并配置

    1.docker安装mysql 1.1使用docker拉取mysql的镜像 docker pull mysql:5.7 1.2通过镜像启动 docker run -p 3306:3306 --name ...

  5. 八个SVN提交的好习惯(转)

    一.提交之前先更新 1.         SVN更新的原则是要随时更新,随时提交.当完成了一个小功能,能够通过编译并且自己测试之后,谨慎地提交. 2.         如果在修改的期间别人也更改了sv ...

  6. [Python急救站课程]正方形螺旋线的绘制

    正方形螺旋线的绘制 import turtle turtle.speed('fastest') # 加快画笔速度 length = 3 # 正方形边长 angle = 90 # 转向角度 for i ...

  7. Python 既是解释型语言,也是编译型语言

    哈喽大家好,我是咸鱼 不知道有没有小伙伴跟我一样,刚开始学习 Python 的时候都听说过 Python 是一种解释型语言,因为它在运行的时候会逐行解释并执行,而 C++ 这种是编译型语言 不过我今天 ...

  8. Service Mesh:微服务架构的救世主还是多余的花招?

    Service Mesh的前世今生 在前面,我们提出了一个问题:随着模块和节点的增多,微服务之间难免会遇到各种网络问题.为了解决这些问题,目前有一个解决方案,即使用Spring Cloud中的各个组件 ...

  9. L3-002 特殊堆栈

    #include <bits/stdc++.h> using namespace std; const int N = 1E5 + 10; int tr[N]; stack<int& ...

  10. 在PowerShell脚本中获取程序集文件属性的指定元数据特性的方法——AssemblyMetadataAttribute

    在PowerShell脚本中获取程序集文件属性的指定元数据特性的方法--AssemblyMetadataAttribute <# .SYNOPSIS 获取程序集文件属性的指定元数据特性 .DES ...