Java-Clickhouse-Druid-jdbc-prometheus

Clickhouse

基础

概念:

背后的研发团队是俄罗斯的yandex公司,该公司是搜索引擎公司。
是关系数据库的一种,与传统的mysql不同采用行式存储不同,该数据库采用的是列式存储。

实操

windows + docker desktop 下载clickhouse

参考博客:https://blog.csdn.net/qubernet/article/details/121013960
在这里插入图片描述
存在问题1:

**命令出现问题:**
PASSWORD=$(base < /dev/urandom | head -c8); echo "testroot"; echo -n "123456" | sha256sum | tr -d '-'
需要通过apt-get下载 coreutils包 和 openssl包

**账号密码:**
testroot
8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92

testroot
8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92

两次运行的结果都一样。

最新处理数据:
quber
8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92

存在问题2:

问题描述:
按照参考博客配置,会出现:
std::exception. Code: 1001, type: std::out_of_range, e.what() = unordered_map::at: key not found (version 21.12.3.32 (official build))的问题
问题分析:
<quber>
	这是XML元素的根标签,代表正在配置的ClickHouse用户名称,即“quber”。
<password_sha256_hex>
	表示用户“quber”的密码经过SHA-256算法加密后得到此十六进制表示的哈希值;
<networks incl="networks" replace="replace">
	incl=“networks” :指示可能有其他地方定义了一组通用的网络规则(如在父级配置或外部文件中),这里将包括(include)那些通用规则;
	replace=“replace”:表示即使有通用规则存在,也应该完全替换(replace)为这里指定的网络规则,即只允许来自::/0的所有IPv6地址的连接。
<ip>::/0</ip>
	指定了一个IPv6 CIDR块,::/0相当于IPv6中的“任意地址”,意味着用户可以从任何IPv6网络访问ClickHouse服务器。
<profile>quber</profile>
	profile 指定了用户将使用的权限配置文件或访问控制配置文件的名称;
	用户“quber”关联到同名的“quber”访问控制配置文件。
	配置成quber不能实现访问,是否是quber的配置文件存在问题?待考证;
<quota>quber</quota>
	quota 指定了用户将遵循的配额规则;
	quber 同样表示用户将使用同名的配额配置文件;配额文件定义了该用户在资源使用方面的限制,如查询速率、磁盘空间使用量、内存使用量等,用于控制单个用户或用户组对系统资源的消耗。
	配置成quber不能正常访问,是否不存在同名的配额配置文件?待考证;

想要配置成功,直接将profile和quota都配置成default即可。

存在问题3

描述:
	vscode中采用SQLTools Clickhouse 插件,访问clickhouse数据库;
	show databases; 命令可以使用
	use xx数据库; 命令不可行,会报错;
		scode使用 clickhouse插件 执行show databases 可以正常运行。但执行命令use xxx数据库 出现There is no session or session context has expired. 问题,给出具体原因以及解决方案
	select * from 表1;  命令可以执行
分析:
	具体原因未知。

存在问题4

描述:
	多源数据库加载异常;
参考:
	https://cloud.tencent.com/developer/article/2000075

springboot项目配置clickhouse

参考博客1:https://blog.csdn.net/csdn_xpw/article/details/121981940 待验证;

描述:
	springboot项目+clickhouse配置信息,仅通过配置application.properties文件配置,数据库不能实现访问;
	需要创建一个类A具有clickhouse涉及变量,然后被@ConfigurationProperties修饰;
	由于配置了链接池druid,则需要创建一个配置类B,将A作为属性创建到B类中,然后创建返回DruidDataSource对象的方法。
分析:
	原因在于:Properties中配置了druid连接池,但是在代码中没有配置。

Jdbc

参考博客:
https://blog.csdn.net/m0_37761437/article/details/110468944

基础

概述

定义:
	全称:Java DataBase ConnectivityJava 语言连接数据库);
	是sun公司制定的接口,在java.sql.*包下;
	每个数据库底层实现原理不同,定义统一的接口,不同数据库厂商编写各自的实现类,有利于开发者使用;
	其中各数据库厂商的驱动中含有JDBC的实现类,即都在各自的jar包里,使用时需要进行下载;
	驱动 = jar包 ==》 含有JDBC实现类;

可以参考这个视频后续学习:
https://www.bilibili.com/video/BV1Uf4y1X7LK?p=27&spm_id_from=pageDriver&vd_source=c901ae3ff497a02016ba7bada52b2e3b

JDBC编程六步走

1 注册驱动
	告诉Java程序,要连接的是哪个品牌的数据库
2 获取连接
	表示JVM的进程和数据库进程之间的通道打开了
3 获取数据库操作对象
	执行sql语句的对象
4 执行sql语句
	DQL DML
