Rumah  >  Artikel  >  Java  >  Bagaimana untuk mengintegrasikan pangkalan data ClickHouse dalam SpringBoot2

Bagaimana untuk mengintegrasikan pangkalan data ClickHouse dalam SpringBoot2

PHPz
PHPzke hadapan
2023-05-20 22:28:181039semak imbas

1. Pengenalan kepada ClickHouse

1. Pengenalan asas

ClickHouse ialah pangkalan data sumber terbuka yang dibangunkan oleh Yandex, yang amat sesuai untuk memproses data penstriman siri masa atau data kelompok penyimpanan. ClickHouse tidak boleh digunakan sebagai pangkalan data tujuan umum, tetapi sebagai platform pemprosesan masa nyata teragih berprestasi tinggi untuk pertanyaan pantas data besar-besaran (seperti GROUP BY), kelajuan pertanyaan ClickHouse adalah sangat pantas.

2. Keupayaan analisis data

  • Ciri-ciri senario OLAP

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

(1), data baris

(2), data lajur

(3), analisis perbandingan

Pertanyaan analitik biasanya hanya perlu membaca sebahagian kecil lajur jadual. Dalam pangkalan data kolumnar, hanya data yang anda perlukan boleh dibaca. Data sentiasa dibungkus ke dalam bacaan kelompok, jadi pemampatan adalah sangat mudah. Pada masa yang sama, data disimpan secara berasingan dalam lajur, yang menjadikannya lebih mudah untuk dimampatkan. Ini mengurangkan lagi saiz I/O. Ini akan membantu lebih banyak data dicache oleh sistem kerana pengurangan I/O.

2. Sepadukan rangka kerja SpringBoot

Kes ini berdasarkan integrasi kumpulan sambungan Druid dan mybatis. SQL parser Druid versi 1.1.10 kini menyokong ClickHouse.

1. Kebergantungan teras

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

2. Sumber data yang dilampirkan

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 Konfigurasi kumpulan sambungan Druid

@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

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

Dengan cara ini, kod penyepaduan selesai.

3. Demonstrasi kes operasi

1. Antara muka Mapper

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

Berikut ialah tiga antara muka mudah yang ditunjukkan.

2. Fail 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>

Di sini create_day ditukar sebagai rentetan, jadi anda perlu memberi perhatian di sini.

3. Antara muka lapisan kawalan

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

Atas ialah kandungan terperinci Bagaimana untuk mengintegrasikan pangkalan data ClickHouse dalam SpringBoot2. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam