兑吧:从自建HBase迁移到阿里云HBase实战经验

2024-02-20 07:20

本文主要是介绍兑吧:从自建HBase迁移到阿里云HBase实战经验,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

既然MySQL 8和PostgreSQL 10已经发布了,现在是时候回顾一下这两大开源关系型数据库是如何彼此竞争的。

在这些版本之前,人们普遍认为,Postgres在功能集表现更出色,也因其“学院派”风格而备受称赞,MySQL则更善长大规模并发读/写。

但是随着它们最新版本的发布,两者之间的差距明显变小了。

特性比较

首先来看看我们都喜欢谈论的“时髦”功能。

业务介绍

兑吧集团包含兑吧网络和推啊网络,兑吧网络是一家致力于帮助互联网企业提升运营效率的用户运营服务平台,提供积分商城和媒体运营服务。推啊网络是一家互动式广告平台,经过多年的探索与实践,首创了全新的移动广告模式,实现了广告主、媒体、用户多方共赢。在推啊的广告场景中,广告主可获得更好的投放效果,媒体方能得到更好的流量变现效率,受众端具有更好的用户体验,目前推啊已经服务超过15000家媒体,阿里云hbase主要服务于"推啊"的广告业务。

"推啊"的整体业务流程如下图:

_

整体产品架构

广告平台基础架构完善,能有效支持业务,其中核心数据平台为公司所有业务提供强有力的数据支撑。其中整个数据平台根据处理业务不同大致分为3个模块:

  • 离线统计模块:对数据进行离线统计,提供报表和相应的后台数据分析
  • 实时统计模块:实时数据主要用来对接算法,用于统计用户的实时行为,比如对不同广告的曝光,点击等行为,要求快速计算响应,所以我们采用低延迟的流式计算
  • 实时OLAP分析模块:多维实时分析,定位是提供分钟粒度的统计数据,主要用于任意维度和指标的统计

HBase在"推啊"使用场景

HBase在推啊主要用于流式数据统计,存储用户画像的相关数据,属于实时统计模块中主要存储。
实时统计时,对用户的行为数据根据不同维度不同指标进行统计,比如会记录用户在不同广告上的曝光,点击,参与等数据,也会记录用户的相应属性,比如用户对哪类广告比较感兴趣,用户的年龄,性别,职业,爱好等特征。这些数据全部存储在HBase集群中。

为什么从物理HBase迁移到阿里云HBase

最开始我们是物理机房自建HBase,选择阿里云HBase主要出于以下几个考虑:

  1. 云HBase服务基本免运维。减轻运维和系统调优压力,由阿里云hbase专家团队提供专业的运维服务。
  2. HBase基础设施重要性高。HBase作为底层存储系统,一旦出现系统故障,排查周期长,难度高,短时间内难以解决,直接影响到线上系统的稳定性,在这方面阿里云Hbase能提供强大的技术支撑,阿里云有国内最强大的内核团队,据了解阿里目前有3个pmc,6个committer,是中国拥有最多HBase committer的公司。
  3. 云HBase服务好。在使用Hbase上有任何疑问都可以直接咨询阿里云Hbase同学,他们响应及时,服务周到,能给出专业的建议。

整个迁移实战过程

根据我们业务的发展,从3个阶段阐述下阿里云hbase的使用情况以及遇到的问题

MySQL 8PostgreSQL 10
查询 & 分析  
公用表表达式 (CTEs)New 
窗口函数New 
数据类型  
JSON支持Improved 
GIS / SRSImproved 
全文检索  
可扩展性  
逻辑复制 New
半同步复制 New
声明式分区 New

过去经常会说MySQL最适合在线事务,PostgreSQL最适合分析流程,但现在不是了。

公共表表达式(CTEs)和窗口函数是选择PostgreSQL的主要原因。但是现在,通过引用同一个表中的boss_id来递归地遍历一张雇员表,或者在一个排序的结果中找到一个中值(或50%),这在MySQL上不再是问题。

在PostgreSQL中进行复制缺乏配置灵活性,这就是Uber转向MySQL的原因。但是现在,有了逻辑复制特性,就可以通过创建一个新版本的Postgres并切换到它来实现零停机升级。在一个巨大的时间序列事件表中截断一个陈旧的分区也要容易得多。

就特性而言,这两个数据库现在都是一致的。

转载于:https://my.oschina.net/u/3611008/blog/1829583

这篇关于兑吧:从自建HBase迁移到阿里云HBase实战经验的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/727429

