<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[maple_son的专栏]]></title><description><![CDATA[浮游撼树]]></description><link>https://blog.youkuaiyun.com/maple_son</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; maple_son]]></copyright><item><title><![CDATA[Doris画像存储实践系列二]]></title><link>https://blog.youkuaiyun.com/maple_son/article/details/136557105</link><guid>https://blog.youkuaiyun.com/maple_son/article/details/136557105</guid><author>maple_son</author><pubDate>Fri, 08 Mar 2024 14:16:20 +0800</pubDate><description><![CDATA[通过doris聚合模型+REPLACE_IF_NOT_NULL 聚合函数实现。“画像宽表” + bitmap倒排表方案,在。]]></description><category></category></item><item><title><![CDATA[Doris 实时数仓建设实践]]></title><link>https://blog.youkuaiyun.com/maple_son/article/details/128672468</link><guid>https://blog.youkuaiyun.com/maple_son/article/details/128672468</guid><author>maple_son</author><pubDate>Fri, 13 Jan 2023 17:55:05 +0800</pubDate><description><![CDATA[Drois 从早期的百度项目，到开源Apache Doris，到商业化的StarRocks，到各大云服务商，陆续上线，作为新一代的OLAP解决方案，在应用场景上表现得非常好整理对近期对Doris实时数仓建设的一些思考建立外表 - 实现跨库连表分析数据导入 - 减少业务库性能压力对数据导入的表进行表结构优化 - 增加查询性能对数据导入的表建立物化视图 - 增加查询性能维度模型规划维度表与事实表 - 增加查询性能对通过建模生成的事实表做物化视图 - 增加查询性能。]]></description><category></category></item><item><title><![CDATA[判断一个时间段是否经过了另一个时间段]]></title><link>https://blog.youkuaiyun.com/maple_son/article/details/128035092</link><guid>https://blog.youkuaiyun.com/maple_son/article/details/128035092</guid><author>maple_son</author><pubDate>Fri, 25 Nov 2022 18:53:47 +0800</pubDate><description><![CDATA[判断一个时间段是否经过了另一个时间段
如查询2022-10-10 15:00:00 - 2022-10-10 23:00:00 之间存在离线的记录,需要命中id=1的数据。IOT设备存在离线与恢复时间记录，每一次离线和恢复记为一个周期即一条数据, 现在需要统计出在某个时段存在离线记录的数据,如果目前未恢复,没有恢复时间，恢复时间置为9999-01-01 00:00:00。在时间区间2022-10-10 15:00:00 至 2022-10-10 23:00:00之间的上班时段8点-20之间经历过离线的数据。]]></description><category></category></item><item><title><![CDATA[Kimball 维度建模理论]]></title><link>https://blog.youkuaiyun.com/maple_son/article/details/127870846</link><guid>https://blog.youkuaiyun.com/maple_son/article/details/127870846</guid><author>maple_son</author><pubDate>Tue, 15 Nov 2022 18:54:34 +0800</pubDate><description><![CDATA[雪花模型指的是在星型模型的基础上，维度表再关联维度表，这种结构应该在OLTP场景下会用这样的结构，在数仓下基本没人使用。如果业务数据存储为这样的结构，常常将数据打平，即合并成一张维度表，这样它将会上级为星型模型。kimball 维度建模，星型和星座 模型核心在于将事实表（过程数据通常不变的数据）与主体信息表（常更新的数据，有维度信息）逻辑进行拆分。在实际业务中，星座模型才是数仓建设的最终归属，它也是建立在星型模式下，不同的是只是和其他事实表共享了维度表，即存在多张事实表，共享一张维度表的情况。]]></description><category></category></item><item><title><![CDATA[springboot ObjectId 序列化 反序列化]]></title><link>https://blog.youkuaiyun.com/maple_son/article/details/124993143</link><guid>https://blog.youkuaiyun.com/maple_son/article/details/124993143</guid><author>maple_son</author><pubDate>Thu, 26 May 2022 21:31:37 +0800</pubDate><description><![CDATA[springboot mongodb ObjectId 序列化，反序列化
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
import com.fasterxml.jackson.databind.ObjectMapper;
imp]]></description><category></category></item><item><title><![CDATA[springboot 2.6.x 自定义注册 RequestMapping]]></title><link>https://blog.youkuaiyun.com/maple_son/article/details/122572869</link><guid>https://blog.youkuaiyun.com/maple_son/article/details/122572869</guid><author>maple_son</author><pubDate>Wed, 19 Jan 2022 09:41:13 +0800</pubDate><description><![CDATA[springboot 2.6.x以上版本自定义RequestMapping问题：
Expected lookupPath in request attribute "org.springframework.web.util.UrlPathHelper.PATH".]]></description><category></category></item><item><title><![CDATA[第几次行为数据清洗]]></title><link>https://blog.youkuaiyun.com/maple_son/article/details/121384413</link><guid>https://blog.youkuaiyun.com/maple_son/article/details/121384413</guid><author>maple_son</author><pubDate>Wed, 17 Nov 2021 19:09:18 +0800</pubDate><description><![CDATA[产品需求：

