我的编程空间,编程开发者的网络收藏夹
学习永远不晚

怎么将Mybatis连接到ClickHouse

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

怎么将Mybatis连接到ClickHouse

这篇文章主要讲解了“怎么将Mybatis连接到ClickHouse”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么将Mybatis连接到ClickHouse”吧!

场景

最近在做数据分析项目,里面有这样一个业务:把匹配的数据打上标签,放到新的索引中。

数据量:累计亿级的数据

使用场景:可能会单次查询大量的数据,但不会设置复杂的条件,且这些数据不会被再次修改

原来使用的数据库:ElasticSearch

问题:上面也说了我这里打上标记后,这些数据几乎不会再修改了。ES 是一个全文检索引擎,更适用于进行大量文本检索的情况。这里与我上面的使用场景就不太匹配了。

技术选型的考虑:改用战斗民族开发的 ClickHouse,它适用于 OLAP 也就是数据分析的场景,当数据写入后,通过不同维度不断挖掘、分析,发现其中的商业价值。ClickHouse 适用于读远大于写的情况。

此外,相比ES,ClickHouse 占用的硬盘空间更小,也有利于降低运维成本。

下面是我在尝试接入 ClickHouse 时的一些实践,以及关于 ClickHouse数组类型转换问题的解决方案。

关于 ClickHouse 更详细的知识参考:https://zhuanlan.zhihu.com/p/98135840

示例代码已经上传到了 Git,目前更新第 28 节:https://github.com/laolunsi/spring-boot-examples/

Mybatis + ClickHouse

以前一直用 Mybatis 去操作 MySQL,其实 Mybatis 还可以操作 ClickHouse,这里用 Druid 进行连接管理。

maven 配置

<dependency>      <groupId>com.alibaba</groupId>      <artifactId>druid</artifactId>      <version>1.2.5</version>    </dependency>    <dependency>      <groupId>ru.yandex.clickhouse</groupId>      <artifactId>clickhouse-jdbc</artifactId>      <version>0.2.6</version>    </dependency>    <dependency>      <groupId>org.mybatis.spring.boot</groupId>      <artifactId>mybatis-spring-boot-starter</artifactId>      <version>2.1.3</version>    </dependency>

配置文件:

spring: datasource:  type: com.alibaba.druid.pool.DruidDataSource  # 注意这里是自定义的配置,通过 JdbcParamConfig 来加载配置到 Spring 中  # 然后由 DruidConfig 来配置数据源  click:   driverClassName: ru.yandex.clickhouse.ClickHouseDriver   url: jdbc:clickhouse://127.0.0.1:8123/test # ip:port/database   userName: default   password: default # 按照自己连接的 clickhouse 数据库来   initialSize: 10   maxActive: 100   minIdle: 10   maxWait: 6000   validationQuery: SELECT 1

加载配置项的类:

