0

0

使用统一数据仓库打破数据孤岛:基于Apache Doris的CDP

betcha

betcha

发布时间:2024-03-20 13:47:56

|

1238人浏览过

|

来源于DZone

原创

随着企业数据来源日益多样化,数据孤岛问题变得普遍。保险公司在构建客户数据平台(CDP)时,面临着数据孤岛导致的组件密集型计算层,数据存储分散的问题。为了解决这些问题,他们采用了基于 Apache Doris 的 CDP 2.0,利用 Doris 的统一数据仓库能力,打破数据孤岛,简化数据处理管道,提升数据处理效率。

使用统一数据仓库打破数据孤岛:基于Apache Doris的CDP

数据孤岛问题就像在线企业的关节炎,因为几乎每个人随着年龄的增长都会遇到这个问题。企业通过网站、移动应用、H5 页面和终端设备与客户互动。出于某种原因,整合所有这些来源的数据是一件很棘手的事情。数据保留在原处,无法相互关联以进行进一步分析。这就是数据孤岛的形成方式。您的业务规模越大,您拥有的客户数据源就越多样化,您就越有可能陷入数据孤岛。 

这正是我在这篇文章中要讨论的保险公司所发生的情况。到2023年,他们已服务超过5亿客户,签订了570亿份保险合同。当他们开始构建客户数据平台(CDP)来适应如此大的数据规模时,他们使用了多个组件。 

CDP 中的数据孤岛

与大多数数据平台一样,他们的 CDP 1.0 具有批处理管道和实时流管道。离线数据通过 Spark 作业加载到 Impala,在那里被标记并分成组。同时,Spark 还将其发送到 NebulaGraph 进行 OneID 计算(本文稍后详细阐述)。另一方面,实时数据被Flink打上标签,然后存储在HBase中,以备查询。

这导致了 CDP 中的组件密集型计算层:Impala、Spark、NebulaGraph 和 HBase。

结果,离线标签、实时标签和图形数据分散在多个组件中。由于冗余存储和大量数据传输,将它们集成以提供进一步的数据服务成本高昂。更重要的是,由于存储的差异,他们不得不扩大CDH集群和NebulaGraph集群的规模,增加了资源和维护成本。

基于 Apache Doris 的 CDP

对于CDP 2.0,他们决定引入一个统一的解决方案来收拾残局。在CDP 2.0的计算层,Apache Doris承担实时和离线数据存储和计算。 

为了摄取离线数据,他们利用流加载方法。他们的 30 线程摄取测试表明,它每秒可以执行超过 300,000 次更新插入。为了加载实时数据,他们结合使用了Flink-Doris-Connector和 Stream Load。此外,在需要从多个外部数据源提取数据的实时报告中,他们利用多目录功能进行联合查询。 

此 CDP 上的客户分析工作流程如下。首先,他们整理客户信息,然后为每个客户贴上标签。他们根据标签对客户进行分组,进行更有针对性的分析和操作。

接下来,我将深入研究这些工作负载并向您展示 Apache Doris 如何加速它们。 

一个ID

当您的产品和服务有不同的用户注册系统时,您是否遇到过这种情况?您可以从一个产品网页收集用户 ID A 的电子邮件,然后从另一个产品网页收集用户 ID B 的社会安全号码。然后您会发现 UserID A 和 UserID B 实际上属于同一个人,因为他们使用相同的电话号码。

这就是 OneID 作为一个想法出现的原因。就是将所有业务线的用户注册信息汇集到Apache Doris中一张大表中,进行整理,并确保每个用户拥有唯一的OneID。 

这就是他们如何利用 Apache Doris 中的功能来确定哪些注册信息属于同一用户。

标签服务

该CDP容纳了5亿客户的信息,这些信息来自500多个源表,总共附加了2000多个标签。

按照时效性,标签可以分为实时标签和离线标签。实时标签由 Apache Flink 计算并写入 Apache Doris 中的平面表,而离线标签由 Apache Doris 计算,因为它们源自 Doris 中的用户属性表、业务表和用户行为表。以下是该公司在数据标记方面的最佳实践: 

