第四章:druid.io的功能

目前druid.io的版本已经发展到0.7.1了,其功能也在不断的完善中,功能的基本描述及使用在官方文档上面已经有很详细的介绍。

这里将不对功能做过多的描述,重点是在用的过程和怎么用。


目前druid.io提供了几个查询类型功能:
1、groupby
2、search
3、segment Metadata
4、timeseries
5、topN
6、datasource metadata
其中1、2、4、5属于使用功能;3、6属于管理功能。
在使用功能范围内,使用非常频繁的是1、4,然后是2、5。
先说简单的使用:
对于search应用,类似于在输入框里进行自动补全功能,不过druid.io支持的多个维度匹配和对多个value的匹配,个人觉得search的场景有很多替代方案。 多个维度search做过滤时,是没有记录关联性的。对于另一个topN来说,应用场景多数是排行榜这样的统计,例如:统计下载量排名前十的APP,topN是groupby功能的一个特例,在druid.io单独作为一个功能是对其进行了优化处理。关于排序的方式也有很多细节的区别,例如:数字排序、lexicographic、AlphaNumberic等。 AlphaNumberic方式功能很强,如下:
Traditional

Alphanum
z1.doc
z10.doc
z100.doc
z101.doc
z102.doc
z11.doc
z12.doc
z13.doc
z14.doc
z15.doc
z16.doc
z17.doc
z18.doc
z19.doc
z2.doc
z20.doc
z3.doc
z4.doc
z5.doc
z6.doc
z7.doc
z8.doc
z9.doc
        

z1.doc
z2.doc
z3.doc
z4.doc
z5.doc
z6.doc
z7.doc
z8.doc
z9.doc
z10.doc
z11.doc
z12.doc
z13.doc
z14.doc
z15.doc
z16.doc
z17.doc
z18.doc
z19.doc
z20.doc
z100.doc
z101.doc
z102.doc
目前的topN只支持单维度。
关于timeseries的方式,也可以认为是 groupby功能的一个特例,主要针对没有维度选择的场景,这样可以提高计算和响应时间。

重点说下groupby类型,因为它是其它查询类型延伸的基础,整个groupby类型,包含维度选择、统计指标选择、过滤条件、时间范围及时区、排序方式、结果集返回大小,数据集选择。

维度选择属性dimensions
对于维度,细节可以做到展示名称与存储名称分离;提供维度值转换后的统计方式,例如:我要按ip前三段来做统计
click_ip
click 
conversion
119.30.23.111
1
0
119.30.23.121
1
0
119.30.23.130
0
1
201.22.308.55
1
0
202.67.22.306
1
0
202.67.22.307
1
0
202.67.22.308
0
1
119.20.11.35
1
0
按前三段统计结果如下:
click_ip
click 
conversion
119.30.23
2 1
201.22.308
1
0
202.67.22
2
1
119.20.11
1
0
关于维度的值怎么转换,文档有详细的介绍js方式、正则方式等都有(在早期的版本中js的转换功能没有实现,在我们后面集成的0.6.121.1版本里已经实现了),目前新的版本(0.7.1.1)增加了对时间的处理。

过滤条件选择属性filters
注意:filters的处理是针对dimension的。
filters支持层级条件(通过and和or两个逻辑操作符进行),也是支持等于、js方式、正则方式进行判断。这里延伸出来一个问题就是对当前维度过滤,并且当前维度有转换逻辑,那么这两个逻辑在一起谁先执行呢?
如果需要对aggregations过滤使用Having语法功能。

统计指标属性aggregations和postaggregations。
我们先来了解下aggregations,引擎提供了最基础的方式:count、longsum、doublesum、min、max。
druid.io在针对aggregations的支持非常强悍,因为使用了js的引擎,所以能够非常灵活的应对不同的业务计算场景(包括复杂的计算逻辑),而且是配置化(个人使用感觉类似于fork/join和MR),并且也支持常量,dimension和metrics都可以参与其中。

postaggregations是在aggregations的基础之上在进行的处理,主要是对指标进行一个横向的二次计算处理,这两部分很重要,需要在实战中好好体会。
时间范围其实关联两方面,一个跟数据存储相关;一个跟数据查询相关;另一个特点就是支持时区转换查询特别适合业务范围属于全球化的公司。

