一、什么是druid?作用?
主要解决的是对实时数据以及较近时间的历史数据的多维查询提供高并发(多用户),低延时,高可靠性的问题。
Kylin对数据按照分区每天构建前一天的cube数据提供给用户查询,用户查询的是历史数据。
Druid不断的从ingest去拉取数据,持续构建cube,提供实时查询。
二、使用场景
- 适用于清洗好的记录实时录入,但不需要更新操作(项目中的使用)
整体项目框架中,query项目从druid中直接获取信息,druid从kylin、Bigdata中拉取数据,持续构建cube。
- 支持宽表,不用join的方式(换句话说就是一张单表)
- 可以总结出基础的统计指标,可以用一个字段表示
- 对时区和时间维度(year、month、week、day、hour等)要求高的(甚至到分钟级别)
- 实时性很重要
- 对数据质量的敏感度不高
- 用于定位效果分析和策略决策参考(项目中使用)
二、druid的查询
转载网址:http://lxw1234.com/archives/2015/11/561.htm
Druid查询是通过HTTP REST方式发送查询请求,查询的描述写在一个JSON文件中,可以处理查询请求的服务包括Broker、Historical和Realtime,这几个服务节点都提供了相同的查询接口,但一般是将查询请求发送至Broker节点,由Broker节点根据查询的数据源来转发至Historical或者RealTime节点。
什么是restful?
网络应用程序的设计风格和开发方式,基于http,可以使用JSON格式定义或XML格式定义。
三、应用
项目名称:datacube 主要关注druid和es这个两个文件夹的信息。并且为这两个文件的类中的public方法,写单元测试的代码。
首先根据用户传入的参数构建sql查询语句,然后执行sql语句生成一个cube。
sql语句的组成:select /* *0 */ *1 sum(*2) from table where *3 order by *4
其中:*0,一些提示信息;
*1,直接查询的结果字段;
*2 ,查询的需要聚合的字段;
*3,查询的条件
*4,排序的字段
将*0,*1,*2,*3,*4构建一个类,通过传入的参数(构建一个类)来创建查询语句。
query包含的是元数据,
四,单元测试
遇到问题:访问到权限修饰符为protected的成员变量。
解决方案:单元测试的类,继承AbstractTestNGSpringContextTests
原理:对集成了Spring TestContext Framework与TestNG环境中的ApplicationContext测试支持的基础测试类进行了抽象。当你继承AbstractTestNGSpringContextTests时,就可以访问到下列protected的成员变量:applicationContext:使用它进行显式的bean查找或 者测试整个上下文的状态
来源:CSDN
作者:面向bug编程
链接:https://blog.csdn.net/weixin_39466563/article/details/103678948