Druid提供了两类截止作为Cache和查询组件

多维聚合实战:从SQL GROUP BY到OLAP立方体的工程落地 多维聚合是BI与数据分析的核心能力,本质是在时间、地理、用户等正交维度构成的高维空间中实现精准切片、钻取与一致性计算。其技术原理根植于OLAP模型——通过预定义维度层次(Hierarchy)、原子化度量(Measure)和上下文感知的成员(Member),支撑动态Roll-up/Slice & Dice操作。相比传统SQL GROUP BY的扁平化降维,多维聚合提供可逆映射与跨层级数据一致性保障,显著提升T+1报表、实时大屏、自助分析等场景的响应效率与业务可信度。本文聚焦生产级落地,涵盖星型模型建模、Kyl 阅读详情

本身包含了五种节点 : Realtime、Historical、Coordinator、Broker、Indexer

2.1.1 历史节点(Historical Node) 

历史节点主要负责加载已经生成好的数据文件以及提供数据查询。

历史节点启动时,会先检查自身的本地缓存中已存在的Segment数据文件,然后从DeepStorage中下载数据自己但不在本地的Segment数据文件,后加载到内存后再提供查询。

2.1.2 实时节点(Realtime Node)

主要负责及时摄入实时数据,以及生成Segment数据文件;Realtime节点只响应broker节点的查询请求,返回查询结果到broker节点。旧数据会按指定周期将数据build成segments移到Historical节点。一般会使用外部依赖kafka来提高实时摄取数据的可用性。如果不需要实时摄取数据到集群中,可以舍弃Real-time nodes,只定时地批量从deep storage摄取数据即可;

2.1.2.1 Segment数据文件的制造与传播

  1. 实时节点生成Segment数据文件,并上传到DeepStorage中。
  2. Segment数据文件的相关元数据信息保存到MetaStore中(如mysql,derby等)。
  3. 协调节点会从MetaSotre中获取到Segment数据文件的相关元信息后,将按配置的规则分配到符合条件的历史节点中。
  4. 历史节点收到协调节点的通知后,会从DeepStorage中拉取该Segment数据文件,并通过zookeeper向集群声明可以提供查询了。
  5. 实时节点会丢弃该Segment数据文件,并通过zookeeper向集群声明不在提供该Sgment的查询服务。


2.13 协调节点(Coordinator Node)

协调节点主要负责历史节点的数据负载均衡,以及通过规则管理数据源的生命周期。

监控historical节点组,可以认为是Druid中的master,其通过Zookeeper管理Historical和Real-time nodes,且通过Mysql中的metadata管理Segments,以确保数据可用、可复制。它们通过从MySQL读取数据段的元数据信息,来决定哪些数据段应该在集群中被加载,使用Zookeeper来确定哪个historical节点存在,并且创建Zookeeper条目告诉historical节点加载和删除新数据段。

2.1.4 查询节点(Broker Node) 

对外提供数据查询服务,并同时从实施节点、历史节点查询数据,合并后返给调用方   

2.1.4.1 查询中枢点

Druid集群直接对外提供查询的节点只有查询节点,而查询节点会将从实时节点与历史节点查询到的数据进行合并并返回。

 

2.1.4.2 查询节点中的缓存应用

当请求多次相似查询时,可直接利用之前的缓存中的数据作为部分或全部进行返回,而不用去访问库中的数据,可以大大提高查询效率,如下图;

Druid提供了两类截止作为Cache:

  • 外部Cache,如memcached
  • 本地Cache,比如查询节点或历史节点的内存作为Cache

2.1.4.3 查询节点高可用

一般Druid集群只需要一个查询节点,但了防止出现单点down机等问题,可增加一个或多个查询节点到集群中,多个查询节点可使用Nginx来完成负载,并达到高可用的效果,如下图;


2.1.5 Indexer

 索引服务用于数据导入,batch data和streaming data都可以通过给indexing services发请求来导入数据。Indexing service可以通过api的方式灵活的操作Segment文件,如合并,删除Segment等

 

 

3个外部依赖 :Mysql、Deep storage、Zookeeper

1) Mysql:存储关于Druid中的metadata,规则数据,配置数据等,主要包含以下几张表:”druid_config”(通常是空的), “druid_rules”(协作节点使用的一些规则信息,比如哪个segment从哪个node去load)和“druid_segments”(存储 每个segment的metadata信息);

2 )Deep storage:存储segments,Druid目前已经支持本地磁盘,NFS挂载磁盘,HDFS,S3等。Deep Storage的数据有2个来源,一个是批数据摄入, 另一个来自Realtime节点;

