基于doris用户画像标签储存应用

一、项目背景 

        用户画像离线标签数据存储在es内,实时画像标签数据存储在redis内,离线用于圈选,实时用于点查。随着业务的增长,目前需要离线标签数据和实时标签数据同时进行圈选用户,上述架构无法满足,故需要一个离线数据和实时数据共存在一张表中提供圈选和点查能力。

        通过调研压测不同的产品,最后选择了doris2.1版本升级画像架构。

二、doris表设计

 1.宽表结构如下:

CREATE TABLE `user_data` (
  `login_id` bigint(20) NULL COMMENT '登录ID',
  `driver_id` bigint(20) NULL COMMENT '用户ID',
  `d_s_people_0018` int(11) NULL COMMENT '用户归属城市',
  `d_s_people_0031` string NULL COMMENT '用户描述',
  INDEX idx_d_d_s_people_0018 (`d_s_people_0018`) USING INVERTED COMMENT '',
  --倒排索引 建立不分词的倒排索引
  INDEX idx_d_s_people_0031 (`d_s_people_0031`) USING INVERTED PROPERTIES("parser" = "unicode") COMMENT '',
  --倒排索引 建立分词的倒排索引
) ENGINE=OLAP
UNIQUE KEY(`login_id`)
COMMENT 'OLAP'
DISTRIBUTED BY HASH(`login_id`) BUCKETS 6
PROPERTIES (
"replication_allocation" = "tag.location.default: 3",
"enable_unique_key_merge_on_write" = "true"  ,
"store_row_column" = "true",
"row_store_page_size" = "16384",
"group_commit_interval_ms" = "10000",
"group_commit_data_bytes" = "134217728"
);

2. 表结构参数设置解析

  • 打开写时合并,提高查询效率
--打开写时合并,提高查询效率
"enable_unique_key_merge_on_write" = "true" 

        doris官网:数据更新概述 - Apache Doris

  • 打开行列共存模式,满足高并发点查
--打开行列共存模式,满足高并发点查
"store_row_column" = "true"

        doris官网:高并发点查 - Apache Doris

  • 行存 page_size:默认为 16KB

        page 是存储读写的最小单元,page_size 是行存 page 的大小,也就是说读一行也需要产生一个 page 的 IO。这个值越大压缩效果越好存储空间占用越低,但是点查时 IO 开销越大性能越低(因为一次 IO 至少读一个 page),反过来值越小存储空间约高,点查性能越好。默认值 16KB 是大多数情况下比较均衡的选择,如果更偏向查询性能可以配置较小的值比如 4KB 甚至更低,如果更偏向存储空间可以配置较大的值比如 64KB 甚至更高。

--行存 page_size:默认为 16KB。
"row_store_page_size" = "16384"

        doris官网:行列混存 - Apache Doris

  • 自动提交条件

        目前实时标签通过flink写入,离线标签数据分为了日调度,30分钟调度,10分钟调度写入doris表内 :

        默认时间间隔为10s:"group_commit_interval_ms" = "10000"

        默认提交数据量为 64 MB:"group_commit_data_bytes" = "134217728"

        doris官网:Group Commit - Apache Doris

3.优缺点

a.倒排索引的使用

目前仅对比较复杂的文字描述才添加倒排索引。

因倒排索引原理,不建议对全部字段加倒排索引,全部字段增加倒排索引不仅不会提速,反而查询和写入都会变慢。

b.优点

  1. 离线数据及实时数据共存,可以支持更丰富业务需求

  2. 每个用户一行数据,不会因为增加新指标引起数据行数增加

c.缺点

  1. 新增标签需要增加新列

  2. 数据写入采用放的是写入合并策略,写入的性能会有所降低,根据测试完全能满足需求