显示用户的行为记录上第几次访问：  比如：『张三第3次访问了这篇文章』

想法1：

实现：首先想到的是去数据库『明细』表中查询一下历史数量，然后本次入库+1
问题：很明显，性能差到爆

想法2：

实现： 在数据库中维护字典，描述为『最后的次数』
问题：性能好是好点了，但抗不住并发，抗不住高峰（不用高，低的并发也抗不住）

想法3：

实现： 将字典缓存在Redis中，使用inc自增，进行缓存
问题：redis字典数据的生命周期，时间越久，数据越大，总有一天能占满，或者更换redis时次数字]]></description><category></category></item><item><title><![CDATA[Doris 画像标签存储实践]]></title><link>https://blog.youkuaiyun.com/maple_son/article/details/120416295</link><guid>https://blog.youkuaiyun.com/maple_son/article/details/120416295</guid><author>maple_son</author><pubDate>Thu, 23 Sep 2021 11:15:29 +0800</pubDate><description><![CDATA[根据画像标签的需求场景，我们常常将画像存储分为两部份，分别是：

画像基本信息的存储
用户画像人群的筛选需求的存储

常见画像标签存储方式：

根据类目创建宽表，或者根据更新的频率创建宽表
创建竖表-每个用户+每个标签=一条记录
竖表+横表=》分开计算，定时聚合
ES 标签对象存储，rowKey为user_id，HBASE存储用户明细，通过user_id关联
倒排表，标签-》多个用户Id，bitmap方案

一、根据类目创建宽表，或者根据更新的频率创建宽表
1. 这是最容易想到的方式，同时也是最直观的方式，]]></description><category></category></item><item><title><![CDATA[数据开放平台]]></title><link>https://blog.youkuaiyun.com/maple_son/article/details/120412190</link><guid>https://blog.youkuaiyun.com/maple_son/article/details/120412190</guid><author>maple_son</author><pubDate>Wed, 22 Sep 2021 13:52:50 +0800</pubDate><description><![CDATA[数据开放平台介绍

数仓，数据湖，数据中台，都是对于数据资产的管理，而对于管理起来的数据如何对业务系统快速赋能，一直是数据团队需要深入考虑的问题
对业务系统赋能，一般有两种方式，一是提供API供业务系统调用，二是将数据推送给业务系统。这里描述的是第一种API形式供业务系统访问的平台 『数据开放平台』
在以往，要以API形式提供给业务方，需要数据团队独立开发以周为版本的迭代
使用过BI的同学知道，一些报表，和统计结果，只需要几条Sql就能完成大部份的业务需求，很快捷。那么如果我为这些SQL配一个API访问地址]]></description><category></category></item><item><title><![CDATA[Rocket-API 集群模式部署]]></title><link>https://blog.youkuaiyun.com/maple_son/article/details/119243041</link><guid>https://blog.youkuaiyun.com/maple_son/article/details/119243041</guid><author>maple_son</author><pubDate>Fri, 30 Jul 2021 12:02:02 +0800</pubDate><description><![CDATA[1. 问题？

当Rocket-API需要多实例部署，以达到负载和并发访问的目的时，任意一个实例API信息的修改，动态数据源配置的变更等，带有实例属性的信息时，变更无法广播给所有实例，就会导致信息不一致的问题
在以往需要以重启整个集群所有实例为代价，让各实例去获取到最新信息，极大的影响到线上用户的访问
在Rocket-API 2.4.0.RELEASE中提交了此功能，变更实例之间实时同步，无需重启

2. 配置方式如下：

