百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT技术 > 正文

TalkingData:用HBase和MySQL替换MongoDB的深层逻辑

wptr33 2025-02-13 14:33 24 浏览

“技术人员经常做的事情就是对功能进行抽象,以使代码更加整洁简单,这是天然的带有强迫症的一种行为。”TalkingData CTO肖文峰说。

在日前举办的TalkingData-T11全球移动大数据峰会上,肖文峰接受了CSDN记者的采访,全面介绍TalkingData研发团队构建高效的移动大数据处理能力的经验,包括功能模块服务化、采用Spark、去MongoDB、机器学习等。所有的技术选择,核心原则是两个词:简单、务实,为业务场景而变。

研发变革

肖文峰加入TalkingData是2014年,正好是大数据开始上升的时候,客户对数据的需求越来越强烈,对数据质量要求也越来越高,这就要求研发部能够很灵活地资源配置以应对业务需求。于是,肖文峰做的一件大事,就是产品研发思路的调整:从关注产品线,转向关注功能模块服务化

在调整之前,研发团队按照产品线区分的,包括通用统计分析、游戏运营分析、广告监测以及数据的产品线等,配制相对独立的资源,鲜有共享。整个团队调整的目标,是从SDK、数据的收集到数据的可视化都成为服务模块,给前端的业务团队提供更灵活的业务支撑。

现在,TalkingData已经是有专门独立的数据采集、数据计算、数据存储、数据挖据、以及数据可视化的团队。与此同时,不到40人的研发团队,也扩充到了80多人。

肖文峰打算未来逐渐以这种模式组织研发资源表示。他表示,技术人员经常做的事情就是对功能进行抽象,以使代码更加整洁简单,这是天然的带有强迫症的一种行为,所以首先需要对不同产品线的公用模块进行梳理并抽象出来,比如登陆模块、数据的采集和清洗模块,未来都会做成公共的服务,做到基础服务框架中。

TalkingData的最终目标,是希望在数据的提取、加工、合规、价值评估、数据安全等环节,都能提供一个公共的框架,能够成为数据的“水库”,汇聚从各个不同的数据源流入的数据,并加工成不同质量的“水”,然后提供给不同行业不同需求的客户,改变他们的决策模式。

技术选择

TalkingData关注的是移动大数据,希望通过各种各样的数据把智能设备背后的人尽可能精细地刻画出来,为开发者创造价值。来自SDK和各种传感器的数据,具有显著的多样性和实时性,比如地理位置信息是不断变化的,这对数据处理性能和架构都有很高的要求。

那么,在当前如雨后春笋一般不断涌现的大数据技术之间如何选择?肖文峰认为,研发人员最重要的是务实,TalkingData技术团队是一个比较务实的团队,对于新技术,从来不会为了引进而引进

务实与开放

肖文峰举了三个案例说明TalkingData技术团队的务实:

  1. 最开始做分析系统的时候,采用 Hadoop 加 Hive,只有批处理,用户需要在第二天才能看到数据。后来用户有了实时分析的需求,TalkingData才增加了一个实时计算模块。
  2. 计算方面,TalkingData开始都是通过Map-Reduce来实现的,处理算法逻辑效率比较低。2013年数据量急剧膨胀之后,体现出来的是处理速度非常慢,原先半个小时能完成的计算需要2个小时才能拿到结果,季度数据的计算有时候甚至一整天都出不来,于是TalkingData引入Spark计算框架(目前集群规模为上百节点),同时也改进了算法,减少迭代次数(没有采用Spark集成的MLlib,TalkingData认为它迭代次数过多,计算资源消耗之大难以接受)。
  3. Kafka、bitmap计算引擎的引入,都是为了解决特定业务场景的问题。前者是因为Kestrel平行扩展能力差,多消费者支持也不是特别灵活;后者是因为需要跨很多纬度的多维数据交叉计算,以前的交叉计算效率很低。