@Component@ConfigurationProperties(prefix = "spring.datasource.click")public class JdbcParamConfig {  private String userName;  private String password;  private String driverClassName ;  private String url ;  private Integer initialSize ;  private Integer maxActive ;  private Integer minIdle ;  private Integer maxWait ;  private String validationQuery;  // ignore getters and setters}

配置 Druid:

@Configuration@MapperScan(basePackages = {    "com.aegis.analysis.clickhousestorage.dao"})public class DruidConfig {  @Resource  private JdbcParamConfig jdbcParamConfig ;  @Bean(name = "clickDataSource")  public DataSource dataSource() throws ClassNotFoundException {    Class classes = Class.forName("com.alibaba.druid.pool.DruidDataSource");    DruidDataSource dataSource = (DruidDataSource) DataSourceBuilder        .create()        .driverClassName(jdbcParamConfig.getDriverClassName())        .type(classes)        .url(jdbcParamConfig.getUrl())        .username(jdbcParamConfig.getUserName())        .password(jdbcParamConfig.getPassword())        .build();    dataSource.setMaxWait(jdbcParamConfig.getMaxWait());    dataSource.setValidationQuery(jdbcParamConfig.getValidationQuery());    return dataSource;  }  @Bean  public SqlSessionFactory clickHouseSqlSessionFactoryBean() throws Exception {    SqlSessionFactoryBean factory = new SqlSessionFactoryBean();    factory.setDataSource(dataSource());    // 实体 model的 路径 比如 com.order.model    factory.setTypeAliasesPackage("com.example.clickhousedemo.model");    //添加XML目录    ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();    factory.setMapperLocations(resolver.getResources("classpath:mapperpublic class ClickArrayToIntHandler extends BaseTypeHandler<Integer[]> {  @Override  public void setNonNullParameter(PreparedStatement preparedStatement, int i, Integer[] integers, JdbcType jdbcType) throws SQLException {    preparedStatement.setObject(i, integers);  }  @Override  public Integer[] getNullableResult(ResultSet resultSet, String s) throws SQLException {    Object obj = resultSet.getObject(s);    return parseClickHouseArrayToInt(obj);  }  @Override  public Integer[] getNullableResult(ResultSet resultSet, int i) throws SQLException {    Object obj = resultSet.getObject(i);    return parseClickHouseArrayToInt(obj);  }  @Override  public Integer[] getNullableResult(CallableStatement callableStatement, int i) throws SQLException {    Object obj = callableStatement.getObject(i);    return parseClickHouseArrayToInt(obj);  }  private Integer[] parseClickHouseArrayToInt(Object obj) {    if (obj instanceof ClickHouseArray) {      int[] res = new int[0];      try {        res = (int[]) ((ClickHouseArray) obj).getArray();      } catch (SQLException ex) {        ex.printStackTrace();      }      if (res != null && res.length > 0) {        Integer[] resI = new Integer[res.length];        for (int i = 0; i < res.length; i++) {          resI[i] = res[i];        }        return resI;      }    }    return new Integer[0];  }}

DAO.xml 也给一个示例:

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.aegis.analysis.clickhousestorage.dao.UserInfoMapper">  <resultMap id="BaseResultMap" type="com.example.clickhousedemo.model.UserInfo">    <id column="id" property="id" />    <result column="name" property="name" />    <result column="name" property="name" />    <result column="score" property="score" />    <result column="score2" property="score2" />    <result column="state" property="state" />    <result column="createTime" property="createTime" />    <!-- <result column="ranks" property="ranks" jdbcType="JAVA_OBJECT" javaType="java.lang.Object" />-->    <result column="ranks" property="ranks" typeHandler="com.example.clickhousedemo.dao.ClickArrayToIntHandler" />  </resultMap>  <sql id="Base_Column_List">    *  </sql>  <insert id="saveData" parameterType="com.aegis.analysis.clickhousestorage.model.UserInfo" >    INSERT INTO user      (id,name, score, score2, state, createTime, ranks)    VALUES    (#{id},#{name}, #{score}, #{score2}, #{state}, #{createTime}, #{ranks, jdbcType=ARRAY,    typeHandler=com.example.clickhousedemo.dao.ClickArrayToIntHandler})  </insert>  <select id="selectById" resultMap="BaseResultMap">    select    <include refid="Base_Column_List" />    from user    where id = #{id}    limit 1  </select>  <select id="selectList" resultMap="BaseResultMap" >    select    <include refid="Base_Column_List" />    from user  </select></mapper>

感谢各位的阅读,以上就是“怎么将Mybatis连接到ClickHouse”的内容了,经过本文的学习后,相信大家对怎么将Mybatis连接到ClickHouse这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

怎么将Mybatis连接到ClickHouse

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

怎么将Mybatis连接到ClickHouse

这篇文章主要讲解了“怎么将Mybatis连接到ClickHouse”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么将Mybatis连接到ClickHouse”吧!场景最近在做数据分析项目,
2023-06-14

python连接clickhouse端口报错怎么解决

本篇内容介绍了“python连接clickhouse端口报错怎么解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!python连接click
2023-06-30

Mybatis怎么连接数据库

这篇文章主要介绍了Mybatis怎么连接数据库的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Mybatis怎么连接数据库文章都会有所收获,下面我们一起来看看吧。从零开始Mybatis连接数据库创建Maven文件
2023-07-05

怎么将笔记本电脑连接到投影仪

本文小编为大家详细介绍“怎么将笔记本电脑连接到投影仪”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么将笔记本电脑连接到投影仪”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。将笔记本连接到投影仪的方法1、首先,我
2023-07-01

利用python怎么将MySQL指定的表增量同步数据到clickhouse脚本

本篇文章为大家展示了利用python怎么将MySQL指定的表增量同步数据到clickhouse脚本,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。python实现MySQL指定表增量同步数据到clic
2023-06-06

navicat怎么连接到数据库

使用 navicat 连接数据库的步骤:打开 navicat,创建新连接。选择数据库类型。输入连接信息(主机名/ip、端口、用户名、密码)。点击“测试连接”,验证成功。保存连接。如何使用 Navicat 连接数据库Navicat 是一款强
navicat怎么连接到数据库
2024-04-06

sql怎么连接到服务器

要通过 sql 连接到服务器,步骤包括:获取服务器地址、端口、用户名和密码。选择数据库客户端,如 dbms 或 cli。使用 sql 语句连接,如 connect to 'server_address:port' user 'databas
sql怎么连接到服务器
2024-05-30

怎么连接到云服务器

如果您正在使用云计算服务(如AmazonWebServices或GoogleCloud),那么连接到云服务器是非常简单的事情。下面是几个步骤:打开浏览器(例如Chrome、Firefox)并登录您的Amazon账户。在主页上,找到“AmazonWebServices”并点击它。在弹出的窗口中,选择“以管理员身份运行”,然后输入您的云服务器用户名和密码登录。登录后,您将进入“配置中心”页面
2023-10-26

MyBatis中怎么进行连接查询操作

在MyBatis中进行连接查询操作时,可以使用多种方式实现,包括使用Mapper XML文件中的标签和标签,或者使用注解方式进行连接查询。以下是一种使用Mapper XML文件的方式进行连接查询操作的示例:在Mapper XML文件中定义
MyBatis中怎么进行连接查询操作
2024-03-07

c语言怎么连接到mysql

在 c 语言中,使用 mysql c 客户端库连接到 mysql,步骤如下:包含头文件。初始化连接。设置连接参数。执行查询。检索查询结果。逐行处理结果。关闭连接。如何在 C 语言中连接到 MySQL在 C 语言中连接到 MySQL 需要使
c语言怎么连接到mysql
2024-05-21

MyBatis怎么处理数据库连接异常

MyBatis处理数据库连接异常的方式主要有以下几种:使用异常处理器:在MyBatis中可以通过实现org.apache.ibatis.exceptions.ExceptionHandler接口来处理数据库连接异常。通过实现该接口,可以自定
MyBatis怎么处理数据库连接异常
2024-03-08

怎么将阿里云连接数据库

简介在现代应用开发中,数据库是存储和管理数据的重要组成部分。阿里云作为云计算领域的领导者之一,提供了丰富的数据库服务,包括关系型数据库(RDS)、NoSQL数据库(MongoDB、Redis等)等。本文将介绍如何将阿里云上的数据库连接到应用程序,以便实现数据的读写操作。连接数据库的步骤步骤一:选择合适的数据库服务阿里云
怎么将阿里云连接数据库
2024-01-19

navicat怎样连接到local

通过 navicat 连接本地数据库的步骤:打开 navicat,创建新连接。选择数据库类型(例如,mysql)。输入连接信息(主机名、端口、用户名、密码)。(可选)配置高级选项(例如,自动重新连接)。测试连接是否成功。保存连接配置。如何使
navicat怎样连接到local
2024-04-23

怎么连接到云服务器上

如果您正在使用云计算服务(如AmazonWebServices或GoogleCloud),连接到云服务器上需要使用OpenStack命令。以下是一些使用OpenStack命令连接云服务器的常用方法:打开命令提示符窗口:使用以下命令:openstack.sh连接云服务器:connectedtothecloudservertotheserver.查看openstackst
2023-10-26

mybatis的动态SQL及连接池怎么配置

今天小编给大家分享一下mybatis的动态SQL及连接池怎么配置的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。mybatis
2023-06-29

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录