<think>好的,我现在需要帮用户介绍一下数据中台结合业务系统的架构图。首先,用户之前问过数据中台的表是否需要独立于业务系统,现在可能想更全面地了解两者在整体架构中的关系。我需要先回顾之前的回答,确保内容连贯。 接下来,用户想要架构图,虽然我只能用文字描述,但需要尽量详细,让用户能想象出来。可能需要分层次介绍,比如业务系统层、数据接入层、数据存储与计算层、数据服务层等。 用户可能是技术人员或架构师,希望了解如何将数据中台整合到现有业务系统中。他们可能关心数据流向、各层组件以及如何实现数据整合与分析。需要强调数据中台的核心作用,比如数据集成、处理、服务化,以及如何支持上层应用。 要注意之前的回复中提到的分层建模,比如ODS、DWD、DWS,这些应该在架构图中体现。同时,结合业务系统的架构,可能需要说明业务系统作为数据源,数据中台如何通过ETL或CDC获取数据,处理后再提供服务。 用户可能没有说出来的深层需求是希望了解如何设计一个可扩展、高效的数据架构,确保业务系统和中台既能独立运作又能协同工作。需要强调解耦、标准化、性能优化等方面。 可能会遗漏的部分是具体的例子或组件,比如使用的技术工具(Kafka、Hadoop等),需要适当提及。同时,确保架构描述清晰,逻辑分明,让用户能理解各部分的职责和交互流程。 最后,总结时需要再次强调数据中台与业务系统的协同效应,以及架构设计的关键点,帮助用户形成完整的认识。以下是</think>数据中台与业务系统结合的架构图描述及核心逻辑解析,通过分层设计展现两者的协同关系: --- ### **整体架构图(文字描述)** ``` +-------------------+ +-----------------------+ | | | | | **业务系统层** | | **数据应用层** | | (OLTP场景) |<--->| (OLAP场景) | | - 交易系统 | | - BI报表 | | - CRM系统 | | - 用户画像 | | - ERP系统 | | - 实时大屏 | | - 物流系统 | | - 推荐引擎 | +---------+ ↓ ↑ +-------------------+ +-----------------------+ | **数据接入层** | | **数据服务层** | | - CDC实时同步 | | - 统一API网关 | | - ETL批处理 | | - 标签服务 | | - 日志采集 | | - 指标服务 | | - API数据拉取 | | - 数据资产目录 | +-------------------+ +-----------------------+ ↓ +-----------------------------------------------+ | **数据存储与计算层** | | (数据中台核心) | | +-----------------+ +---------------------+ | | | **原始数据层** | | **明细数据层** | | | | - ODS原始镜像 | | - DWD宽表 | | | | (业务表备份) | | (多系统数据整合) | | | +-------+ | | +-----------------+ +---------------------+ | | | **汇总数据层** | | **维度数据层** | | | | - DWS汇总指标 | | - 维度表/字典表 | | | | (预聚合计算) | | (一致性维度定义) | | | +-----------------+ +-----------------+ ``` --- ### **核心模块解析** #### **1. 业务系统层(数据源)** - **角色**:数据的生产者,支撑企业核心业务流程。 - **典型系统**: - **交易系统**:订单、支付数据。 - **CRM系统**:客户信息、行为日志。 - **ERP系统**:供应链、库存数据。 - **IoT/日志系统**:设备传感器数据、用户操作日志。 - **特点**:高并发事务处理(OLTP),表结构随业务快速迭代。 #### **2. 数据接入层** - **核心能力**:**多模态数据采集**。 - **技术工具**: - **批量同步**:Sqoop、DataX(适合T+1数据迁移)。 - **实时同步**:Debezium(CDC)、Kafka(消息队列)。 - **日志采集**:Flume、Filebeat。 - **API对接**:定制化接口调用(如Restful API)。 - **关键设计**: - **数据缓冲**:使用Kafka作为异步管道,解耦业务系统与中台。 - **轻量级清洗**:去重、格式校验(如时间戳标准化)。 #### **3. 数据存储与计算层(数据中台核心)** - **分层设计**: - **ODS层(原始数据层)**: - 直接映射业务系统表结构,保留原始数据。 - 存储方式:全量快照 + 增量日志(如Hive分区表)。 - **DWD层(明细数据层)**: - **独立建模**:跨系统数据整合(如订单+用户+商品宽表)。 - **标准化处理**:统一字段命名、单位、编码(如性别转码)。 - **DWS层(汇总数据层)**: - 预聚合指标(如分区域销售额、用户留存率)。 - 使用OLAP引擎(如ClickHouse、Doris)加速查询。 - **维度层**: - 维护一致性维度(如地区字典表、用户分级标准)。 - **技术栈**: - **存储**:HDFS(海量数据)、Iceberg/Hudi(数据湖表格式)。 - **计算**:Spark/Flink(批流一体)、Presto/Trino(即席查询)。 #### **4. 数据服务层** - **核心功能**:**将数据资产API化**。 - **典型服务**: - **查询服务**:SQL接口、OLAP多维查询。 - **标签服务**:实时用户标签计算(如“高价值客户”)。 - **指标服务**:预定义业务指标(GMV、DAU)的快速获取。 - **数据目录**:元数据管理、数据血缘追踪。 - **技术实现**: - **API网关**:统一鉴权、限流(如Kong、Spring Cloud Gateway)。 - **缓存优化**:Redis缓存热点数据,降低数据库压力。 #### **5. 数据应用层** - **典型场景**: - **BI报表**:Tableau、FineBI可视化。 - **用户画像**:圈选特定群体进行精准营销。 - **实时监控**:基于Flink的欺诈检测、库存预警。 - **AI模型**:推荐算法、销量预测。 --- ### **关键交互流程** 1. **数据从业务系统到中台** - 交易系统 → Kafka(CDC捕获增量) → ODS层(原始存储) → ETL清洗 → DWD宽表。 2. **数据从中台到业务系统** - 数据服务层(API) → 返回实时库存状态 → 交易系统下单页展示。 3. **闭环反馈** - 推荐引擎(应用层) → 调用标签服务 → 更新用户行为数据 → 回流至DWD层。 --- ### **架构设计原则** 1. **松耦合** - 业务系统与中台通过消息队列或API交互,避免直接库表依赖。 2. **可扩展性** - 数据分层结构支持灵活新增数据源(如新增一个业务系统仅需扩展ODS层接入)。 3. **性能隔离** - 业务系统OLTP数据库与中台OLAP存储分离,避免资源竞争。 4. **治理标准化** - 中台内定义全局数据标准(如主数据模型),反向推动业务系统改造。 --- ### **示例:电商场景联动** 1. **业务系统**:用户下单后,订单数据经CDC同步至中台ODS层。 2. **数据中台**: - DWD层:关联订单表(交易系统)、用户表(CRM)、库存表(ERP)生成宽表。 - DWS层:按小时汇总各品类销售额。 3. **数据服务**:大屏调用API获取实时销售额,风控系统查询用户画像。 4. **应用反馈**:推荐引擎根据画像调整首页商品排序,提升转化率。 --- ### **总结** 数据中台与业务系统的架构设计,本质是通过**分层解耦**和**服务化**,将分散的业务数据转化为可复用的数据资产。业务系统专注于流程执行,中台则承担数据整合、加工与开放职责,最终形成“业务产生数据 → 数据反哺业务”的闭环。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值