ApacheDurid(入门安装数据摄取查询集成SpringBoot)

一个现代化的云原生,流原生,分析型数据库Druid是为快速查询和快速摄入数据的工作流而设计的。Druid强在有强大的UI,运行时可操作查询,和高性能并发处理。Druid可以被视为一个满足多样化用户场景的数据仓库的开源替代品。

轻松与现有的数据管道集成Druid可以从消息总线流式获取数据(如Kafka,AmazonKinesis),或从数据湖批量加载文件(如HDFS,AmazonS3和其他同类数据源)。

比传统方案快100倍的性能

解锁新的工作流Druid为Clickstream,APM(应用性能管理系统),supplychain(供应链),网络遥测,数字营销和其他事件驱动形式的场景解锁了新的查询方式和工作流。Druid专为实时和历史数据的快速临时查询而构建。

可以部署在AWS/GCP/Azure,混合云,k8s和租用服务器上Druid可以部署在任Linux环境中,无论是内部环境还是云环境。部署Druid是非常easy的:通过添加或删减服务来扩容缩容。

ApacheDruid适用于对实时数据提取,高性能查询和高可用要求较高的场景。因此,Druid通常被作为一个具有丰富GUI的分析系统,或者作为一个需要快速聚合的高并发API的后台。Druid更适合面向事件数据。

比较常见的使用场景

Druid常常用来收集和分析网络流数据。Druid被用于管理以任意属性切分组合的流数据。Druid能够提取大量网络流记录,并且能够在查询时快速对数十个属性组合和排序,这有助于网络流分析。这些属性包括一些核心属性,如IP和端口号,也包括一些额外添加的强化属性,如地理位置,服务,应用,设备和ASN。Druid能够处理非固定模式,这意味着你可以添加任何你想要的属性。

Druid经常用于商业智能场景。公司部署Druid去加速查询和增强应用。和基于Hadoop的SQL引擎(如Presto或Hive)不同,Druid为高并发和亚秒级查询而设计,通过UI强化交互式数据查询。这使得Druid更适合做真实的可视化交互分析。

如果您的使用场景符合以下的几个特征,那么Druid是一个非常不错的选择:

如果您的使用场景符合以下特征,那么使用Druid可能是一个不好的选择:

ES:最大的特点是使用了倒排索引解决索引问题。根据研究,ES在数据获取和聚集用的资源比在Druid高。框架选型:

Druid同时支持流式和批量数据摄入。Druid通常通过像Kafka这样的消息总线(加载流式数据)或通过像HDFS这样的分布式文件系统(加载批量数据)来连接原始数据源。Druid通过Indexing处理将原始数据以segment的方式存储在数据节点,segment是一种查询优化的数据结构。

数据副本Druid根据配置的副本数创建多个数据副本,所以单机失效不会影响Druid的查询。独立服务Druid清晰的命名每一个主服务,每一个服务都可以根据使用情况做相应的调整。服务可以独立失败而不影响其他服务的正常运行。例如,如果数据摄入服务失效了,将没有新的数据被加载进系统,但是已经存在的数据依然可以被查询。自动数据备份Druid自动备份所有已经indexed的数据到一个文件系统,它可以是分布式文件系统,如HDFS。你可以丢失所有Druid集群的数据,并快速从备份数据中重新加载。滚动更新通过滚动更新,你可以在不停机的情况下更新Druid集群,这样对用户就是无感知的。所有Druid版本都是向后兼容。

获取Druid安装包有以下几种方式

1CPU,4GB内存启动命令:bin/start-nano-quickstart配置目录:conf/druid/single-server/nano-quickstart

4CPU,16GB内存启动命令:bin/start-micro-quickstart配置目录:conf/druid/single-server/micro-quickstart

8CPU,64GB内存(~i3.2xlarge)启动命令:bin/start-small配置目录:conf/druid/single-server/small

16CPU,128GB内存(~i3.4xlarge)启动命令:bin/start-medium配置目录:conf/druid/single-server/medium

32CPU,256GB内存(~i3.8xlarge)启动命令:bin/start-large配置目录:conf/druid/single-server/large

64CPU,512GB内存(~i3.16xlarge)启动命令:bin/start-xlarge配置目录:conf/druid/single-server/xlarge

Java8(8u92+)Linux,MacOSX,或者其他的类UnixOS(Windows是不支持的)安装Docker环境安装Docker-compose环境

