Heim > Java > javaLernprogramm > Hauptteil

So integrieren Sie die ClickHouse-Datenbank in SpringBoot2

PHPz
Freigeben: 2023-05-20 22:28:18
nach vorne
1091 Leute haben es durchsucht

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个字节)
· 处理单个查询时需要高吞吐量(每个服务器每秒高达数十亿行)
· 事务不是必须的
· 对数据一致性要求低
· 每一个查询除了一个大表外都很小
· 查询结果明显小于源数据,换句话说,数据被过滤或聚合后能够被盛放在单台服务器的内存中
Nach dem Login kopieren
# 🎜🎜#
  • 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>
Nach dem Login kopieren

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
Nach dem Login kopieren

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;
    }
}
Nach dem Login kopieren

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
}
Nach dem Login kopieren

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 () ;
}
Nach dem Login kopieren

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>
Nach dem Login kopieren

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() ;
    }
}
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:yisu.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage