本文源码:GitHub·点这里 || GitEE·点这里

一、ClickHouse简介

1、基础简介

Yandex开源的数据分析的数据库,名字叫做ClickHouse,适合流式或批次入库的时序数据。ClickHouse不应该被用作通用数据库,而是作为超高性能的海量数据快速查询的分布式实时处理平台,在数据汇总查询方面(如GROUP BY),ClickHouse的查询速度非常快。

2、数据分析能力

  • OLAP场景特征
· 大多数是读请求
· 数据总是以相当大的批(> 1000 rows)进行写入
· 不修改已添加的数据
· 每次查询都从数据库中读取大量的行,但是同时又仅需要少量的列
· 宽表,即每个表包含着大量的列
· 较少的查询(通常每台服务器每秒数百个查询或更少)
· 对于简单查询,允许延迟大约50毫秒
· 列中的数据相对较小: 数字和短字符串(例如,每个URL 60个字节)
· 处理单个查询时需要高吞吐量(每个服务器每秒高达数十亿行)
· 事务不是必须的
· 对数据一致性要求低
· 每一个查询除了一个大表外都很小
· 查询结果明显小于源数据,换句话说,数据被过滤或聚合后能够被盛放在单台服务器的内存中
  • 列式数据存储

(1)、行式数据

(2)、列式数据

(3)、对比分析

分析类查询,通常只需要读取表的一小部分列。在列式数据库中可以只读取需要的数据。数据总是打包成批量读取的,所以压缩是非常容易的。同时数据按列分别存储这也更容易压缩。这进一步降低了I/O的体积。由于I/O的降低,这将帮助更多的数据被系统缓存。

二、整合SpringBoot框架

该案例基于:Druid连接池和mybatis进行整合。Druid 1.1.10 版本 SQL Parser对clickhouse的开始提供支持。

1、核心依赖

<dependency><groupId>ru.yandex.clickhouse</groupId><artifactId>clickhouse-jdbc</artifactId><version>0.1.53</version>
</dependency>

2、配属数据源

spring:datasource:type: com.alibaba.druid.pool.DruidDataSourceclick:driverClassName: ru.yandex.clickhouse.ClickHouseDriverurl: jdbc:clickhouse://127.0.0.1:8123/defaultinitialSize: 10maxActive: 100minIdle: 10maxWait: 6000

3、Druid连接池配置

@Configuration
public class DruidConfig {@Resourceprivate JdbcParamConfig jdbcParamConfig ;@Beanpublic DataSource dataSource() {DruidDataSource datasource = new DruidDataSource();datasource.setUrl(jdbcParamConfig.getUrl());datasource.setDriverClassName(jdbcParamConfig.getDriverClassName());datasource.setInitialSize(jdbcParamConfig.getInitialSize());datasource.setMinIdle(jdbcParamConfig.getMinIdle());datasource.setMaxActive(jdbcParamConfig.getMaxActive());datasource.setMaxWait(jdbcParamConfig.getMaxWait());return datasource;}
}

4、参数配置类

@Component
@ConfigurationProperties(prefix = "spring.datasource.click")
public class JdbcParamConfig {private String driverClassName ;private String url ;private Integer initialSize ;private Integer maxActive ;private Integer minIdle ;private Integer maxWait ;// 省略 GET 和 SET
}

这样整合代码就完成了。

三、操作案例演示

1、Mapper接口

public interface UserInfoMapper {// 写入数据void saveData (UserInfo userInfo) ;// ID 查询UserInfo selectById (@Param("id") Integer id) ;// 查询全部List<UserInfo> selectList () ;
}

这里就演示简单的三个接口。

2、Mapper.xml文件