5 处理查询结果集
	只有4执行的是select,才有5
6 释放资源
	java和数据库属于进程间的通信,开启之后一定要关闭

jdbcTemplate

配置

public JdbcTemplate jdbcTemplate(@Autowired DataSource dataSource) {
        return new JdbcTemplate(dataSource);
    }
// 为了创建一个可以用来执行数据库操作的JdbcTemplate实例,同时避免了手动管理数据库连接的繁琐过程;
// @Autowired注解通常直接应用于字段或者构造器参数上,但是这里是在方法参数上使用,这表明Spring框架将会自动调用此方法,并将DataSource类型的Bean注入到方法中。然后,此方法将返回一个使用该DataSource实例化的JdbcTemplate对象。

使用

jdbcTemplate使用1:

jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {
     @Override
     public void setValues(PreparedStatement ps, int i)
             throws SQLException {
         ps.setInt(1, keys.get(i).getId());
         ps.setString(2, keys.get(i).getLzKey());
         ps.setInt(3, keys.get(i).getOriginIndex());
         ps.setLong(4, keys.get(i).getCreateTime());
     }

     @Override
     public int getBatchSize() {
         return keys.size();
     }
 });

// 理解:
jdbcTemplate.batchUpdate(sql,...) --》 执行批量更新操作;
new BatchPreparedStatementSetter() { ... } --》 匿名内部类,实现这个接口,重写两个方法;

jdcbTemplate使用2:

List<LzKey> results = jdbcTemplate.query(sql, args,new RowMapperResultSetExtractor<>(LZ_KEY_MAPPER, 1));
// 理解:
jdbcTemplate.query(sql, args,...) --》 执行sql查询操作返回结果集;
	sql = 查询语句的字符串;
	args = 数组,即sql中的占位符;
	参数3 = 如何处理查询的结果;
new RowMapperResultSetExtractor<>(LZ_KEY_MAPPER, 1)
	是一个匿名内部类,继承RowMapperResultSetExtractor类,该类实现了ResultSetExtractor接口;
	将ResultSet映射到java对象列表中;
	参数1:一个RowMapper实例,将ResultSet中的一行映射到一个LzKey对象;
	参数2:指定预期的行数,意味着结果集中最多只有一行数据;

jdbcTemplate使用3:

jdbcTemplate.queryForObject(sql, Integer.class);
// 理解:
用于执行sql的一个查询语句,并将结果映射为一个单一对象,且对象的类型是Integer

Druid

基础

数据库连接池

技术背景:
	最初程序要想操作数据库,需要向系统底层获取一个连接,然后再访问数据库,使用完成之后,关闭连接;
连接池:
	创建一个容器存放连接对象,程序每次使用连接对象去访问数据库,使用结束之后,再放回来;
定义:
	一个容器(集合),存放数据库连接的容器;
	当系统初始化结束后,容器被创建,容器中会申请一些连接对象,用户访问数据库时,从容器中获取连接对象,访问结束后,将连接对象归还给容器;
好处:
	节约资源;用户访访问高效
实现:
	标准接口DataSource javax.sql包下,方法:
		获取连接getConnection()
		归还连接,如果连接对象Connection是从连接池中获取的,那么调用Connection.close(),则就表示归还连接;
		一般不去实现,有数据库厂商来实现,有C3P0和Druid(阿里巴巴提供的)。

基础概念

定义:
	目前最好的数据库连接池;本质是对DataSource接口的一种实现;
功能:
	数据库连接池的支持;
	性能高效;
	有完整的监控;
	针对SQL、Spring、WEB应用、Session等有良好的监控,还提供SQL防火墙功能(DELETE FROM 表名称);

在这里插入图片描述
在这里插入图片描述

使用过程

导入jar包:现有项目所见依赖:
	<dependency>
	         <groupId>com.alibaba</groupId>
	         <artifactId>druid-spring-boot-starter</artifactId>
	         <version>1.2.8</version>
	</dependency>
定义配置文件:
	properties以及yml类型;
获取数据库连接池对象:
	通过工厂来获取 DruiDataSourceFactory ;
	直接通过new DruidDataSource创建对象;(现有项目通过该方法实现)
获取连接:
	通过getConnection

JDBC实现

采用工具类的形式,完成数据库连接池的创建以及使用;
在这里插入图片描述
在这里插入图片描述
关闭连接会涉及到方法重载,执行DML需要Statement和connection,执行DQL需要ResultSet、Statement和connection;
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
测试工具类:
在这里插入图片描述
在这里插入图片描述

MyBatis实现

实战

Spring JPA

prometheus

基础

作用:
	Prometheus 来监控应用,并利用 Grafana 根据指标生成图表,以提高软件的可观察性。

参考:https://springdoc.cn/spring-boot-prometheus/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值