Druid包括几个单服务配置示例,以及使用这些配置启动Druid进程的脚本。如果您在笔记本电脑等小型机器上运行以进行快速评估,那么micro-quickstart配置是一个不错的选择,适用于4CPU/16GBRAM环境。如果您计划在教程之外使用单机部署进行进一步评估,我们建议使用比micro-quickstart更大的配置。虽然为大型单台计算机提供了示例配置,但在更高规模下,我们建议在集群部署中运行Druid,以实现容错和减少资源争用。

安装推荐Imply方式,Imply方式出了提供druid组件,还有图形化、报表等功能

因为启动druid需要用到perl环境,需要安装下

选择与自己系统相匹配的版本,我的是Centos764位的,所以如果是我的话我会选择此版本,要记住的你们下载的话选择的是以tar.gz结尾的。

上传文件,解压目录

mkdir/usr/local/javatar-zxvfjdk-8u301-linux-x64.tar.gz配置环境变量配置环境变量,修改profile文件并加入如下内容

source/etc/profile检查环境

#创建imply安装目录mkdir/usr/local/imply#解压implytar-zxvfimply-2021.05-1.tar.gz环境准备进入imply-2021.05-1目录后

#进入imply目录cdimply-2021.05-1快速启动使用本地存储、默认元数据存储derby,自带zookeeper启动,来体验下druid

#创建日志目录mkdirlogs#使用命令启动nohupbin/supervise-cconf/supervise/quickstart.conf>logs/quickstart.log2>&1&查看日志通过quickstart.log来查看impl启动日志

访问Imply可以通过访问9095端口来访问imply的管理页面

我们导入演示案例种的演示文件

因为我们是通过imply安装的,在Basedirectory输入绝对路径/usr/local/imply/imply-2021.05-1/dist/druid/quickstart/tutorial,Filefilter输入wikiticker-2015-09-12-sampled.json.gz,并选择apply应用配置,我们数据已经加载进来了

在这里可以新增虚拟列,将一个列的数据转换成另一个虚拟列,这里我们没有设置,直接跳过

这里我们使用docker-compose的方式启动kafka

#运行kafka生产者发送消息./kafka-console-producer.sh--broker-list192.168.64.173:9092--topictest发送的数据如下

编写代码编写代码发送消息到kafka中

关闭集群

准备大量数据提供查询,我们插入1万条随机打车数据

#创建查询目录mkdirquery#编辑查询的JSONviquery/filter1.json{"queryType":"timeseries","dataSource":"taxi_message","granularity":"month","aggregations":[{"type":"count","name":"taxiNum"}],"filter":{"type":"selector","dimension":"status","value":1},"intervals":["2021-06-07/2022-06-07"]}参数解释

执行查询命令在命名行中执行下面的命令会将查询json发送到对应的broker中进行查询--data-binary指定的查询json的路径

druid查询采用的是HTTPRESTFUL方式,REST接口负责接收客户端的查询请求,客户端只需要将查询条件封装成JSON格式,通过HTTP方式将JSON查询条件发送到broker节点,查询成功会返回JSON格式的结果数据。了解一下druid提供的查询类型

viquery/topN.json{"queryType":"topN","dataSource":"taxi_message","dimension":"local","threshold":2,"metric":"age","granularity":"Quarter","aggregations":[{"type":"longMin","name":"age","fieldName":"age"}],"filter":{"type":"selector","dimension":"sex","value":"也"},"intervals":["2021-06-07/2022-06-07"]}执行查询

在实际应用中经常需要进行分组查询,等同于sql语句中的Groupby查询,如果对单个维度和指标进行分组聚合计算,推荐使用topN查询,能够获得更高的查询性能,分组查询适合多维度,多指标聚合查询

viquery/groupBy.json{"queryType":"groupBy","dataSource":"taxi_message","granularity":"Quarter","dimensions":["sex"],"aggregations":[{"type":"count","name":"taxiNum"}],"filter":{"type":"bound","dimension":"age","lower":"21","upper":"31","alphaNumeric":true},"intervals":["2021-06-07/2022-06-07"]}执行查询

在介绍具体的查询之前,我们先来了解一下各种查询都会用到的基本组件,如Filter,Aggregator,Post-Aggregator,Query,Interval等,每种组件都包含很多的细节

Filter就是过滤器,在查询语句中就是一个JSON对象,用来对维度进行筛选和过滤,表示维度满足Filter的行是我们需要的数据,类似sql中的where字句。Filter包含的类型如下:选择过滤器SelectorFilter的功能类似于SQL中的wherekey=value,它的json示例如下

"Filter":{"type":"selector","dimension":dimension_name,"value":target_value}使用案例