Dreamhouse AI
Dreamhouse AI

AI室内设计,快速重新设计你的家,虚拟布置家具

下载

1. 离线标签

在数据写入高峰期,由于数据规模庞大,全量更新很容易导致OOM错误。为了避免这种情况,他们利用Apache Doris 的INSERT INTO SELECT功能并启用部分列更新。这将大大减少内存消耗并在数据加载过程中保持系统稳定性。

set enable_unique_key_partial_update=true;
insert into tb_label_result(one_id, labelxx) 
select one_id, label_value as labelxx
from .....

2. 实时标签

部分列更新也可用于实时标签,因为即使实时标签也会以不同的速度更新。所需要做的就是设置partial_columns为true。

curl --location-trusted -u root: -H "partial_columns:true" -H "column_separator:," -H "columns:id,balance,last_access_time" -T /tmp/test.csv http://127.0.0.1:48037/api/db1/user_profile/_stream_load

3. 高并发点查询

以目前的业务规模,该公司正在以超过 5000 QPS 的并发水平接收标签查询请求。他们使用策略组合来保证高性能。首先,他们采用Prepared Statement来预编译和预执行SQL。其次,他们微调 Doris 后端和表的参数以优化存储和执行。最后,它们启用行缓存作为面向列的 Apache Doris 的补充。

微调 Doris 的后端参数be.conf:

disable_storage_row_cache = false                      
storage_page_cache_limit=40%

创建表时微调表参数:

enable_unique_key_merge_on_write = true
store_row_column = true
light_schema_change = true

4.标签计算(Join)

在实践中,很多标签服务都是通过数据库中的多表连接来实现的。这通常涉及 10 多个表。为了获得最佳的计算性能,他们在Doris中 采用了共置组策略。

客户分组

CDP 2.0 中的客户分组管道是这样的:Apache Doris 从客户服务接收 SQL,执行计算,并通过 SELECT INTO OUTFILE 将结果集发送到 S3 对象存储。该公司已将其客户分为100万组。过去在 Impala 中需要50 秒才能完成的客户分组任务,现在在 Doris 中只需要10 秒。 

除了对客户进行分组进行更细粒度的分析外,有时他们还会进行反向分析。即针对某个客户,找出他/她属于哪些群体。这有助于分析师了解客户的特征以及不同客户群体的重叠情况。

在 Apache Doris 中,这是通过 BITMAP 函数实现的:BITMAP_CONTAINS是检查客户是否属于某个组的快速方法, 、BITMAP_OR、BITMAP_INTERSECT和BITMAP_XOR是交叉分析的选择。 

结论

从CDP 1.0到CDP 2.0,保险公司采用统一数据仓库Apache Doris替代Spark+Impala+HBase+NebulaGraph。通过打破数据孤岛和简化数据处理管道,提高了数据处理效率。在CDP 3.0中,他们希望通过结合实时标签和离线标签来对客户进行分组,以进行更加多样化和灵活的分析。Apache Doris 社区和VeloDB团队将继续作为此次升级期间的支持合作伙伴。

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

674

2023.10.12

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

319

2023.10.27

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

344

2024.02.23

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

1084

2024.03.06

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

355

2024.03.06

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

671

2024.04.07

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

563

2024.04.29

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

407

2024.04.29

俄罗斯搜索引擎Yandex最新官方入口网址
俄罗斯搜索引擎Yandex最新官方入口网址

Yandex官方入口网址是https://yandex.com;用户可通过网页端直连或移动端浏览器直接访问,无需登录即可使用搜索、图片、新闻、地图等全部基础功能,并支持多语种检索与静态资源精准筛选。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1

2025.12.29

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 6.2万人学习

Django 教程
Django 教程

共28课时 | 2.5万人学习

Excel 教程
Excel 教程

共162课时 | 9.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号