结果集的默认返回是全量(这里涉及到对数据量的控制),当然为了快速响应是有一个limit的设置。
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.sqx</groupId> <artifactId>jiazheng</artifactId> <version>8.0.0</version> <packaging>jar</packaging> <description>jiazheng</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.6.11</version> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> <mybatisplus.version>3.2.0</mybatisplus.version> <mysql.version>8.0.17</mysql.version> <mssql.version>4.0</mssql.version> <oracle.version>11.2.0.3</oracle.version> <druid.version>1.1.13</druid.version> <quartz.version>2.3.0</quartz.version> <commons.lang.version>2.6</commons.lang.version> <commons.fileupload.version>1.2.2</commons.fileupload.version> <commons.io.version>2.5</commons.io.version> <commons.codec.version>1.10</commons.codec.version> <commons.configuration.version>1.10</commons.configuration.version> <shiro.version>1.10.1</shiro.version> <jwt.version>0.7.0</jwt.version> <kaptcha.version>0.0.9</kaptcha.version> <qiniu.version>7.2.23</qiniu.version> <aliyun.oss.version>3.4.0</aliyun.oss.version> <qcloud.cos.version>4.4</qcloud.cos.version> <swagger.version>2.7.0</swagger.version> <joda.time.version>2.9.9</joda.time.version> <gson.version>2.8.5</gson.version> <fastjson.version>1.2.83</fastjson.version> <hutool.version>4.1.1</hutool.version> <lombok.version>1.18.4</lombok.version> <!--wagon plugin 配置--> <!--<service-path>/work/sz</service-path> <pack-name>${project.artifactId}-${project.version}.jar</pack-name> <remote-addr>192.168.1.10:22</remote-addr> <remote-username>root</remote-username> <remote-passwd>123456</remote-passwd>--> </properties> <build> <finalName>${project.artifactId}</finalName> <extensions> <extension> <groupId>org.apache.maven.wagon</groupId> <artifactId>wagon-ssh</artifactId> <version>2.8</version> </extension> </extensions> </build> <repositories> <repository> <id>public</id> <name>aliyun nexus</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> <releases> <enabled>true</enabled> </releases> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>public</id> <name>aliyun nexus</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>false</enabled> </snapshots> </pluginRepository> </pluginRepositories> </project>除去多余功能,只剩websocket
最新发布
03-09
<think>嗯,用户给了一个Maven的POM文件,想要简化它,只保留WebSocket相关的依赖。首先,我需要仔细分析这个POM文件的结构和现有的依赖项。 首先看项目的基本信息:groupId是com.sqx,artifactId是jiazheng,版本8.0.0,打包成jar,使用Spring Boot父项目2.6.11,Java版本是1.8。这说明项目是基于Spring Boot的,可能需要用到Spring Boot的WebSocket支持。 接下来看properties部分,里面定义了很多依赖的版本号。比如mybatisplus、mysql、druid等等。用户的要求是去除多余功能,只保留WebSocket,所以需要识别哪些依赖是WebSocket必需的,哪些可以去掉。 Spring Boot本身已经提供了WebSocket的支持,所以可能需要查看Spring Boot Starter Web和Spring Boot Starter WebSocket。在原来的POM中,可能没有显式声明这些依赖,因为有时候父POM会管理版本,但用户可能没有包含它们。需要确认是否需要在dependencies中添加spring-boot-starter-websocket。 然后,现有的依赖项可能在dependencies部分,但用户提供的POM中没有列出dependencies,可能被省略了。不过根据用户的问题,可能需要假设现有的依赖中有很多不必要的,比如MyBatis Plus、MySQL、Swagger等,这些都需要被移除。 接下来,构建部分有wagon-ssh插件,可能用于部署,但用户只关心WebSocket,所以这个插件可以保留,除非用户特别指出要去除。不过用户可能希望简化构建配置,所以可能需要评估是否必要。 仓库和插件仓库配置是阿里云的镜像,这部分不影响功能,可以保留。 所以,步骤应该是: 1. 移除所有与WebSocket无关的依赖项,比如MyBatis、数据库驱动、Druid、Quartz、各种工具类库等。 2. 添加Spring Boot Starter Web和WebSocket的依赖,因为WebSocket通常需要Web基础。 3. 检查构建插件,确保没有不必要的插件,但原来的build部分似乎只有wagon-ssh扩展,可能用户需要保留,或者也可以移除,需要进一步确认。 4. 确保parent是Spring Boot Starter Parent,版本正确,这已经满足。 5. 清理properties中不再需要的版本属性,比如mybatisplus.version、mysql.version等,但保留可能相关的,比如Java版本和编码设置。 不过,原POM中的dependencies部分可能被用户省略了,因为在提供的XML中没有<dependencies>节点。这可能意味着用户实际项目中有其他依赖,但在提供的POM中没有显示。因此,用户可能需要手动移除其他依赖,或者在现有基础上调整。 因此,最终简化后的POM应该保留Spring Boot Starter Web和WebSocket,移除其他所有依赖,并清理properties中不必要的版本号。同时,可能不需要wagon-ssh插件,除非用户需要部署,但根据用户需求,可以建议移除。 另外,需要注意Spring Boot的版本是否与WebSocket Starter兼容,2.6.11是可行的,因为Spring Boot长期支持版本,且WebSocket在该版本中稳定。 总结:关键步骤是去除无关依赖,添加必要的WebSocket依赖,并简化配置。</think>以下是为简化到仅保留WebSocket功能而调整后的POM文件,主要修改步骤说明如下: ### 一、基础结构保留 ```xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.sqx</groupId> <artifactId>jiazheng</artifactId> <version>8.0.0</version> <packaging>jar</packaging> <description>jiazheng</description> ``` ### 二、保留Spring Boot父工程 ```xml <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.6.11</version> </parent> ``` ### 三、简化properties配置 ```xml <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> ``` ### 四、添加WebSocket依赖 ```xml <dependencies> <!-- Spring Web基础 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- WebSocket核心依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId> </dependency> </dependencies> ``` ### 五、清理构建配置 ```xml <build> <finalName>${project.artifactId}</finalName> </build> ``` ### 六、保留仓库配置(加速依赖下载) ```xml <repositories> <repository> <id>public</id> <name>aliyun nexus</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> <releases><enabled>true</enabled></releases> </repository> </repositories> </project> ``` ### 关键修改说明 1. **移除冗余依赖**:删除MyBatis、数据库驱动、Druid、Quartz、Swagger等无关组件 2. **保留核心配置**:只保留编码设置和Java版本,删除所有第三方库版本定义 3. **添加必要依赖**: - `spring-boot-starter-web`:WebSocket需要Web环境支持 - `spring-boot-starter-websocket`:提供WebSocket核心功能 4. **简化构建配置**:移除wagon-ssh插件相关配置(与核心功能无关) 实际使用时,还需配合`@EnableWebSocket`注解和WebSocket配置类实现具体功能。是否需要进一步优化取决于具体业务需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值