3) ZooKeeper:被Druid用于管理当前cluster的状态,为集群服务发现和维持当前的数据拓扑而服务;例如:被Druid用于管理当前cluster的状态,比如记录哪些segments从实时节点移到了历史节点;

 

 

3.数据导入

3.1 基于DataSource与Segment的数据结构

 

Druid中的数据表(称为数据源)是一个时间序列事件数据的集合,并分割到一组segment中,而每一个segment通常是0.5-1千万行。在形式上,我们定义一个segment为跨越一段时间的数据行的集合。Segment是Druid里面的基本存储单元,复制和分布都是在segment基础之上进行的。

Druid总是需要一个时间戳的列来作为简化数据分布策略、数据保持策略、与第一级查询剪支(first-level query pruning)的方法。Druid分隔它的数据源到明确定义的时间间隔中,通常是一个小时或者一天,或者进一步的根据其他列的值来进行分隔,以达到期望的segment大小。segment分隔的时间粒度是一个数据大小和时间范围的函数。一个超过一年的数据集最好按天分隔,而一个超过一天的数据集则最好按小时分隔。

Segment是由一个数据源标识符、数据的时间范围、和一个新segment创建时自增的版本字符串来组合起来作为唯一标识符。版本字符串表明了segment的新旧程度,高版本号的segment的数据比低版本号的segment的数据要新。这些segment的元数据用于系统的并发控制,读操作总是读取特定时间范围内有最新版本标识符的那些segment。

Druid的segment存储在一个面向列的存储中。由于Druid是适用于聚合计算事件数据流(所有的数据进入到Druid中都必须有一个时间戳),使用列式来存储聚合信息比使用行存储更好这个是 有据可查 的。列式存储可以有更好的CPU利用率,只需加载和扫描那些它真正需要的数据。而基于行的存储,在一个聚合计算中相关行中所有列都必须被扫描,这些附加的扫描时间会引起性能恶化。

 

 

实时节点数据块生成过程

3.1.1 DataSource结构

与传统关系型数据库相比,Druid的DataSource可以算是table,DataSource的结构包括以下几个方面

  • 时间列:表明每行数据的时间值,默认只用UTC时间格式且精确到毫秒。这个列是数据聚合与范围查询的重要维度
  • 维度列:用来表示数据行的各个类别信息
  • 指标列:用于聚合和计算的列

 

3.1.2 Segment结构

DataSource是一个逻辑概念,Segment确实数据的实际物理存储格式,segment 的组织方式是通过时间戳跟粒度来定义的.Druid通granularitySpec过Segment实现了对数据的横纵切割操作,从数据按时间分布的角度来看,通过参数segmentGranularity设置,Druid将不同时间范围内的数据存储在不同的Segment数据块中,这边是所谓的数据横向切割。带来的优点:按时间范围查询数据时,仅需访问对应时间段内的这些Segment数据块,而不需要进项全表数据查询。下图是Segment按时间范围存储的结构;同时在Segment中也面向列进行数据压缩存储,这就是数据纵向切割;(Segment中使用Bitmap等技术对数据的访问进行了优化,没有详细了解bitmap)

 

 

3.2 数据格式定义

{
  "dataSchema" : {...},       #JSON对象,指明数据源格式、数据解析、维度等信息
  "ioConfig" : {...},         #JSON对象,指明数据如何在Druid中存储
  "tuningConfig" : {...}      #JSON对象,指明存储优化配置(非必填)
}

3.2.1 DataSchema详解

{
 "datasource":"...",            #string类型,数据源名称
 "parser": {...},               #JSON对象,包含了如何即系数据的相关内容
 "metricsSpec": [...],          #list 包含了所有的指标信息
 "granularitySpec": {...}       #JSON对象,指明数据的存储和查询力度
}

 

"granularitySpec" : {
  "type" : "uniform",                     	 //type : 用来指定粒度的类型使用 uniform, arbitrary(尝试创建大小相等的段).
  "segmentGranularity" : "day",           	 //segmentGranularity : 用来确定每个segment包含的时间戳范围
  "queryGranularity" : "none",               //控制注入数据的粒度。 最小的queryGranularity 是 millisecond(毫秒级)
  "rollup" : false,
  "intervals" : ["2018-01-09/2018-01-13"]    //intervals : 用来确定总的要获取的文件时间戳的范围
}

 

如上的配置说明了接收【09-13】号这5天的数据,然后按天来划分segment,所以总共只有5个segment。