在yml中配置集群模式如下：默认值为none表示单机模式。redis表示以Redis]]></description><category></category></item><item><title><![CDATA[去中心化的分布式websocket通信架构演进]]></title><link>https://blog.youkuaiyun.com/maple_son/article/details/112847607</link><guid>https://blog.youkuaiyun.com/maple_son/article/details/112847607</guid><author>maple_son</author><pubDate>Tue, 19 Jan 2021 17:15:21 +0800</pubDate><description><![CDATA[#去中心化的分布式websocket通信架构演进

概念：

cluster：代表一个集群，集群中有多个节点，集群是去中心化的，字面上理解就是无中心节点，与任何节点连接websocket来通信都是等价的
node: 代表一个节点，是集群中的一个组成元素，也是用户websocket长连接状态下的某个实例
roomId: 房间ID，将用户分组，实现组内用户的消息广播
clientId: 用户ID，用户身份的唯一标识
channelId: node在分布式环境下的唯一标识

需求：

房间内消息广播，类似群聊

]]></description><category></category></item><item><title><![CDATA[Rocket-API-Platform 统一接口平台]]></title><link>https://blog.youkuaiyun.com/maple_son/article/details/110366819</link><guid>https://blog.youkuaiyun.com/maple_son/article/details/110366819</guid><author>maple_son</author><pubDate>Mon, 30 Nov 2020 09:28:21 +0800</pubDate><description><![CDATA[Rocket-API-Platform
项目介绍：
1.基于Rocket-API
2.允许在提供的UI页面上完成多数据源以及springboot application.yml的一系列动态配置，保存即刷新配置
能做什么：
1.统一的数据接口平台
2.统一的数据处理中心
3.开发中前端同学的测试数据来源
4.报表，统计信息查询以及导出
项目截图：

目前情况：
内置常用的数据库驱动:
Sqlserver
PostgreSQL
Sqlite
Derby
H2
HSQLDB
MySQL
Oracle
Sybase]]></description><category></category></item><item><title><![CDATA[Rocket-API 的前世今生]]></title><link>https://blog.youkuaiyun.com/maple_son/article/details/109824750</link><guid>https://blog.youkuaiyun.com/maple_son/article/details/109824750</guid><author>maple_son</author><pubDate>Thu, 19 Nov 2020 22:56:10 +0800</pubDate><description><![CDATA[大家好，我是一名资深搬砖工程师，常常忙碌于增查删改中，无法自拔。
后来幸得大师指点，转行做了一名杀手，作为一名杀手，需要一套武器装备
我曾：
经历过APIJSON的暧昧
经历过GraphQL的诱惑
经历过DataWay的熏陶
后得大师点醒，为什么不直接搞SQL呢
为什么不直接搞SQL呢…
为什么不直接搞SQL呢…
为什么不直接搞SQL呢…
这来自灵魂的三大暴击，一下子打动了我
那就搞一个?  那就搞一个!
https://gitee.com/alenfive/rocket-api
第一版本
画了个页面，可.]]></description><category></category></item><item><title><![CDATA[与第三方系统打通的N种进阶方式]]></title><link>https://blog.youkuaiyun.com/maple_son/article/details/109637250</link><guid>https://blog.youkuaiyun.com/maple_son/article/details/109637250</guid><author>maple_son</author><pubDate>Thu, 12 Nov 2020 14:38:38 +0800</pubDate><description><![CDATA[第一级别

使用HTTP协议，来进行交互，对失败的请求进行内存重试3次，3次后丢弃

第二级别

对失败的数据进行持久化重试，存放于数据库中，用定时任务来对失败的数据进行重新处理，重试3次以后丢弃，3次的间隔时间固定

第三级别

优化重试策略，考虑到如果重试时间间隔设置得太短，第三方宕机短时间内无法恢复，会跳过3次重试时间隔离。
如果重试次数太多，比如设置10次，1是耗资源（对方服务短时间内能恢复的就已经恢复了，恢复不了的，短时间内重试这么多次也没有意义），2是定时任务不能很快的处理到新产生的数据
如果重]]></description><category></category></item><item><title><![CDATA[ScriptEngineManager groovy 内存泄露]]></title><link>https://blog.youkuaiyun.com/maple_son/article/details/109177370</link><guid>https://blog.youkuaiyun.com/maple_son/article/details/109177370</guid><author>maple_son</author><pubDate>Tue, 20 Oct 2020 12:09:33 +0800</pubDate><description><![CDATA[业务场景：

