您好,欢迎访问一九零五行业门户网

SpringBoot2中如何整合ClickHouse数据库

一、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数据库的详细内容。
其它类似信息

推荐信息