同时支持实时计算和离线计算的架构,这和后来的Lambda很相似;而引入Spark的时候,这项技术也还不像现在这么流行。换言之,在务实的同时,TalkingData也是一个开放的团队。肖文峰介绍,他们20%左右的时间做前沿技术的研究,也会定期去和技术社区以及硅谷的技术专家作交流和分享,确保能够充分理解新的技术,以准确判断新技术对业务的影响。

去MongoDB

“每一项技术,引入都很容易,但是一旦深度使用,就会发现各种各样的坑,这些都需要对这项技术有很深的了解才可能解决。”肖文峰解释了务实的必要性,从MongoDB到Redis,从Hadoop到Kafka,甚至是硬件,在较大的数据量级的压力下,TalkingData都遇到了各种各样的问题,需要投入资源去应对。而最近在做的,是“去MongoDB”的重构。

去MongoDB的主因是主从备份,以及一些引擎上的问题。有的引擎效率不高,无法满足需求;能满足需求的引擎,又有较大的坑,比如有时候会崩溃以至于数据无法恢复,有时候会有内存泄露。MongoDB解决这些问题的迭代速度跟不上TalkingData业务发展,所以只能通过重构来解决问题。

TalkingData数据库重构的选择是MySQL和HBase,没有采用其他的KV数据库。原因如下:

  1. 肖文峰强调,一个研发团队需要根据自己最熟悉最有把握的技术方向来解决现有的问题,否则一定会遇到新的坑,导致后面接手的人会有很多很多的问题,因为真正精通各种更大数据技术的人才还是比较稀缺的。
  2. TalkingData目前还是有很多结构化的数据要处理。

根据肖文峰的介绍,TalkingData搜集数据的主要来源和构成如下:

  1. 来自于TalkingData的SDK。TalkingData有三条为开发者服务的产品线,这些SDK植入到开发者APP里面(TalkingData支持超过8万款应用和 6万多的开发者),开发者在接受运营分析服务的同时,也会和TalkingData共享一些数据。这些数据包含最基本的事实数据(ground truth),包括:1.位置信息,比如GPS的信息;2.应用安装列表;3.手机的环境信息(机型、品牌等)。
  2. 在线下跟第三方数据提供商交换的数据。

机器学习

TalkingData最近发布的一个SDK,是一个场景感知的SDK,把用户拿智能手机时的步态数据,比如静止、走路、跑步或驾车等,通过API的方式提供给App访问,同时也提供地理围栏的触发功能,让开发者判断用户地理位置相关的场景。

了解用户周围环境,做到场景化,能够帮助开发者应用做得更加智能,判断用户当前的状态和目的,从而很容易地触发一些有针对性的功能、服务和内容。但这需要对手机传感器进行研究,包括处理传感器数据的算法。

肖文峰表示,传感器的数据分析和处理存在很高的门槛。比如基于加速传感器去研究步态判断的算法,TalkingData尝试好几种算法,包括K均值、SVM、决策树等等,也包含综合一些算法进行投票的方法。经过了很多实验,发现这里面水很深。主要是因为智能设备的碎片化非常严重,手机传感器的元器件来自不同的厂商,良莠不齐,数据特征也有较大差别,成为巨大的坑。

数据脏其实也是TalkingData数据处理工作中面临的最大问题。TalkingData通过结合大数据和机器学习,来提高数据处理加工的效率。例如,TalkingData记录了超过两万款整理好的机型信息,数据超过百万量级,还有大量的长尾机型样本,这些样本的匹配,靠一些人工去编辑头部的机型数据,是一个很头疼的问题。但后来加入机器学习的算法,能够对原始机型数据进行一些过滤和初加工,工作量可以小很多。TalkingData目前很多数据的清洗工作,都是通过人工加上部分机器学习的方式进行的。

对于深度学习,TalkingData虽然有尝试,但还没有大量的使用。肖文峰认为,深度学习为提高精度付出的成本太高,有时候甚至会有数量级的成本增加。而分析系统对于计算的效率比较敏感,所以TalkingData在大部分时候偏向于选择一些更加简单同时迭代次数更少的算法,来在精度和算法计算效率之间做一些折中。