使用java8提供的ScriptEngineManager 加载并运行groovy脚本，每次运行从数据库中获取脚本来实现动态编译运行

运行一段时间后

初始用户量少，没感觉，偶尔一次内存溢出重启就好（话外音：搞不清楚状况先重启 总是没错的）
后来用户量越来越大，溢出的次数就越来越频繁 java.lang.OutOfMemoryError: GC overhead limit exceeded

通过导出headdump分析

发现非堆内存一直在持续增加，不能释放，网上查询的资料也说明了这一点]]></description><category></category></item><item><title><![CDATA[springboot 服务最终一致性方案]]></title><link>https://blog.youkuaiyun.com/maple_son/article/details/108725804</link><guid>https://blog.youkuaiyun.com/maple_son/article/details/108725804</guid><author>maple_son</author><pubDate>Tue, 22 Sep 2020 16:12:01 +0800</pubDate><description><![CDATA[目前市面上现有的最终一致性方案有：
1.分布式事务

一致性第一个想到的方案，但性能低下，数据源限制，等等问题，基本没用

2.RPC直调

最便宜，最省事，也是最没有保障的一种方案

3.MQ,KAFKA中间件

使用得最多，也是最容易入坑的方式，看看你的项目中是否有注意以下问题：
0.埋点问题，在一个复杂的业务中，是写个拦截器呢还是所有地方都来埋个点呢？
1.发送端埋点上报与数据库事务非原子性操作问题，先操作数据库，还是先上报MQ?
2.发送端发送消息是否有确认机制？
3.发送端发送消息在内存重试过程中]]></description><category></category></item><item><title><![CDATA[如何实现1分钟写一个API接口]]></title><link>https://blog.youkuaiyun.com/maple_son/article/details/108196584</link><guid>https://blog.youkuaiyun.com/maple_son/article/details/108196584</guid><author>maple_son</author><pubDate>Mon, 24 Aug 2020 12:39:47 +0800</pubDate><description><![CDATA[Rocket API
第一步,创建接口

第二步,定义接口

第三步,接口逻辑

第四步,接口访问测试

官方文档地址：[https://gitee.com/mihuajun/rocket-api-doc/wikis/pages]

]]></description><category></category></item><item><title><![CDATA[Rocket-API 快速开始]]></title><link>https://blog.youkuaiyun.com/maple_son/article/details/108128267</link><guid>https://blog.youkuaiyun.com/maple_son/article/details/108128267</guid><author>maple_son</author><pubDate>Fri, 21 Aug 2020 16:09:05 +0800</pubDate><description><![CDATA[快速开始
#1. 添加依赖
&lt;dependency&gt;
    &lt;groupId&gt;com.github.alenfive&lt;/groupId&gt;
    &lt;artifactId&gt;rocket-api-boot-starter&lt;/artifactId&gt;
    &lt;version&gt;0.0.1-SNAPSHOT&lt;/version&gt;
&lt;/dependency&gt;

版本查看: https://gitee.com/mihuajun]]></description><category></category></item><item><title><![CDATA[您还在用mybatis plus和jpa吗]]></title><link>https://blog.youkuaiyun.com/maple_son/article/details/107201158</link><guid>https://blog.youkuaiyun.com/maple_son/article/details/107201158</guid><author>maple_son</author><pubDate>Wed, 08 Jul 2020 11:13:24 +0800</pubDate><description><![CDATA[Rocket API
摘要

用于快速开发API接口。不再定义Controller,Service,Dao,Mybatis,xml,Entity,VO等对象.
可视化界面，将入参自动封装到可执行的脚本上，支持所有关系性数据库SQL执行语句，非关系型MONGODB查询语句.
完全基于springboot2.x,无侵入性，新老项目都能快速集成
无需编写一行代码即可完成大部分的需求开发，使用难度级别（测试 or 运维）也可参与开发
动态编译，无需重启，即时生效

快速开始
#1. 添加依赖
&lt;depende]]></description><category></category></item><item><title><![CDATA[dataway header传参]]></title><link>https://blog.youkuaiyun.com/maple_son/article/details/105947993</link><guid>https://blog.youkuaiyun.com/maple_son/article/details/105947993</guid><author>maple_son</author><pubDate>Wed, 06 May 2020 12:07:09 +0800</pubDate><description><![CDATA[import 'net.hasor.dataql.fx.web.WebUdfSource' as webData;

return webData.getHeader("name");



]]></description><category></category></item></channel></rss>