Heim  >  Artikel  >  Java  >  So integrieren Sie die ClickHouse-Datenbank in SpringBoot2

So integrieren Sie die ClickHouse-Datenbank in SpringBoot2

PHPz
PHPznach vorne
2023-05-20 22:28:181039Durchsuche

1. Einführung in ClickHouse

1. Grundlegende Einführung

ClickHouse ist eine Open-Source-Datenbank, die sich besonders für die Verarbeitung von Zeitreihen eignet Streaming-Daten oder Massendatenspeicherung. ClickHouse sollte nicht als Allzweckdatenbank, sondern als ultrahochleistungsfähige verteilte Echtzeitverarbeitungsplattform für die schnelle Abfrage großer Datenmengen verwendet werden. In Bezug auf Datenzusammenfassungsabfragen (z. B. GROUP BY) beträgt die Abfragegeschwindigkeit von ClickHouse sehr schnell.

2. Fähigkeit zur Datenanalyse

  • OLAP-Szenarioeigenschaften

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

(1), Zeilendaten

(2), Spaltendaten

(3), vergleichende Analyse

Analytische Abfragen müssen normalerweise nur einen kleinen Teil der Spalten der Tabelle lesen. In einer spaltenbasierten Datenbank können nur die Daten gelesen werden, die Sie benötigen. Die Daten werden immer in Batch-Lesevorgängen gepackt, sodass die Komprimierung sehr einfach ist. Gleichzeitig werden die Daten separat in Spalten gespeichert, was die Komprimierung erleichtert. Dadurch wird die I/O-Größe weiter reduziert. Dies trägt dazu bei, dass aufgrund der geringeren E/A-Vorgänge mehr Daten vom System zwischengespeichert werden.

2. SpringBoot-Framework integrieren

Dieser Fall basiert auf: Druid-Verbindungspool und Mybatis-Integration. SQL-Parser Druid Version 1.1.10 unterstützt jetzt ClickHouse.

1. Kernabhängigkeit

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

2. Angehängte Datenquelle

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-Verbindungspool-Konfiguration

@Configuration
public 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. Parameterkonfigurationsklasse

@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
}

Auf diese Weise wird der Integrationscode vervollständigt.

3. Demonstration des Betriebsfalls

1. Mapper-Schnittstelle

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

Hier werden drei einfache Schnittstellen demonstriert.

2. Mapper.xml-Datei

<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>

Hier wird create_day als String konvertiert, daher müssen Sie hier aufpassen.

3. Schnittstelle der Kontrollebene

@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() ;
    }
}

Das obige ist der detaillierte Inhalt vonSo integrieren Sie die ClickHouse-Datenbank in SpringBoot2. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen