自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

maple_son的专栏

浮游撼树

  • 博客(43)
  • 资源 (1)
  • 收藏
  • 关注

原创 去中心化的分布式websocket通信架构演进

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

2021-01-19 17:15:21 2824 6

原创 如何实现1分钟写一个API接口

Rocket API第一步,创建接口第二步,定义接口第三步,接口逻辑第四步,接口访问测试官方文档地址:[https://gitee.com/mihuajun/rocket-api-doc/wikis/pages]

2020-08-24 12:39:47 43577 6

原创 Doris画像存储实践系列二

通过doris聚合模型+REPLACE_IF_NOT_NULL 聚合函数实现。“画像宽表” + bitmap倒排表方案,在。

2024-03-08 14:16:20 383

原创 Doris 实时数仓建设实践

Drois 从早期的百度项目,到开源Apache Doris,到商业化的StarRocks,到各大云服务商,陆续上线,作为新一代的OLAP解决方案,在应用场景上表现得非常好整理对近期对Doris实时数仓建设的一些思考建立外表 - 实现跨库连表分析数据导入 - 减少业务库性能压力对数据导入的表进行表结构优化 - 增加查询性能对数据导入的表建立物化视图 - 增加查询性能维度模型规划维度表与事实表 - 增加查询性能对通过建模生成的事实表做物化视图 - 增加查询性能。

2023-01-13 17:55:05 3000

原创 判断一个时间段是否经过了另一个时间段

判断一个时间段是否经过了另一个时间段如查询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之间经历过离线的数据。

2022-11-25 18:53:47 666

转载 Kimball 维度建模理论

雪花模型指的是在星型模型的基础上,维度表再关联维度表,这种结构应该在OLTP场景下会用这样的结构,在数仓下基本没人使用。如果业务数据存储为这样的结构,常常将数据打平,即合并成一张维度表,这样它将会上级为星型模型。kimball 维度建模,星型和星座 模型核心在于将事实表(过程数据通常不变的数据)与主体信息表(常更新的数据,有维度信息)逻辑进行拆分。在实际业务中,星座模型才是数仓建设的最终归属,它也是建立在星型模式下,不同的是只是和其他事实表共享了维度表,即存在多张事实表,共享一张维度表的情况。

2022-11-15 18:54:34 1384

原创 springboot ObjectId 序列化 反序列化

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

2022-05-26 21:31:37 563

原创 springboot 2.6.x 自定义注册 RequestMapping

springboot 2.6.x以上版本自定义RequestMapping问题:Expected lookupPath in request attribute "org.springframework.web.util.UrlPathHelper.PATH".

2022-01-19 09:41:13 3898 1

原创 第几次行为数据清洗

产品需求:显示用户的行为记录上第几次访问: 比如:『张三第3次访问了这篇文章』想法1:实现:首先想到的是去数据库『明细』表中查询一下历史数量,然后本次入库+1问题:很明显,性能差到爆想法2:实现: 在数据库中维护字典,描述为『最后的次数』问题:性能好是好点了,但抗不住并发,抗不住高峰(不用高,低的并发也抗不住)想法3:实现: 将字典缓存在Redis中,使用inc自增,进行缓存问题:redis字典数据的生命周期,时间越久,数据越大,总有一天能占满,或者更换redis时次数字

2021-11-17 19:09:18 1260

原创 Doris 画像标签存储实践

根据画像标签的需求场景,我们常常将画像存储分为两部份,分别是:画像基本信息的存储用户画像人群的筛选需求的存储常见画像标签存储方式:根据类目创建宽表,或者根据更新的频率创建宽表创建竖表-每个用户+每个标签=一条记录竖表+横表=》分开计算,定时聚合ES 标签对象存储,rowKey为user_id,HBASE存储用户明细,通过user_id关联倒排表,标签-》多个用户Id,bitmap方案一、根据类目创建宽表,或者根据更新的频率创建宽表1. 这是最容易想到的方式,同时也是最直观的方式,

2021-09-23 11:15:29 3468 12

原创 数据开放平台

数据开放平台介绍数仓,数据湖,数据中台,都是对于数据资产的管理,而对于管理起来的数据如何对业务系统快速赋能,一直是数据团队需要深入考虑的问题对业务系统赋能,一般有两种方式,一是提供API供业务系统调用,二是将数据推送给业务系统。这里描述的是第一种API形式供业务系统访问的平台 『数据开放平台』在以往,要以API形式提供给业务方,需要数据团队独立开发以周为版本的迭代使用过BI的同学知道,一些报表,和统计结果,只需要几条Sql就能完成大部份的业务需求,很快捷。那么如果我为这些SQL配一个API访问地址

2021-09-22 13:52:50 863

原创 Rocket-API 集群模式部署

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

2021-07-30 12:02:02 2697

原创 Rocket-API-Platform 统一接口平台

Rocket-API-Platform项目介绍:1.基于Rocket-API2.允许在提供的UI页面上完成多数据源以及springboot application.yml的一系列动态配置,保存即刷新配置能做什么:1.统一的数据接口平台2.统一的数据处理中心3.开发中前端同学的测试数据来源4.报表,统计信息查询以及导出项目截图:目前情况:内置常用的数据库驱动:SqlserverPostgreSQLSqliteDerbyH2HSQLDBMySQLOracleSybase

2020-11-30 09:28:21 2859

原创 Rocket-API 的前世今生

大家好,我是一名资深搬砖工程师,常常忙碌于增查删改中,无法自拔。后来幸得大师指点,转行做了一名杀手,作为一名杀手,需要一套武器装备我曾:经历过APIJSON的暧昧经历过GraphQL的诱惑经历过DataWay的熏陶后得大师点醒,为什么不直接搞SQL呢为什么不直接搞SQL呢…为什么不直接搞SQL呢…为什么不直接搞SQL呢…这来自灵魂的三大暴击,一下子打动了我那就搞一个? 那就搞一个!https://gitee.com/alenfive/rocket-api第一版本画了个页面,可.

2020-11-19 22:56:10 2841

原创 与第三方系统打通的N种进阶方式

第一级别使用HTTP协议,来进行交互,对失败的请求进行内存重试3次,3次后丢弃第二级别对失败的数据进行持久化重试,存放于数据库中,用定时任务来对失败的数据进行重新处理,重试3次以后丢弃,3次的间隔时间固定第三级别优化重试策略,考虑到如果重试时间间隔设置得太短,第三方宕机短时间内无法恢复,会跳过3次重试时间隔离。如果重试次数太多,比如设置10次,1是耗资源(对方服务短时间内能恢复的就已经恢复了,恢复不了的,短时间内重试这么多次也没有意义),2是定时任务不能很快的处理到新产生的数据如果重

2020-11-12 14:38:38 938 2

原创 ScriptEngineManager groovy 内存泄露

业务场景:使用java8提供的ScriptEngineManager 加载并运行groovy脚本,每次运行从数据库中获取脚本来实现动态编译运行运行一段时间后初始用户量少,没感觉,偶尔一次内存溢出重启就好(话外音:搞不清楚状况先重启 总是没错的)后来用户量越来越大,溢出的次数就越来越频繁 java.lang.OutOfMemoryError: GC overhead limit exceeded通过导出headdump分析发现非堆内存一直在持续增加,不能释放,网上查询的资料也说明了这一点

2020-10-20 12:09:33 2898 1

原创 springboot 服务最终一致性方案

目前市面上现有的最终一致性方案有:1.分布式事务一致性第一个想到的方案,但性能低下,数据源限制,等等问题,基本没用2.RPC直调最便宜,最省事,也是最没有保障的一种方案3.MQ,KAFKA中间件使用得最多,也是最容易入坑的方式,看看你的项目中是否有注意以下问题:0.埋点问题,在一个复杂的业务中,是写个拦截器呢还是所有地方都来埋个点呢?1.发送端埋点上报与数据库事务非原子性操作问题,先操作数据库,还是先上报MQ?2.发送端发送消息是否有确认机制?3.发送端发送消息在内存重试过程中

2020-09-22 16:12:01 1518

原创 Rocket-API 快速开始

快速开始#1. 添加依赖<dependency> <groupId>com.github.alenfive</groupId> <artifactId>rocket-api-boot-starter</artifactId> <version>0.0.1-SNAPSHOT</version></dependency>版本查看: https://gitee.com/mihuajun

2020-08-21 16:09:05 3585 2

原创 您还在用mybatis plus和jpa吗

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

2020-07-08 11:13:24 5481

原创 dataway header传参

import 'net.hasor.dataql.fx.web.WebUdfSource' as webData;return webData.getHeader("name");

2020-05-06 12:07:09 701

原创 拜托 别再搞逻辑删除了

拜托 别再搞逻辑删除了基于领导的一句话:”产生的数据都是有价值的数据“,因此第一个想到的就是假删(”逻辑删除“),还将其定义为了一个标准,所有表都要有 逻辑删除字段is_validate,从此开始了不幸的旅途自从有了逻辑删除,唯一索引再也与我没有了缘分自从有了逻辑删除,所有的单表查询,连接查询,更新,带where的我都得带上他自从有了逻辑删除,我再也分不清别人设计的表是一对一,一对多,还...

2020-04-29 19:14:12 949 4

原创 单表操作API依赖包

<dependency> <groupId>com.github.alenfive</groupId> <artifactId>common-api-boot-starter</artifactId> <version>1.0.0.RELEASE</version> &l...

2020-04-22 15:13:37 268

原创 Mybatis 扫描依赖包中的mapper

业务场景1/提取公共mapper文件配置2/集成springboot starter特性,依赖即生效方法1/引入依赖后包,再使用@MapperScan 在配置类中添加注解,完成扫描指包定的mapper文件2/在依赖包中复制类 org.mybatis.spring.mapper.MapperScannerConfigurer 为 CustomMapperScannerConfigurer...

2020-04-21 15:37:46 3493

原创 Mysql 通用任意单表查询API设计

应用场景1/数据库任意单表查询的重复劳动2/数据库任意单表多业务需要不同字段的重复劳动#说明1/黑名单设计,解决敏感表和敏感字段拦截2/防SQL注入处理,对key,value的合法性进行验证3/对于表名暴露给前端,有两种处理方式,一种由node层来传参,一种服务器添加一个表名映射,实现逻辑表与物理表的联系4/为了性能考虑,fields与filter为必填项5/可扩展:加入分页查询,...

2020-04-16 14:49:13 551 2

原创 一篇,快速搞懂各种重试策略

#数据同步,通过指数级重试业务场景:1、第三方系统的用户在我方系统产生了订单记录,我方系统需要将订单信息同步给第三方系统2、考虑到网络等不可抗力因素,希望失败的时候能够重试,又不希望无限重试,比如希望只重试3次3、因为三方系统一旦发生故障,短时间内不一定能恢复,所以重试的时候能够有一 where count <= #{count} and sync = ...

2020-03-22 16:33:52 802

原创 mybatis-plus 我不用了

优点一键生成controller/service/mapper/entity/xml提供通用针对单表的增查删改提供Wrapper 针对相对复杂及自定义的查询操作内置多种数据库的分页查询支持ID主键生成器还有其他从这里看功能还是相当完美,很吸引人经常面试的时候问数据库的优化方案:,其中一项是select * 返回所有字段不可使用,要求只返回业务需要的字段。plus下我需要这...

2020-03-09 19:43:54 6933 12

原创 springboot @RequestHeader 实体对象接收header json参数

构建ReplaceRequestHeaderMethodArgumentResolver @PostMapping("/test") public void listProject(@RequestHeader UserInfo userInfo){ System.out.println(curUserInfo); }curl --location --r...

2020-03-05 18:53:41 4663

原创 springboot2 oauth2授权重定向匹配版本问题

"At least one redirect_uri must be registered with the client"从springboot1.x升到2.x 出现如下异常:原因: `DefaultRedirectResolver.resolveRedirect`springboot 1.xspringboot 2.X解决方法从springboot1.x升到2.x 出现如下异常:OAuth...

2019-08-22 00:45:52 4945

翻译 springboot 禁用某项健康检查

springboot 禁用某项健康检查management.health.mail.enabledmanagement.health.mongo.enabledmanagement.health.redis.enabledmanagement.health.solr.enabledmanagement.health.elasticsearch.enabledhttp://docs.s...

2019-05-23 16:54:54 14643

原创 springboot 长轮询实现

springboot 长轮询实现基于 @EnableAsync , @Sync@SpringBootApplication@EnableAsyncpublic class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.cla...

2019-02-22 19:10:05 9231 2

原创 基于线程池的事件通知的生产者与消费者

基于线程池的事件通知的生产者与消费者/** * 基于线程池的事件通知的生产者与消费者 * @Author: mihuajun 【[email protected]】 * @Date: 12/9/2018 10:22 AM */public class ThreadPoolProducerConsumerDemo { public static void main(String[...

2019-02-18 16:56:53 306

原创 Java 匹配括号中的值

代码String str = "首单${name}典可升级为高${phone}品无损音质";Pattern pattern = Pattern.compile("(?<=\\$\\{)[^\\}]+")Matcher m = pattern.matcher(str);while(m.find()){ System.out.println(m.group());}输出Connected t

2016-12-16 11:19:23 1595

原创 java 文件、文件夹 递归复制、移动

package com.freedom.utils;import java.io.*;/** * 文件、文件夹 递归复制、移动 * @Author: mihuajun 【[email protected]】 * @Date: 12/9/2016 10:22 AM */public class FileUtils { public static void copy(File sour

2016-12-09 13:02:03 689

原创 spring mvc 异步请求

需要环境:servlet >3.0 and Spring MVC>3.2和普通的new Thread 进行能异步处理却无法返回异步处理的结果不同,spring 提供的异步支持异步处理的同时还能对异步处理的结果进行返回他有三种实现方式第一种:直接返回Callable< T>对象 @RequestMapping("/async") public Callable<String> asy

2016-11-23 16:36:01 677

原创 nexus3.1.x安装后无法用初始密码登录

从官网下载nexus最新版3.1.0 https://www.sonatype.com/oss-thank-you-tar.gz 下载解压后有两个文件夹,分别是nexus-3.1.0-04 sonatype-work 将sonatype-work目录删除后,才能通过初始密码admin|admin123登录

2016-11-23 10:11:57 2220

原创 hive自定义函数 将查询统计结果输出到指定的jdbc数据源

如题: 1、自定义类继承抽象类GenericUDF 2、实现抽象类的三个方法 3、将其打成jar包(打成jar包时不需要指定main)eg: dop-udfdb.jar 4、进入hive命令行执行下面的命令 将该ja包加入到hive环境 hive>add jar dop-udfdb.jar;5、添加jdbc驱动支持,这里mysql 驱动,不同的数据源添加各自的驱动包hive>add jar

2016-11-22 18:40:00 669

原创 ubuntu搜索源中的软件

ubuntu中能使用apt-get install 方式安装软件,但前提得知道软件名称,使用下面的方式sudo apt-cache search mysql根据关键字“mysql”查询软件名称中和软件介绍中包含此关键字的软件,并且支持正则表达式匹配例如查询以mysql-server开头的软件包:sudo apt-cache search "^mysql-server*"支持显示包的详情,例:sudo

2016-11-22 17:48:27 615

原创 将任意json转二维表 不限级

/**限制: * {}直接下级不能有{} * []直接下级不能有[] * []的直接下级类型一致,要么都是int,要么都是string,要么都是{} * * 操作方式: * 1、第一步:处理json对象,保证同一级中不存在多个集合,多余的集合放到第一个集合中的每一个子元素中 * 2、第二步:深度递归 * */ * package com.wanxiaobao.d

2016-11-18 10:24:40 1770

原创 单例设计

通过内部类加载的互斥原理,实现懒加载和线程安全的单例/** * @Author: mihuajun 【[email protected]】 * @Date: 11/16/2016 10:04 AM */public class JdbcPropertiesLoader { static class newInstance{ private static JdbcProp

2016-11-16 10:52:02 199

转载 java 重启路由器

思路:模拟http请求,调用路由器重启命令说明:路由器的密码是base64编码后的结果,所以需要转一下。重启命令:http://192.168.2.1/userRpm/SysRebootRpm.htm?Reboot=重启路由器request.addHeader("Referer", "http://192.168.2.1/");//没它不行,估计这里做了限制,以前没有是可以的(据资料说

2015-01-27 21:36:37 1713

网页版打字游戏

这是一款模仿金山打字通而来的网页版打字游戏,游戏由 javascript编写

2013-04-24

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除