而对于人工智能,肖文峰表示,在基础理论没有根本性突破的前提下,基于目前的计算机科学的理论和技术,人工智能在落地上面存在一些困难。

相关推荐

MySQL进阶五之自动读写分离mysql-proxy

自动读写分离目前,大量现网用户的业务场景中存在读多写少、业务负载无法预测等情况,在有大量读请求的应用场景下,单个实例可能无法承受读取压力,甚至会对业务产生影响。为了实现读取能力的弹性扩展,分担数据库压...

Postgres vs MySQL_vs2022连接mysql数据库

...

3分钟短文 | Laravel SQL筛选两个日期之间的记录,怎么写?

引言今天说一个细分的需求,在模型中,或者使用laravel提供的EloquentORM功能,构造查询语句时,返回位于两个指定的日期之间的条目。应该怎么写?本文通过几个例子,为大家梳理一下。学习时...

一文由浅入深带你完全掌握MySQL的锁机制原理与应用

本文将跟大家聊聊InnoDB的锁。本文比较长,包括一条SQL是如何加锁的,一些加锁规则、如何分析和解决死锁问题等内容,建议耐心读完,肯定对大家有帮助的。为什么需要加锁呢?...

验证Mysql中联合索引的最左匹配原则

后端面试中一定是必问mysql的,在以往的面试中好几个面试官都反馈我Mysql基础不行,今天来着重复习一下自己的弱点知识。在Mysql调优中索引优化又是非常重要的方法,不管公司的大小只要后端项目中用到...

MySQL索引解析(联合索引/最左前缀/覆盖索引/索引下推)

目录1.索引基础...

你会看 MySQL 的执行计划(EXPLAIN)吗?

SQL执行太慢怎么办?我们通常会使用EXPLAIN命令来查看SQL的执行计划,然后根据执行计划找出问题所在并进行优化。用法简介...

MySQL 从入门到精通(四)之索引结构

索引概述索引(index),是帮助MySQL高效获取数据的数据结构(有序),在数据之外,数据库系统还维护者满足特定查询算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构...

mysql总结——面试中最常问到的知识点

mysql作为开源数据库中的榜一大哥,一直是面试官们考察的重中之重。今天,我们来总结一下mysql的知识点,供大家复习参照,看完这些知识点,再加上一些边角细节,基本上能够应付大多mysql相关面试了(...

mysql总结——面试中最常问到的知识点(2)

首先我们回顾一下上篇内容,主要复习了索引,事务,锁,以及SQL优化的工具。本篇文章接着写后面的内容。性能优化索引优化,SQL中索引的相关优化主要有以下几个方面:最好是全匹配。如果是联合索引的话,遵循最...

MySQL基础全知全解!超详细无废话!轻松上手~

本期内容提醒:全篇2300+字,篇幅较长,可搭配饭菜一同“食”用,全篇无废话(除了这句),干货满满,可收藏供后期反复观看。注:MySQL中语法不区分大小写,本篇中...

深入剖析 MySQL 中的锁机制原理_mysql 锁详解

在互联网软件开发领域,MySQL作为一款广泛应用的关系型数据库管理系统,其锁机制在保障数据一致性和实现并发控制方面扮演着举足轻重的角色。对于互联网软件开发人员而言,深入理解MySQL的锁机制原理...

Java 与 MySQL 性能优化:MySQL分区表设计与性能优化全解析

引言在数据库管理领域,随着数据量的不断增长,如何高效地管理和操作数据成为了一个关键问题。MySQL分区表作为一种有效的数据管理技术,能够将大型表划分为多个更小、更易管理的分区,从而提升数据库的性能和可...

MySQL基础篇:DQL数据查询操作_mysql 查

一、基础查询DQL基础查询语法SELECT字段列表FROM表名列表WHERE条件列表GROUPBY分组字段列表HAVING分组后条件列表ORDERBY排序字段列表LIMIT...

MySql:索引的基本使用_mysql索引的使用和原理

一、索引基础概念1.什么是索引?索引是数据库表的特殊数据结构(通常是B+树),用于...