viquery/filter1.json{"queryType":"timeseries","dataSource":"taxi_message","granularity":"month","aggregations":[{"type":"count","name":"taxiNum"}],"filter":{"type":"selector","dimension":"status","value":1},"intervals":["2021-06-07/2022-06-07"]}正则过滤器RegexFilter允许用户使用正则表达式进行维度的过滤筛选,任何java支持的标准正则表达式druid都支持,它的JSON格式如下:

"filter":{"type":"regex","dimension":dimension_name,"pattern":regex}使用案例,我们搜索姓名包含数字的的用户进行聚合统计

viquery/filter2.json{"queryType":"timeseries","dataSource":"taxi_message","granularity":"month","aggregations":[{"type":"count","name":"taxiNum"}],"filter":{"type":"regex","dimension":"username","pattern":"[0-9]{1,}"},"intervals":["2021-06-07/2022-06-07"]}执行查询

"filter":{"type":"and","fields":[filter1,filter2]}"filter":{"type":"or","fields":[filter1,filter2]}"filter":{"type":"not","fields":[filter]}使用案例,我们查询每一个月,进行打车并且是女性的数量

viquery/filter3.json{"queryType":"timeseries","dataSource":"taxi_message","granularity":"month","aggregations":[{"type":"count","name":"taxiNum"}],"filter":{"type":"and","fields":[{"type":"selector","dimension":"status","value":1},{"type":"selector","dimension":"sex","value":"也"}]},"intervals":["2021-06-07/2022-06-07"]}进行数据查询

viquery/filter4.json{"queryType":"timeseries","dataSource":"taxi_message","granularity":"month","aggregations":[{"type":"count","name":"taxiNum"}],"filter":{"type":"in","dimension":"local","values":["四川省","江西省","福建省"]},"intervals":["2021-06-07/2022-06-07"]}进行数据查询

{"type":"bound","dimension":"age","lower":"21",#默认包含等于"upper":"31",#默认包含等于"alphaNumeric":true#数字比较时指定alphaNumeric为true}使用案例,我们查询每一个月,年龄在21-31之间打车人的数量

viquery/filter5.json{"queryType":"timeseries","dataSource":"taxi_message","granularity":"month","aggregations":[{"type":"count","name":"taxiNum"}],"filter":{"type":"bound","dimension":"age","lower":"21","upper":"31","alphaNumeric":true},"intervals":["2021-06-07/2022-06-07"]}进行数据查询

编写测试,我们这里按照季度聚合,并且我们过滤年龄是21-31的数据,并且按照地域以及性别进行分组

viquery/filter6.json{"queryType":"groupBy","dataSource":"taxi_message","granularity":"Quarter","dimensions":["local","sex"],"aggregations":[{"type":"count","name":"taxiNum"}],"filter":{"type":"bound","dimension":"age","lower":"21","upper":"31","alphaNumeric":true},"intervals":["2021-06-07/2022-06-07"]}进行查询

viquery/filter7.json{"queryType":"groupBy","dataSource":"taxi_message","granularity":{"type":"duration","duration":7200000},"dimensions":["local","sex"],"aggregations":[{"type":"count","name":"taxiNum"}],"filter":{"type":"bound","dimension":"age","lower":"21","upper":"31","alphaNumeric":true},"intervals":["2021-06-07/2021-06-10"]}数据查询

viquery/filter8.json{"queryType":"groupBy","dataSource":"taxi_message","granularity":{"type":"period","period":"P1D"},"dimensions":["sex"],"aggregations":[{"type":"count","name":"taxiNum"}],"filter":{"type":"bound","dimension":"age","lower":"21","upper":"31","alphaNumeric":true},"intervals":["2021-06-07/2021-06-10"]}数据查询

Aggregator是聚合器,聚合器可以在数据摄入阶段和查询阶段使用,在数据摄入阶段使用聚合器能够在数据被查询之前按照维度进行聚合计算,提高查询阶段聚合计算性能,在查询过程中,使用聚合器能够实现各种不同指标的组合计算。

公共属性聚合器的公共属性介绍

计数聚合计数聚合器,等同于sql语法中的count函数,用于计算druidroll-up合并之后的数据条数,并不是摄入的原始数据条数,在定义数据模式指标规则中必须添加一个count类型的计数指标count;比如想查询Roll-up后有多少条数据,查询的JSON格式如下

viquery/aggregator1.json{"queryType":"timeseries","dataSource":"taxi_message","granularity":"Quarter","aggregations":[{"type":"count","name":"count"}],"filter":{"type":"bound","dimension":"age","lower":"21","upper":"31","alphaNumeric":true},"intervals":["2021-06-07/2022-06-07"]}求合聚合求和聚合器,等同于sql语法中的sum函数,用户指标求和计算,druid提供两种类型的聚合器,分别是long类型和double类型的聚合器;第一类就是longSumAggregator,负责整数类型的计算,JSON格式如下:{“type”:“longSum”,“name”:out_name,“fieldName”:“metric_name”}第二类是doubleSumAggregator,负责浮点数计算,JSON格式如下:{“type”:“doubleSum”,“name”:out_name,“fieldName”:“metric_name”}示例

viquery/aggregator2.json{"queryType":"timeseries","dataSource":"taxi_message","granularity":"Quarter","aggregations":[{"type":"longSum","name":"ageSum","fieldName":"age"}],"filter":{"type":"bound","dimension":"age","lower":"21","upper":"31","alphaNumeric":true},"intervals":["2021-06-07/2022-06-07"]}5.6DruidSQLDruidSQL是一个内置的SQL层,是Druid基于JSON的本地查询语言的替代品,它由基于ApacheCalcite的解析器和规划器提供支持DruidSQL将SQL转换为查询Broker(查询的第一个进程)上的原生Druid查询,然后作为原生Druid查询传递给数据进程。除了在Broker上转换SQL)的(轻微)开销之外,与原生查询相比,没有额外的性能损失。

