SpringBoot 2 통합 ClickHouse 데이터베이스 사례 분석

1.ClickHouse 안내
1.기초 소개
Yandex 오픈 소스 의 데이터 분석 데이터 베 이 스 는 ClickHouse 라 고 하 며 스 트림 이나 일괄 입고 에 적합 한 순차 데이터 입 니 다.클릭 하 우 스 는 유 니 버 설 데이터베이스 가 아 닌 초고 성능 의 대량의 데 이 터 를 빠르게 조회 하 는 분포 식 실시 간 처리 플랫폼 으로 데이터 집계 조회(예 를 들 어 GROUP BY)에서 클릭 하 우 스 는 조회 속도 가 매우 빠르다.
2.데이터 분석 능력
OLAP 장면 특징
  • 대부분 읽 기 요청 입 니 다
  • 데 이 터 는 항상 상당 한 일괄(>1000 rows)로 기록 합 니 다
  • 추 가 된 데 이 터 를 수정 하지 않 습 니 다
  • 매번 조회 할 때마다 데이터베이스 에서 대량의 줄 을 읽 지만 동시에 소량의 열 만 필요 합 니 다
  • 4
  • 넓 은 표,즉 표 마다 대량의 열 을 포함 하고 있다
  • 비교적 적은 조회(보통 서버 당 초당 수백 개의 조회 또는 더 적은 조회)
  • 간단 한 조회 에 대해 약 50 밀리초 지연 을 허용 합 니 다
  • 열의 데 이 터 는 상대 적 으로 작다.숫자 와 짧 은 문자열(예 를 들 어 URL 당 60 바이트)
  • 단일 조 회 를 처리 할 때 높 은 스루풋(서버 당 초당 수 십 억 줄)이 필요 합 니 다
  • 사 무 는 필수 가 아니다.
    데이터 일치 성에 대한 요구 가 낮다
  • 모든 조 회 는 큰 시 계 를 제외 하고 매우 작다
  • 조회 결 과 는 원본 데이터 보다 현저히 작 습 니 다.다시 말 하면 데이터 가 여과 되 거나 취 합 된 후에 단일 서버 의 메모리 에 담 길 수 있 습 니 다
  • 열 데이터 저장 소
    (1)줄 데이터

    (2)열 데이터

    (3)비교 분석
    분석 류 조 회 는 보통 표 의 일부분 만 읽 어야 한다.열 데이터베이스 에서 필요 한 데이터 만 읽 을 수 있 습 니 다.데 이 터 는 항상 대량으로 읽 기 때문에 압축 이 매우 쉽다.동시에 데 이 터 를 열 에 따라 각각 저장 하 는 것 도 압축 하기 쉽다.이것 은 I/O 의 부 피 를 더욱 낮 추 었 다.I/O 가 낮 아 지기 때문에 더 많은 데이터 가 시스템 캐 시 되 는 데 도움 이 될 것 입 니 다.
    2.SpringBoot 프레임 워 크 통합
    이 사례 는 Druid 연결 탱크 와 my batis 를 기반 으로 통합 되 었 습 니 다.Druid 1.1.10 버 전 SQL Parser 는 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 연결 풀 설정
    
    @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
    }
    이렇게 코드 를 통합 하면 완성 된다.
    3.조작 사례 시연
    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>
    여기 createday 는 문자열 로 바 뀌 고 있 습 니 다.주의 하 셔 야 합 니 다.
    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() ;
      }
    }
    소스 코드 주소
    GitHub/주소
    https://github.com/cicadasmile/middle-ware-parent
    GitEE/주소
    https://gitee.com/cicadasmile/middle-ware-parent
    이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

    좋은 웹페이지 즐겨찾기