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

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

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

“技术人员经常做的事情就是对功能进行抽象,以使代码更加整洁简单,这是天然的带有强迫症的一种行为。”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在大部分时候偏向于选择一些更加简单同时迭代次数更少的算法,来在精度和算法计算效率之间做一些折中。

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

相关推荐

什么是Java中的继承?如何实现继承?

什么是继承?...

Java 继承与多态:从基础到实战的深度解析

在面向对象编程(OOP)的三大支柱中,继承与多态是构建灵活、可复用代码的核心。无论是日常开发还是框架设计,这两个概念都扮演着至关重要的角色。本文将从基础概念出发,结合实例与图解,带你彻底搞懂Java...

Java基础教程:Java继承概述_java的继承

继承概述假如我们要定义如下类:学生类,老师类和工人类,分析如下。学生类属性:姓名,年龄行为:吃饭,睡觉老师类属性:姓名,年龄,薪水行为:吃饭,睡觉,教书班主任属性:姓名,年龄,薪水行为:吃饭,睡觉,管...

java4个技巧:从继承和覆盖,到最终的类和方法

日复一日,我们编写的大多数Java只使用了该语言全套功能的一小部分。我们实例化的每个流以及我们在实例变量前面加上的每个@Autowired注解都足以完成我们的大部分目标。然而,有些时候,我们必须求助于...

java:举例说明继承的概念_java继承的理解

在现实生活中,继承一般指的是子女继承父辈的财产。在程序中,继承描述的是事物之间的所属关系,通过继承可以使多种事物之间形成一种关系体系。例如猫和狗都属于动物,程序中便可以描述为猫和狗继承自动物,同理,...

从零开始构建一款开源的 Vibe Coding 产品 Week1Day4:业界调研之 Agent 横向对比

前情回顾前面两天我们重点调研了了一下Cursor的原理和Cursor中一个关键的工具edit_file的实现,但是其他CodingAgent也需要稍微摸一下底,看看有没有优秀之处,下...

学会这几个插件,让你的Notepad++使用起来更丝滑

搞程序开发的小伙伴相信对Notepad++都不会陌生,是一个占用空间少、打开启动快的文件编辑器,很多程序员喜欢使用Notepad++进行纯文本编辑或者脚本开发,但是Notepad++的功能绝不止于此,...

将 node_modules 目录放入 Git 仓库的优点

推荐一篇文章Whyyoushouldcheck-inyournodedependencies[1]...

再度加码AI编程,腾讯发布AI CLI并宣布CodeBuddy IDE开启公测

“再熬一年,90%的程序员可能再也用不着写for循环。”凌晨两点半,王工还在公司敲键盘。他手里那份需求文档写了足足六页,产品经理反复改了三次。放在过去,光数据库建表、接口对接、单元测试就得写两三天。现...

git 如何查看stash的内容_git查看ssh key

1.查看Stash列表首先,使用gitstashlist查看所有已保存的stash:...

6万星+ Git命令懒人必备!lazygit 终端UI神器,效率翻倍超顺手!

项目概览lazygit是一个基于终端的Git命令可视化工具,通过简易的TUI(文本用户界面)提升Git操作效率。开发者无需记忆复杂命令,即可完成分支管理、提交、合并等操作。...

《Gemini CLI 实战系列》(一)Gemini CLI 入门:AI 上命令行的第一步

谷歌的Gemini模型最近热度很高,而它的...

deepin IDE新版发布:支持玲珑构建、增强AI智能化

IT之家8月7日消息,深度操作系统官方公众号昨日(8月6日)发布博文,更新推出新版deepin集成开发环境(IDE),重点支持玲珑构建。支持玲珑构建deepinIDE在本次重磅更...

狂揽82.7k的star,这款开源可视化神器,轻松创建流程图和图表

再不用Mermaid,你的技术文档可能已经在悄悄“腐烂”——图表版本对不上、同事改完没同步、评审会上被一句“这图哪来的”问得哑口无言。这不是危言耸听。GitHub2025年开发者报告显示,63%的新仓...

《Gemini CLI 实战系列》(五)打造专属命令行工具箱

在前几篇文章中,我们介绍了GeminiCLI的基础用法、效率提升、文件处理和与外部工具结合。今天我们进入第五篇...