<mapper namespace="com.click.house.mapper.UserInfoMapper"><resultMap id="BaseResultMap" type="com.click.house.entity.UserInfo"><id column="id" jdbcType="INTEGER" property="id" /><result column="user_name" jdbcType="VARCHAR" property="userName" /><result column="pass_word" jdbcType="VARCHAR" property="passWord" /><result column="phone" jdbcType="VARCHAR" property="phone" /><result column="email" jdbcType="VARCHAR" property="email" /><result column="create_day" jdbcType="VARCHAR" property="createDay" /></resultMap><sql id="Base_Column_List">id,user_name,pass_word,phone,email,create_day</sql><insert id="saveData" parameterType="com.click.house.entity.UserInfo" >INSERT INTO cs_user_info(id,user_name,pass_word,phone,email,create_day)VALUES(#{id,jdbcType=INTEGER},#{userName,jdbcType=VARCHAR},#{passWord,jdbcType=VARCHAR},#{phone,jdbcType=VARCHAR},#{email,jdbcType=VARCHAR},#{createDay,jdbcType=VARCHAR})</insert><select id="selectById" parameterType="java.lang.Integer" resultMap="BaseResultMap">select<include refid="Base_Column_List" />from cs_user_infowhere id = #{id,jdbcType=INTEGER}</select><select id="selectList" resultMap="BaseResultMap" >select<include refid="Base_Column_List" />from cs_user_info</select>
</mapper>

这里 create_day 是以字符串的方式在转换,这里需要注意下。

3、控制层接口

@RestController
@RequestMapping("/user")
public class UserInfoController {@Resourceprivate UserInfoService userInfoService ;@RequestMapping("/saveData")public String saveData (){UserInfo userInfo = new UserInfo () ;userInfo.setId(4);userInfo.setUserName("winter");userInfo.setPassWord("567");userInfo.setPhone("13977776789");userInfo.setEmail("winter");userInfo.setCreateDay("2020-02-20");userInfoService.saveData(userInfo);return "sus";}@RequestMapping("/selectById")public UserInfo selectById () {return userInfoService.selectById(1) ;}@RequestMapping("/selectList")public List<UserInfo> selectList () {return userInfoService.selectList() ;}
}

四、源代码地址

GitHub·地址
https://github.com/cicadasmile/middle-ware-parent
GitEE·地址
https://gitee.com/cicadasmile/middle-ware-parent

SpringBoot2 整合 ClickHouse数据库,实现高性能数据查询分析相关推荐

  1. 开源大数据查询分析引擎

    引言 大数据查询分析是云计算中核心问题之一,自从Google在2006年之前的几篇论文奠定云计算领域基础,尤其是GFS.Map-Reduce.Bigtable被称为云计算底层技术三大基石.GFS.Ma ...

  2. 大数据处理系统都有哪些?(数据查询分析计算系统篇)

    大数据的出现使得数据的处理效率提高不少,这得益于大数据的数据处理系统,而大数据的处理系统有很多.就目前而言,主要的大数据处理系统有数据查询分析计算系统.批处理系统.流式计算系统.迭代计算系统.图计算系 ...

  3. php 集成 spss,〖SPSS Modeler〗 IBM SPSS Modeler 整合不同数据库之间的数据

    来自IBM DEVELOPERWORKS 简介 由于目前企业客户的业务量和数据量都在不断的提高,随着企业的发展,很多企业的数据存储都不局限于同一个数据库上,如果要对这些存储在不同数据库上的数据进行处理 ...

  4. 数据库作业4——数据查询

    3.4 数据查询 3.4.1 单表查询 1 选择表中的若干列 (3)查询经过计算的值 2 选择表中的若干元组 (1)消除取值重复的行 (2)查询满足条件的元组 3 ORDER BY 子句 4. 聚集函 ...

  5. 按学号和姓名进行查询c语言,数据库实验4 数据查询(答案)

    数据库技术与应用实验 实验4 数据查询 实验4 数据查询 学号:18103317 专业:电子信息工程 一.实验内容和步骤 1.在studentsdb数据库中,使用下列SQL语句将输出什么?并说明语句中 ...

  6. 数据库实验报告 数据查询

    桂 林 理 工 大 学 实  验  报  告 班级软件2班学号3162052051734姓名梁振宇同组实验者 实验名称数据查询日期 2018年 06 月05 日 一.实验目的: 1.      观察查 ...

  7. 数据库——实验二 数据查询

    1.实验目的 理解SQL 程序设计基本规范,熟练运用SQL 语言实现数据查询,包括单表查询.分组统计查询和连接查询.嵌套查询合和集合查询. 2.实验内容和要求 针对tpch 数据库或自建数据库test ...

  8. Android sqlite数据库update之后数据查询数据获取不实时。。。

    最近写项目的时候用android自带的数据库SqliteDatabase,使用过程中发生了这样一件事情,我在Activity B中读取数据库表User中的数据,显示在UI上,然后跳转到Activity ...

  9. 大数据查询分析引擎比较

    1.常见方案比较 首先,Hive/SparkSQL 在数据仓库的领域应用是比较广泛的,但是因为查询时延很难能够满足毫秒到秒级的要求,同时因为是离线计算,数据时效性也比较差. 其次,ES (Elasti ...

最新文章

  1. Spring3 MVC 注解---注解基本配置及@controller和 @RequestMapping 常用解释
  2. 在DNN中如何使FriendlyURL使用PageName作为页面名称
  3. Python类与对象技巧(1):字符串格式化、封装属性名、可管理的属性、调用父类方法
  4. python编程狮app题库_‎Python编程狮-零基础学Python im App Store
  5. PowerDesigner建数据库模型增加自定义扩展属性
  6. 互联网晚报 | 2月8日 星期二 | 上海微电子交付中国首台光刻机;广东诞生全国首个万亿工业强区;东芝宣布分拆为两家公司...
  7. background复合属性顺序_CSS的background属性的缩写顺序介绍
  8. Junit下获取src/test/resource路径
  9. dubbo连接线上服务,没有配置好引发的错误
  10. Bailian2933 停车场收费【水题】
  11. Jhipster创建微服务【0】——踩坑
  12. VRTK summary
  13. 三、实战小例程 基于STM32F103C8T6最小系统板和STM32CubeMX驱动WS2812B光立方
  14. 白化(Whitening) PCA白化 ZCA白化
  15. WPF另类实现摄像头录像并预览
  16. Postman中文版下载[9.12.0]
  17. Java程序设计-书上重点总结
  18. spark分布式矩阵采坑记
  19. 机器学习(二):k近邻法(kNN)
  20. 自然增长率,到底怎么算才合理!

热门文章

  1. qt利用QSplitter任意拆分窗口
  2. USACO-Section1.4 Barn Repair (贪心算法)
  3. Python 获取重定向url
  4. C/C++fflush(stdout)循环打印输出避免缓存区错误
  5. Win10 JAVA安装及环境搭建(windows jdk,windows java环境配置)
  6. 基于开源蜜罐的实践与功能扩展
  7. 一句命令删除docker所有镜像或容器
  8. 2019牛客多校四 E. triples II (容斥)
  9. 在阿里云服务器centOs7系统中部署.NET Core项目
  10. 【leetcode-74】搜索二维矩阵