相关文章

阿里开源语音识别SenseVoiceWindows环境部署

SenseVoice介绍 SenseVoice 专注于高精度多语言语音识别、情感辨识和音频事件检测多语言识别: 采用超过 40 万小时数据训练,支持超过 50 种语言,识别效果上优于 Whisper 模型。富文本识别:具备优秀的情感识别,能够在测试数据上达到和超过目前最佳情感识别模型的效果。支持声音事件检测能力,支持音乐、掌声、笑声、哭声、咳嗽、喷嚏等多种常见人机交互事件进行检测。高效推

CentOs7上Mysql快速迁移脚本

因公司业务需要,对原来在/usr/local/mysql/data目录下的数据迁移到/data/local/mysql/mysqlData。 原因是系统盘太小,只有20G,几下就快满了。 参考过几篇文章,基于大神们的思路,我封装成了.sh脚本。 步骤如下: 1) 先修改好/etc/my.cnf,        ##[mysqld]       ##datadir=/data/loc

CentOS下mysql数据库data目录迁移

https://my.oschina.net/u/873762/blog/180388        公司新上线一个资讯网站,独立主机,raid5,lamp架构。由于资讯网是面向小行业,初步估计一两年内访问量压力不大,故,在做服务器系统搭建的时候,只是简单分出一个独立的data区作为数据库和网站程序的专区,其他按照linux的默认分区。apache,mysql,php均使用yum安装(也尝试

Linux Centos 迁移Mysql 数据位置

转自:http://www.tuicool.com/articles/zmqIn2 由于业务量增加导致安装在系统盘(20G)磁盘空间被占满了, 现在进行数据库的迁移. Mysql 是通过 yum 安装的. Centos6.5Mysql5.1 yum 安装的 mysql 服务 查看 mysql 的安装路径 执行查询 SQL show variables like

阿里云服务器ces

允许公网通过 HTTP、HTTPS 等服务访问实例 https://help.aliyun.com/document_detail/25475.html?spm=5176.2020520101.0.0.3ca96b0b3KGTPq#allowHttp

LLM系列 | 38:解读阿里开源语音多模态模型Qwen2-Audio

引言 模型概述 模型架构 训练方法 性能评估 实战演示 总结 引言 金山挂月窥禅径,沙鸟听经恋法门。 小伙伴们好,我是微信公众号《小窗幽记机器学习》的小编:卖铁观音的小男孩,今天这篇小作文主要是介绍阿里巴巴的语音多模态大模型Qwen2-Audio。近日,阿里巴巴Qwen团队发布了最新的大规模音频-语言模型Qwen2-Audio及其技术报告。该模型在音频理解和多模态交互

Hive和Hbase的区别

Hive 和 HBase 都是 Hadoop 生态系统中的重要组件,它们都能处理大规模数据,但各自有不同的适用场景和设计理念。以下是两者的主要区别: 1. 数据模型 Hive:Hive 类似于传统的关系型数据库 (RDBMS),以表格形式存储数据。它使用 SQL-like 语言 HiveQL 来查询和处理数据,数据通常是结构化或半结构化的。HBase:HBase 是一个 NoSQL 数据库,基

简单Hbase 分页方案

简单Hbase分页方案 网上大多数分页方案分为从服务端分页或者从客户端分页 服务端分页方式主要利用PageFilter过滤器,首先太复杂,其次针对集群的兼容性不是很好,作者利用服务端分页+客户端分页结合方式给出一种简单易行的中间方案。 1.利用PageFilter过滤器从服务端分页,过滤出所需要的最大条数, 注:作者认为大多数用户不会进行太深的翻页,假设pageSize=5,客户饭100页一共

Hbase Filter+Scan 查询效率优化

Hbase Filter+Scan 查询效率问题 众所周知,Hbase利用filter过滤器查询时候会进行全表扫描,查询效率低下,如果没有二级索引,在项目中很多情况需要利用filter,下面针对这种情况尝试了几种优化的方案,仅供参考,欢迎交流。 根据业务要求,作者需要根据时间范围搜索所需要的数据,所以作者设计的rowKey是以时间戳为起始字符串的。 正确尝试: 1.scan 设置 开始行和结

Hbase 查询相关用法

Hbase 查询相关用法 public static void main(String[] args) throws IOException {//Scan类常用方法说明//指定需要的family或column ,如果没有调用任何addFamily或Column,会返回所有的columns; // scan.addFamily(); // scan.addColumn();// scan.se