可以在druid的控制台进行查询

我们在这里实现SpringBoot+Mybatis实现SQL查询ApacheDruid数据

@Data@ToStringpublicclassTaxiMessage{privateString__time;privateIntegerage;privateIntegercreateDate;privateStringlocal;privateStringsex;privateIntegerstatus;privateStringstatusText;privateStringusername;}编写mapper所有字段名、表名必须使用如下方式标识“表名”

@MapperpublicinterfaceTaxiMessageMapper{@Select("SELECT*FROM\"taxi_message\"whereusername=#{username}")publicTaxiMessagefindByUserName(Stringusername);}编写Service

@ServicepublicclassTaxiMessageService{@AutowiredprivateTaxiMessageMappertaxiMessageMapper;publicTaxiMessagefindByUserName(Stringusername){returntaxiMessageMapper.findByUserName(username);}}编写启动类

@SpringBootApplication@MapperScan(basePackages="com.druid.mapper")publicclassApplication{publicstaticvoidmain(String[]args){SpringApplication.run(Application.class);}}

THE END
1.SpringBoot图书管理系统运行教程基于springboot的图书管理SpringBoot图书管理系统运行教程 文章目录 1、前期必备 1.1、所需软件版本说明 1.2、下载源码 1.3、下载开发工具 1.4、下载JDK并配置环境变量 1.5、安装数据库和数据库管理工具 1.6、安装配置Maven 2、将SQL文件导入到数据库 2.1、新建MySQL连接 2.2、新建数据库并导入SQLhttps://blog.csdn.net/qq_40625778/article/details/130118937
2.图书管理系统源码(三层架构)图书管理系统源程序大学为我们提供了自由的学习环境,使我们有更多的时间到图书馆借阅书籍,让我们可以随时掌握各方面的知识,不断提高自我、充实自我,但由于图书馆藏书成千上万,我们很难一本一本的去查找自己感兴趣的书籍,因此我们会经常用到学校为我们提供的图书管理系统,用时间长了便对此产生了兴趣,正好本次课程设计为我们提供了良好的https://blog.51cto.com/u_16213671/8972926
3.图书馆管理系统er图图书管理系统需要满足来自三方面的需求,这三个方面分别是图书借阅者、图书馆工作人员和图书馆管理人员。图书借阅者的需求是查询图书馆所存的图书、个人借阅情况及个人信息的修改;图书馆工作人员对图书借阅者的借阅及还书要求进行操作,同时形成借书或还书报表给借阅者查看确认;图书馆管理人员的功能最为复杂,包括对工作人https://www.zboao.com/cgal/9078.html
4.图书馆管理系统因此本人结合开入式图书馆的要求,对MS SQL Server2000数据库管理系统、SQL语言原理、Delphi应用程序设计,Delphi数据库技术进行了较深入的学习和应用,主要完成对图书管理系统的需求分析、功能模块划分、数据库模式分析,并由此设计了数据库结构和应用程序。系统运行结果证明,本文所设计的图书管理系统可以满足借阅者、图书馆https://www.fwsir.com/ligong/html/ligong_20070130182525_25748.html
5.基于springboot+vue的图书馆管理系统源码下载:博主私 摘要 随着社会的发展,计算机的优势和普及使得阿博图书馆管理系统的开发成为必需。阿博图书馆管理系统主要是借助计算机,通过对图书借阅等信息进行管理。减少管理员的工作,同时也方便广大用户对所需图书借阅信息的及时查询以及管理。 阿博图书馆管理系统的开发过程中,采用B / S架构,主要使用Java技术进行开发https://www.jianshu.com/p/66d6ddb580b3
6.软件项目计划书SQL Server 20xx:数据库管理软件 DBMS:数据库管理系统 Windows XP:运行环境 VB.net 20xx:软件开发语言 visual studio 20xx 软件开发环境 2 项目概述 2.1 系统与项目的定义 本系统是建立在C/S系统架构下基于SQL Server数据库,采用VB.Net技术分析、设计、开发用于酒店信息化管理的。该系统基本满足了酒店管理方面的需https://www.ruiwen.com/gongwen/jihuashu/1074599.html
7.纯java写的library的图书管理系统java图书管理系统mysql数据库 自己写的图书管理系统,代码结构非常清晰,看过之后自己把表建下就行了,可以完美运行,适合新手朋友们慢慢学习! 上传者:qq_30354581时间:2017-10-14 基于Java web的图书管理系统源码(含数据库脚本).zip 源码参考,亲测有效,欢迎下载 https://www.iteye.com/resource/qq_24091613-9679552/
8.学生信息管理系统的用例图和图书管理系统系统分析及用例图[通俗易当借阅者借阅的图书数量超过限制时,不运行借阅者再进行借阅。当借阅者借阅的图书超过一定的期限时,需要对其进行处罚。借阅图书时需要图书证作为凭据,归还时不需要。 系统管理员负责系统的管理维护工作,维护工作包括图书的添加、删除和修改,书目的添加和删除,借阅者的添加、删除和修改,并且系统管理员能够查询借阅者、图书https://cloud.tencent.com/developer/article/2091279
9.基于springboot的图书管理系统设计与实现毕业论文+项目源码及随着网络技术的发展、计算机应用水平的提高的扩大,原来系统的时效性、数据的正确性、操作的方便性上都存在不足,已影响到系统的正常使用。经过考察比较,决定利用自己的力量对智能化图书查询系统重新设计,使系统能利用软件开发技术的成果,方便图书的管理。 智能化图书查询系统是典型的信息管理系统,本文系统地介绍了智能化图http://www.biyezuopin.vip/onews.asp?id=14704
10.C++使用链表实现图书管理系统C语言1.录入书籍:将书籍录入图书管理系统 2.浏览书籍:查看图书管理系统里的所有书籍 3.借阅书籍:书籍存在可以借阅,库存-1,书的库存不足则无法借阅 4.归还书籍:库存+1,如果该书不是图书馆里的书籍,则无法录入 5.删除书籍:以书名为基础从图书管理系统中删除该书籍 6.查找书籍:按书名查找书籍,显示书籍的基本信息 7.https://www.jb51.net/article/240607.htm
11.DNS与BIND(第5版)图书目录: 详情 本书第5版内容覆盖了BIND 9.3.2(BIND 9系列的最新发布版本),以及BIND 8.4.7。BIND 9.3.2包含了安全方面的进一步改进,并支持Ipv6以及重要的新特性,例如国际化域名、ENUM(电话列表)以及SPF(发送者安全框架)。无论你是DNS系统的日常管理员,或者是想了解Internet工作原理的用户,本书都是必备的参考https://labs.epubit.com/bookDetails?id=N16580
12.Git--distributed-is-the-new-centralized Git is afree and open sourcedistributed version control system designed to handle everything from small to very large projects with speed and efficiency. Git iseasy to learnand has atiny footprint with lightning fast performance. It outclasses SCM tools like https://git-scm.com/
13.ProteusPro8.17破解版下载ProteusPro8.17SP25、安装完成,退出向导,管理员身份运行patch,它可以通过注册表找到文件本身的路径 软件功能 一、Proteus VSM Proteus虚拟系统建模(VSM)将混合模式SPICE仿真与世界领先的快速微控制器仿真相结合。它可以在软件中实现硬件和固件设计的快速原型设计! 在订购物理原型之前,设计,测试和调试嵌入式项目。 嵌入式系统工作流程的敏http://www.sd173.com/soft/7744.html