一、clickhouse简介1、基础简介clickhouse是一个由yandex开源的数据库,特别适于处理时间序列的流数据或批量数据存储。clickhouse不应该被用作通用数据库,而是作为超高性能的海量数据快速查询的分布式实时处理平台,在数据汇总查询方面(如group by),clickhouse的查询速度非常快。
2、数据分析能力olap场景特征
· 大多数是读请求· 数据总是以相当大的批(> 1000 rows)进行写入· 不修改已添加的数据· 每次查询都从数据库中读取大量的行,但是同时又仅需要少量的列· 宽表,即每个表包含着大量的列· 较少的查询(通常每台服务器每秒数百个查询或更少)· 对于简单查询,允许延迟大约50毫秒· 列中的数据相对较小: 数字和短字符串(例如,每个url 60个字节)· 处理单个查询时需要高吞吐量(每个服务器每秒高达数十亿行)· 事务不是必须的· 对数据一致性要求低· 每一个查询除了一个大表外都很小· 查询结果明显小于源数据,换句话说,数据被过滤或聚合后能够被盛放在单台服务器的内存中
列式数据存储
(1)、行式数据
(2)、列式数据
(3)、对比分析
分析类查询,通常只需要读取表的一小部分列。在列式数据库中可以只读取需要的数据。数据总是打包成批量读取的,所以压缩是非常容易的。同时数据按列分别存储这也更容易压缩。这进一步降低了i/o的体积。由于i/o的降低,这将帮助更多的数据被系统缓存。
二、整合springboot框架该案例基于:druid连接池和mybatis进行整合。sql解析器druid 1.1.10版本现已支持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.druiddatasource click: driverclassname: ru.yandex.clickhouse.clickhousedriver url: jdbc:clickhouse://127.0.0.1:8123/default initialsize: 10 maxactive: 100 minidle: 10 maxwait: 6000
3、druid连接池配置@configurationpublic class druidconfig { @resource private jdbcparamconfig jdbcparamconfig ; @bean public 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_info where 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 { @resource private 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() ; }}
以上就是springboot2中如何整合clickhouse数据库的详细内容。