3.3 流式数据源 (实时导入)

 实时数据首先会被直接加载到实时节点内存中的堆结构换从去,当条件满足时,缓存区里的数据会被写到硬盘上行程一个数据块(Segment),同事实时节点又会立即将新生成的数据块加载到内存中的非堆区,因此无论是堆缓存区还是非堆区里的数据,都能被查询节点(Broker Node)查询;

       同时实时节点会周期性的将磁盘上同一时间段内生成的数据块合并成一个大的Segment,这个过程在实时节点中的操作叫做Segment Merge,合并后的大Segment会被实时节点上传到数据文件存储(DeepStorage)中,上传到DeepStorage后,协调节点(Coordination Node)会指定一个历史节点(Historical Node)去文件存储库将刚刚上传的Segment下载到本地磁盘,该历史节点加载成功后,会通过协调节点(Coordination Node)在集群中声明该Segment可以提供查询了,当实时节点收到这条声明后会立即向集群声明实时节点不再提供该Segment的查询,而对于全局数据来说,查询节点(Broker Node)会同时从实时节点与历史节点分别查询,对结果整合后返回用户。

                                                                                                                                       

 

3.4 静态数据源(离线数据导入)

首先通过Indexing Service提交Indexing作业,将输入数据转换为Segments文件。然后需要一个计算单元来处理每个Segment的数据分析,这个计算单元就是Druid中的 历史节点(Historical Node),

Historical Node是Druid最主要的计算节点,用于处理对Segments的查询。在能够服务Segment之前, Historical Node需要首先将Segment从HDFS、S3、本地文件等下载到本地磁盘,然后将Segment数据文件mmap到进程的地址空间。

Historical Node采用了Shared-Nothing架构,状态信息记录在Zookeeper中,可以很容易地进行伸缩。 Historical Node在Zookeeper中宣布自己和所服务的Segments,也通过Zookeeper接收加载/丢弃Segment的命令。

最后,由于Segment的不可变性,可以通过复制Segment到多个 Historical Node来实现容错和负载均衡,这也体现了druid的扩展性和高可用。

4. 查询

4.1 查询组件

 

  • Filter(过滤器)

    类型说明举例
    Select Filter类似SQL中的 where key = valus  "filter":{"type": "selector" , "dimension" : "city_name" , "value": "北京" } 
    Regex Filte正则表达式筛选维度(任何java支持的正则,druid都支持)"filter":{"type": "regex" , "dimension" : "city_code" , "pattern": "^[a-z]+(?<!bc)$" } 
    Logical Expression FilterLogical Expression包含 and 、 or、 not 三种过滤器,每种都支持嵌套,可构造出丰富的查询。

     "filter":{"type": "and" , "fields":[<filter>,<filter>... ] } 

    "filter":{"type": "or" , "fields":[<filter>,<filter>... ]  } 

     "filter":{"type": "not" , "field":<filter> } 

    Search Filter通过字符串匹配过滤维度 
    In Filter 类似SQL中的IN"filter":{"type": "in" , "dimension" : "source" , "values":  ["ios","pc","android"] } 
    Bound Filter比较过滤器,包含 ">、<、="三种算子【Bound Filter还支持字符串比较,基于字典排序,默认是字符串比较 】

    21 <= age <= 31     

    "filter":{"type": "bound" , "dimension":"age" ,"lower":"21","upper": "31", "alphaNumeric":true }  //因默认是字符串比较,数字比较时需指定 alphaNumeric为ture

     21 < age < 31          

    "filter":{"type": "bound"  , "dimension":"age" ,"lower":"21", "lowerStrict":"true", "upper": "31", "upperStrict":"true" ,"alphaNumeric":true } 

    // boubd 默认符号 为"<="或">=" ,使用lowerStrict、upperStrict 标识大于、小于,不包含等于

    JavaScript FilterDruid支持自己写javascript(未深入了解) 

     

  • Aggregator (聚合器)

    可在数据摄入阶段就指定,也可以在查询时指定,聚合器类型如下:

    类型说明举例
    Count计算Druid数据行数

    1.查询聚合后的数据量{"type": "count", "name": "总行数" }

    2.查询摄入的原始数据条数{"type": "longSum", "name": "总数" ,"fieldName":"count"}

    Sum

    计算加和,按数据类型可分两类

    1.64位有符号整型;

    2.64位浮点型

    {"type": "longSum", "name": "整型总数" , "fieldName": "metric_name_1"}

    {"type": "doubleSum", "name": "浮点型总数" , "fieldName" : "metric_name_2"}

    Min/Max

    计算最大最小值,按数据类型可分四类

    1.doubleMin Aggregator 2.doubleMax Aggregator

    3.longMin Aggregator 4.longMax Aggregator

    {"type": "longMax", "name": "整型最大值" , "fieldName": "metric_name_1"}

    {"type": "longMin", "name": "整型最小值" , "fieldName": "metric_name_1"}

    {"type": "doubleMin", "name": "浮点型最小值" , "fieldName": "metric_name_2"}

    {"type": "doubleMax", "name": "浮点型最大值" , "fieldName": "metric_name_2"}

    Cardinality计算指定维度的基数 
    HyperUnique计算指定维度的基数,性能比Cardinality好很多 
    Filtered对聚合指定filter规则(只对满足filter的维度进行聚合,效率更高){"type":"filtered" ,"filter":{"type":"selector","dimentsion":"xxxx","value":"value"}, "aggregator":<aggregation>}
    JavaScriptDruid支持自己写javascript(未深入了解) 

     

  • Post-Aggregator

    可对Aggregator进行二次加工并输出,如果使用postaggregator,必须包含aggregator为前提。

    类型说明举例
    Arithmetic支持对Aggregator的结果和其他Arithmetic的结果进行“加、减、乘、除、余数”计算"postAggretation":{"type":"arithmetic","name":"计算结果","fn":计算方法,"fields":[<post_aggregator>,<post_aggregator>,...],"ordering":""} //ordering 排序
    Field Accessor返回指定的Aggregator的值 
    Constant可以将Aggregator的结果转换为百分比{"type":"constant","name":"增长率","value":92}
       
       

     

  • Search Query
     

    类型说明举例
    contains筛选维度值相匹配的,可使用case_sensitive设置是否区分大小写{"type": "contains", "case_sensitive": true, "value":"北京"}
    insensitive_contains指定的维度是否包含给定的字符串,不区分大小写,等价于contains中case_sensitive设置为false{"type": "insensitive_contains", "value":"北京"}
    fragment指定维度任意部分是否包含{"type": "fragment", "case_sensitive": true, "values": ["北京","成都,"上海"]}

     

  • Interval(查询指定的时间区间)

Interval中的时间格式是ISO-8601格式,中国所在时区为东8区,查询时需要在时间中加入“+8:00”,如:"intervals":["2018-01-29T00:00:00+08:00/2018-01-30T00:00:00+08:00"]  
Interval的区间为前闭后开:start <= time  < end ,查询结果的准确性需要注意.
  • Context(查询时的辅助参数配置等,入超时时间设置、是否使用查询缓存等,都是非必填项,如果不指定,则用默认参数)

    字段名默认值des说明cription
    timeout0 查询超时时间,单位毫秒.
    priority0查询优先级
    queryId自动生成生成唯一查询的id标示
    useCachetrue此次查询是否利用查询缓存,如手动指定,则会覆盖查询节点或历史节点配置的值
    populateCachetrue此次查询的结果是否缓存,如果手动指定,则会覆盖查询节点或历史节点配置的值
    bySegmentfalse为true是,将在返回结果中显示关联的Segment
    finalizetrue是否返回Aggregator的最终结果
    chunkPeriod0 (off)指定是否将茶时间跨度的查询切分为多个短时间跨度进行查询,需要配置druid.processiong.numThreads的值
    minTopNThreshold1000配置每个Segment返回的TopN的数量用于合并,从而得到最终的topN
    maxResults500000结果groupBy查询可以处理的最大数目。 在查询节点和历史节点配置项中的 druid.query.groupBy.maxResults 可以更改所使用的默认值。 查询时该字段的值只能低于配置项的值
    maxIntermediateRows50000配置GroupBy查询处理单个分段时的最大行数,默认值在查询节点和历史节点的配置druid.query.groupBy.maxIntermediateRows中指定,查询时该字段的值只能低于配置项的值
    groupByIsSingleThreadedfalse费否使用单线程执行GroupBy,默认值在历史节点配置项 druid.query.groupBy.singleThreaded中指定

     

 

4.2 查询实例

4.2.1 元数据信息查询

 

  • timeBoundary:  查询datasource的最早和最晚的时间点
     
  • segmentMetadata:查询Segment的元信息,例如有那列,哪些指标,聚合力度等
     
  • dataSourceMetadata: 查询datasource的最近一次摄入数据的时间
     

4.2.2 TopN

     和我需求契合度非常高,返回指定维度和排序字段的top-n条。

4.2.3 GroupBy

     与sql中的group by类似,支持对多个维度进行分组,也支持对维度进行排序,并支持limit行数限制。同时支持having操作,与topN相比,性能比前者差很多!如果对时间维度进行聚合,建议使用时间序列或topN。

    常用参数如下:

4.2.3 Select

   与sql中的slect操作类似,支持按指定过滤器和时间段查看指定维度和指标,并可通过descending字段设置排序,支持分页拉取。但不支持aggregations和postAggregations。

 

5.Druid扩展

5.1 完善的监控与告警

  • 查询节点监控指标
  • 历史节点监控指标
  • 实时节点监控指标
  • cache监控指标
     

 

5.2 完善的社区

https://imply.io/get-started   支持简单的报表制作,sql查询

https://github.com/implydata

          

SpringBoot+Vue考试报名系统:从环境搭建到二次开发的完整实战指南 如果你正在为毕业设计、课程设计或者个人练手项目寻找一个“既有完整功能,又能快速跑通”的Java Web项目,那么一个基于SpringBoot和Vue的考试报名系统,很可能就是你当前最需要的。 这个选题之所以经典,是因为它几乎涵盖了Web应用开发的核心流程:用户管理、权限控制、数据增删改查、表单提交、状态流转以及前后端分离架构。它不像一个简单的“学生管理系统”那样过于基础,也不像“电商秒杀系统”那样复杂到需要处理高并发和分布式事务。它处于一个完美的平衡点——既有足够的业务逻辑来展示你的技术能力,又不会因为过于 阅读详情

相关推荐

【大数据入门核心技术-Druid】(一)Druid简介

Apache Druid 是一个分布式的、支持实时多维 OLAP 分析的数据处理系统,用于解决如何在大规模数据集下进行快速的、交互式的查询和分析的问题。Apache Druid 具有以下特点: 亚秒响应的交互式查询,支持较高;包括多维过滤、Ad-hoc 的属性分组、快速聚合数据等。 支持高并发、实时数据摄入,真正做到数据摄入实时、查询结果实时。 扩展性强,采用分布式 shared-nothing 的架构,支持 PB 级数据、千亿级事件快速处理,支持每秒数千查询并发。 支持多租户同时在线查询。 支持

592

Druid 大数据分析

0. 前言OLTP 与 OLAPOLTP:OLTP是传统的关系型数据库的主要应用,主要是基本的、日常的事务处理,例如银行交易。通俗的讲,就是对数据的增删改查等操作。OLAP:OLAP是数据仓库系统的主要应用,支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果。通俗的讲,就是对数据按不同维度的聚合,维度的下钻,上卷等。其中,OLAP可以分为ROLAP,MOLAP和HOLAPROLA...

以梦为马 1万+

大数据技术之Druid

Druid 是一个分布式的支持实时分析的数据存储系统(Data Store)。美国广告技术公司MetaMarkets 于2011 年创建了Druid 项目,并且于2012 年晚期开源了Druid 项目。Druid 设计之初的想法就是为分析而生,它在处理数据的规模、数据处理的实时性方面,比传统的OLAP 系统有了显著的性能改进,而且拥抱主流的开源生态,包括Hadoop 等。多年以来,Druid 一直是非常活跃的开源项目。Druid 官方网站。

悦分享 551

深入探索Druid:大数据实时分析引擎

Druid作为一款高度优化的分布式实时分析数据库,已经成为大数据领域中的重要工具之一。本文将深入探索Druid的架构和核心功能,介绍其在大数据实时分析领域的应用,并分享一些优化和最佳实践经验。Druid的架构由多个组件组成,包括数据摄取器(ingestion)、数据存储(storage)、查询引擎(query)、协调器(coordinator)和中介服务器(broker)。

m0_70031574的博客 705

Druid:大数据实时分析的利器

非常感谢您的详细指示和要求,我将尽我所能按照您的要求,以逻辑清晰、结构紧凑、简单易懂的专业技术语言,撰写一篇有深度、有思考、有见解的专业IT领域技术博客文章。 Druid:大数据实时分析的利器 作者:禅与计算机程序设计艺术 1. 背景介绍 随着大数据时代的到来,企

AI天才研究院 1181

【信息科学与工程学】【运营科学】第二篇 C4信息与通信网络运营 (C4) ——数据中心网络运营06

13 | 司法诉讼 | 原告律师 | 争取和解优势 | 证据披露的序贯博弈 | 策略性证据释放 | 持有证据集E = {强证据e_s, 中证据e_m, 弱证据e_w}。设公众原有认知人格向量为 Pold​​=(p1​,p2​,...,pk​), 其中p_i为负面特质(如“不敬业”)。危机后, 通过行为序列 {At​}和宣传, 将公众认知向新向量 Pnew​​引导, 使得在关键维度上, Pnew​​与 Pold​​的余弦相似度降低, 并与一个正面的、可接受的“原型”(如“浪子回头”、“慈父”)对齐。

weixin_49199313的博客 1488

技术分歧如何有效沟通:用代码和数据驱动的结构化论证方法

在软件工程实践中,技术方案的选择与论证是开发者日常面临的核心挑战。其本质是围绕特定约束条件(如性能、成本、可维护性)寻找最优解的系统性决策过程。有效的技术论证并非情绪对抗,而是基于事实、数据和可验证代码的理性沟通。这要求开发者掌握从问题澄清、基准测试、概念验证到利弊评估的结构化方法,其技术价值在于将主观争论转化为客观分析,提升团队决策效率与方案质量。典型的应用场景包括架构选型、性能优化、依赖库引入等关键决策点。本文以数据库连接池选型等实战案例,系统阐述了如何运用基准测试、PoC等工具进行数据驱动的“技术反击

dieqiao8331的博客 338

【信息科学与工程学】计算机科学与自动化-——第十五篇云计算 12 公有云里的“多Region + 多AZ“ 02 运营算法01

算法逐步思考推理思考(含数学方程式、对象、资源、任务、进程/协程/线程及对应的代数、约束、目标函数/传递函数/依赖函数、参数及参数的数值范围及边界条件、逐步推理的数学方程式列表、上下文切换、并发/串行/随机/乱序/顺序)算法逐步思考推理思考(含数学方程式、对象、资源、任务、进程/协程/线程及对应的代数、约束、目标函数/传递函数/依赖函数、参数及参数的数值范围及边界条件、逐步推理的数学方程式列表、上下文切换、并发/串行/随机/乱序/顺序)云厂商提高闲置资源利用率。算法复杂度为O(N),N为实例数量。

weixin_49199313的博客 284

Java高校导师双选系统:智能匹配算法与架构设计

高校教务系统中的导师双选流程是教育信息化的重要场景,其核心在于解决资源优化配置问题。传统匹配算法如Gale-Shapley虽然理论完备,但在实际工程落地时需要结合业务特点进行改进。通过引入多维度权重计算模型(包括学术匹配度、成绩适配度和志愿优先级)和分布式缓存技术,可以显著提升系统性能。本文介绍的Java技术栈实现方案,采用Spring Boot+MyBatis-Plus框架组合,配合Redis缓存和智能匹配算法,使匹配成功率提升40%以上。这种架构设计对高并发场景下的教育系统开发具有普适参考价值,特别是其

weixin_30443731的博客 355

企业OA系统深度优化实战:从流程引擎到微服务架构的全面升级

办公自动化(OA)系统是企业数字化转型的核心基础设施,其核心在于通过流程引擎实现工作流的自动化流转与协同。随着业务规模扩张,传统单体架构的OA系统在流程效率、系统集成和移动体验上面临严峻挑战。微服务架构通过将系统拆分为独立部署、松耦合的服务,能够有效提升系统的灵活性、可维护性和扩展性。本次优化实践聚焦于将老旧OA系统进行现代化改造,通过引入微服务化架构、重构前端技术栈(Vue3)以及构建统一待办中心,实现了流程的智能化与场景化。方案特别针对流程引擎进行了柔性化改造,支持动态路径与条件分支,并结合企业微信集成

weixin_34015336的博客 525

基于Spring Boot与Vue的果蔬销售管理系统全栈开发实战

进销存管理系统是企业资源计划的核心模块,用于管理商品的采购、库存与销售流程,确保数据一致性并优化运营效率。其技术原理通常围绕关系型数据库的事务处理、前后端分离架构及并发控制机制展开。在生鲜零售等特定领域,系统需应对商品保质期短、价格波动频繁等挑战,因此技术价值在于通过精准的批次管理与实时库存扣减,减少损耗并提升决策效率。应用场景广泛覆盖社区店、配送中心等实体。本文以果蔬销售为切入点,详细解析了如何利用Spring Boot和Vue技术栈实现一个具备高可用性的管理系统,其中重点探讨了库存批次设计与并发控制方案

weixin_33882452的博客 358

数据库安全不是加把锁:呼吸式防护的6个实战切口

数据库安全本质上是数据访问全生命周期的可控治理,其核心在于建立动态、可追溯、自适应的防护机制。从基础概念看,它超越传统边界防御,聚焦会话身份标识、查询语义分析、凭证自动轮换等纵深能力;技术价值体现在将静态权限升级为行级+时间窗策略,把加密覆盖至静态、传输与内存三态,并通过连接指纹实现攻击面收敛;典型应用场景包括等保2.0三级测评、GDPR主体权利响应及SaaS多租户数据隔离;本文基于12年一线攻防经验,系统拆解‘谁在连?连什么?查什么?改什么?存哪里?留多久?’这六个关键切口,融合行级安全策略(RLS)与凭

weixin_30652897的博客 432

5分钟搞懂深度学习如何革新声源定位:从GCC-PHAT到DNN的实战对比

本文深入对比了深度学习与传统GCC-PHAT方法在声源定位领域的实战表现。通过具体实验数据,展示了DNN模型在强混响、低信噪比等复杂场景下,如何实现定位准确率的显著提升,并探讨了其数据驱动范式带来的鲁棒性优势与工程部署挑战。

3a9bq4r8t2y的博客 223

【系统架构设计师】综合知识篇

本文是软考系统架构设计师备考笔记,系统梳理了考试核心知识点,重点涵盖中间件技术、缓存问题和解决方案。主要内容包括: 中间件概述:定义位于OS与应用间的软件层,分类包括数据库访问、RPC、消息队列等,分析7大技术优点。 消息中间件:对比RabbitMQ/Kafka/RocketMQ特性,详解点对点和发布订阅模型,列举异步解耦、流量削峰等典型场景。 Redis缓存:介绍单线程模型、5种数据结构,重点分析RDB/AOF持久化机制和集群高可用方案。 缓存三大问题:通过流程图解析雪崩(随机过期时间/熔断降级)、穿透(

你的博客 883

MT5策略如何设置回测结果才能最接近实盘

摘要:在MT5回测中,选择"每笔分笔报价"模式最接近实盘交易,因其使用真实Tick数据模拟价格波动、点差和滑点。关键设置包括:下载高质量历史数据、合理设定点差和滑点、使用正常回测速度。该模式能准确测试挂单、止盈止损等策略,虽然速度较慢但结果最可靠,避免其他模式造成的失真,是评估交易策略表现的最佳选择。(149字)

weixin_38915451的博客 1885

拯救我的老平板三星note8.0 table(GT-N5110)升级到lineage os-14.1(android7.1)全记录

买了多年的三星平板note8.0已经闲置了一段时间,今天在家不能出门,也没啥事,就把它拿出来刷新系统。不成想居然搞了一天,还差点变成了砖。 原版的系统是安卓4.0的系统,很多软件已经不能用了,微信、优酷都不支持,而且三星也不提供更新升级,于是寻求第三方解决方案。折腾过程一波三折,就不赘述了,我就讲一下正确的操作过程吧。 切记我这里讲的过程只针对三星note8.0 table,国行版本,版本号是...

weixin_41108814的博客 2万+

大数据实时多维OLAP分析数据库Apache Druid入门分享-下

了解Apache Druid的基础概念后,本篇进一步研究其核心架构和核心设计原理部分,了解相关外部依赖,对其数据摄取和查询有一定认识,然后通过搭建分布式集群进一步理解其架构组成,最后用一个示例从HDFS将数据摄取到Druid并演示两种查询方式

itxiaoshen博客 1149

硬件工程师进阶之路:从电路基础到PCB设计实战核心技能

硬件电路设计是一项融合电路理论、器件特性与工程实践的复合型技术。一块稳定可靠的电路板,不仅需要正确的原理图,更依赖于合理的叠层规划、元器件布局与布线策略。在高速数字电路日益普及的今天,信号完整性、电源完整性与电磁兼容性设计已成为决定产品成败的关键因素,工程师需要深入理解阻抗匹配、回流路径、去耦电容布置等技术原理,并将理论灵活应用于通信设备、消费电子、工业控制等各类产品研发场景。PCB设计正是连接电原理图与可量产产品之间的核心枢纽,也是硬件工程师能力进阶过程中的分水岭技能。掌握从基础电路分析到高速PCB设计,

weixin_29183637的博客 268

实时分析数据库之Druid

Druid是一个开源的实时分析数据存储和查询引擎,专门设计用于快速查询和分析大规模的实时和历史数据。它最初由MetaMarkets开发并于2015年开源。

CherryXieのblog 3283

红外与可见光融合避坑指南:LLVIP数据集实测6大算法效果对比

本文基于专为弱光视觉设计的LLVIP数据集,对GTF、DenseFuse、FusionGAN、IFCNN等6种主流红外与可见光图像融合算法进行了深度实测与对比。通过客观指标与可视化分析,揭示了算法在极端弱光下易出现特征丢失的共性问题,并探讨了融合图像对下游目标检测任务的实际增益,为工程选型与算法调优提供了实用指南。

weixin_29092031的博客 441

基于深度学习YOLOv8的商品识别系统(深度学习 + UI界面 + 训练数据集 + Python代码)

如果使用自定义数据集,可以通过图像标注工具如LabelImg来标注每个商品的类别和边界框,并保存为YOLO格式的文本文件。bash复制编辑/dataset/images/train/val/labels/train/val这样,我们就准备好了数据集,可以开始训练YOLOv8模型。本文介绍了如何使用YOLOv8构建一个商品识别系统,包括从数据准备到模型训练,再到UI界面的开发。通过深度学习技术,尤其是YOLOv8的高效目标检测能力,我们能够快速实现商品识别并集成到实际应用中。

YOLO 303

Druid的介绍、使用和原理架构(数据摄取、数据查询)

Druid是MetaMarket公司研发的一款针对海量数据进行高性能实时分析的OLAP引擎(包含存储引擎和分析引擎当前已经捐献给Apache基金会。低延迟交互式查询:Druid提供低延迟实时数据摄取(入库),并采用预聚合、列式存储、位图索引 等手段使得海量数据分析能够亚秒级响应。高可用性( High Available ):Druid 使用 HDFS/S3 作为 Deep Storage,Segment 会在多个Historical 节点上进行加载;摄取数据时也可以多副本摄取,保证数据可用性和容错性。

迷雾总会解 9162

YOLO+OpenClaw缺陷检测智能体 | 低代码工业质检自动化方案 | 含YOLO模型训练/智能体集成/任务全流程,支持离线日报/预警/趋势分析,解决实时性瓶颈问题(下篇)

某PCB板制造商需要对生产线上的PCB板进行缺陷检测,主要检测划痕、凹坑、污渍和裂纹等缺陷。原有人工检测方式效率仅为200件/小时,漏检率达5%,且检测人员长期工作易疲劳。

qq_36130719的博客 208

大数据新视界 --大数据大厂之 Druid 查询性能提升:加速大数据实时分析的深度探索

本文深入探讨 Druid 查询性能优化。阐述 Druid 架构,分析数据存储、摄入方式与查询性能的关系,介绍优化策略如存储格式、索引维护、摄入模式调整和查询语句优化,还通过交通、游戏等行业案例展示优化效果。

【青云交】华为云云享专家 | 阿里云开发者社区专家博主 技术圈个人影响力前 9 | 博客之星 TOP12 优快云 首位四榜(原力榜 / 作者周榜 / 领军人物 / 综合热榜)榜首,破平台纪录! 苏州地区全榜霸榜,感恩全网十多万粉丝同行! 4274

Vue2 - 最新详细实现接入天地图详细配置流程及示例代码教程,提供获取用户当前定位的城市名称及省市区数据、精准经纬度信息、IP属地定位、地图搜索标点等示例,解决天地图跨域报错/页面白屏/定位不准问题

vue2,nuxt2,天地图,使用教程,vue接入国家天地图,定位api,ip属地定位,获取用户当前位置数据,省市区,地图不显示,白屏,报错,vue2如何使用天地图,地图选点,cors跨域,白名单设置了还是不行,vue项目调用天地图api实现定位,Vue2中使用天地图,详细教程,天地图申请密钥key教程,经纬度,经纬度不准确,一直定位北京,定位在北京不准怎么办,nuxt项目天地图,网站,网页,h5页面,地图显示不全,获取当前定位,如何使用天地图,拿到客户ip地址定位城市名称,距离计算,实时搜索地址逆解析,天

🏆 前端领域优质创作者 5329

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Maven druid连接池;缓存机制

@NoArgsConstructor @AllArgsConstructor @ToString public class Student { private int sid; private String stuNum; private String stuName; private String stuGender; private int stuAge; } #### 3.3 创建DAO接口,定义操作方法 - 创建`com.qfedu.dao`包..

qq_45935397的博客 1902

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

上一篇: Druid:Druid.io 部署&使用文档
下一篇: 5-Druid数据摄入-2
王树民
博客等级 码龄10年 912粉丝 560原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值