大金仓数据库:kingbase学习

kingbase学习

  • 1.简介
  • 2. 安装
  • 3. 基础使用
    • 3.1 客户端连接
    • 3.2 表数据测试
      • 3.2.1 建表
        • 创建字段备注
      • 3.2.2 数据写入测试
      • 3.2.2 json测试
        • 3.2.2.1 json查询测试
        • 3.2.2.2 json修改测试
        • 3.2.2.3 json数据迁移测试
  • 4.springboot实战
    • 4.1 maven依赖
    • 4.2 连接配置
    • 4.3 mybatis-plus测试
    • 4.4 liquibase整合
      • (1). 使用pg方式替换kingbase驱动上面
      • (2). 修改jdbc url配置
  • 参考文档

1.简介

官网: https://www.kingbase.com.cn/

2. 安装

TODO 补充 docker安装

3. 基础使用

3.1 客户端连接

使用idea自带database查询

3.2 表数据测试

3.2.1 建表

创建从10000开启自增id的用户表,username增加唯一索引

CREATE TABLE account(id          BIGINT      NOT NULL GENERATED BY DEFAULT AS IDENTITY (START WITH 10000),username    VARCHAR(32) NOT NULL,password    VARCHAR(32)  DEFAULT NULL,name        VARCHAR(20)  DEFAULT NULL,sex         CHAR(1)      DEFAULT NULL,phone       VARCHAR(100) DEFAULT NULL,email       VARCHAR(100) DEFAULT NULL,create_time TIMESTAMP    DEFAULT NULL,update_time TIMESTAMP    DEFAULT NULL,extend_json JSON         DEFAULT NULL,PRIMARY KEY (id),UNIQUE (username)
);
创建字段备注

TODO

3.2.2 数据写入测试

-- 插入第一行数据
INSERT INTO account (username, password, name, sex, phone, email, create_time, update_time, extend_json)
VALUES ('user1', 'pass1', 'John Doe', 'M', '123456789', 'user1@example.com', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, '{"key": "value1"}');-- 插入第二行数据
INSERT INTO account (username, password, name, sex, phone, email, create_time, update_time, extend_json)
VALUES ('user2', 'pass2', 'Jane Doe', 'F', '987654321', 'user2@example.com', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, '{"key": "value2"}');-- 插入第三行数据
INSERT INTO account (username, password, name, sex, phone, email, create_time, update_time, extend_json)
VALUES ('user3', 'pass3', 'Bob Smith', 'M', '555555555', 'user3@example.com', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, '{"key": "value3"}');INSERT INTO account (username, password, name, sex, phone, email, create_time, update_time, extend_json)
VALUES
('user4', 'pass1', 'John Doe', 'M', '123456789', 'user1@example.com', '2022-01-01 10:00:00', '2022-01-01 10:00:00', '{"key": "value1"}'),
('user5', 'pass2', 'Jane Doe', 'F', '987654321', 'user2@example.com', '2022-01-01 11:00:00', '2022-01-01 11:00:00', '{"key": "value2"}'),
('user6', 'pass3', 'Bob Smith', 'M', '555555555', 'user3@example.com', '2022-01-01 12:00:00', '2022-01-01 12:00:00', '{"key": "value3"}');

3.2.2 json测试

3.2.2.1 json查询测试

json指定key查询

SELECT * FROM account WHERE extend_json ->> 'address' LIKE '%吕街28号%';SELECT * FROM account WHERE extend_json ->> 'address' = 'Suite 231 吕街28号, 包头, 藏 351579';

查询性能对比(100万数据)

在这里插入图片描述

  • like查询性能结果
数据库名json like SQL 查询内容耗时 (毫秒)
kingbaseSELECT * FROM account_b WHERE extend_json ->> ‘address’ LIKE ‘%吕街28号%’598
oracleSELECT * FROM ACCOUNT a WHERE JSON_VALUE(extend_json, ‘$.address’) LIKE ‘%吕街28号%’1412
mysqlSELECT * FROM account WHERE extend_json -> ‘$.address’ LIKE ‘%吕街28号%’1947
openGaussSELECT * FROM account_b WHERE extend_json ->> ‘address’ LIKE ‘%吕街28号%’1952
dmSELECT * FROM ACCOUNT a WHERE JSON_VALUE(extend_json, ‘$.address’) LIKE ‘%吕街28号%’4196
  • 精确查询性能结果
数据库名json equals SQL 查询内容耗时 (毫秒)
kingbaseSELECT * FROM account_b WHERE extend_json ->> ‘address’ = ‘Suite 231 吕街28号, 包头, 藏 351579’554
oracleSELECT * FROM ACCOUNT a WHERE JSON_VALUE(extend_json, ‘$.address’) = ‘Suite 231 吕街28号, 包头, 藏 351579’1198
mysqlSELECT * FROM account WHERE extend_json -> ‘$.address’ = ‘Suite 231 吕街28号, 包头, 藏 351579’1326
openGaussSELECT * FROM account_b WHERE extend_json ->> ‘address’ = ‘Suite 231 吕街28号, 包头, 藏 351579’1584
dmSELECT * FROM ACCOUNT a WHERE JSON_VALUE(extend_json, ‘$.address’) = ‘Suite 231 吕街28号, 包头, 藏 351579’3992
3.2.2.2 json修改测试

测试json内部数据操作便利性: 如删除指定key,增加写入指定key, 从其他数据列提取指定数据

-- json字段中的删除指定key
update account_b set extend_json = extend_json::jsonb - 'newKey' where id = 10000;
-- json字段中增加指定key并设置值--设置字符串
update account_b set extend_json = jsonb_set(extend_json, '{address}', '"hello"'::jsonb) where id = 10000;
-- json字段中增加指定key并设置值--设置设置数字
update account_b set extend_json = jsonb_set(extend_json, '{newInt}', '1000'::jsonb) where id = 10000;
-- json字段中增加指定key并且value值从其他列提取
update account_b set extend_json = jsonb_set(extend_json, '{email}', to_jsonb(email)) where id = 10000;
3.2.2.3 json数据迁移测试
-- 模拟增加一个列
ALTER TABLE account_b ADD address VARCHAR(500);
-- 新增列提取json字段中指定key的value
update account_b set account_b.address = extend_json ->> 'address';
-- 新增列提取json字段中指定key的value, 并且移除被提取的key
update account_b set address = extend_json ->> 'address', extend_json = extend_json::jsonb - 'address'
  • 提取效果
    在这里插入图片描述
  • 提取并清理效果
    在这里插入图片描述

4.springboot实战

使用依赖版本:

<spring-boot.version>2.3.2.RELEASE</spring-boot.version>

4.1 maven依赖

        <!--人大金仓数据库驱动--><dependency><groupId>cn.com.kingbase</groupId><artifactId>kingbase8</artifactId><version>8.6.0</version></dependency>

4.2 连接配置

application.yml补充kingbase连接

spring:datasource:driver-class-name: dm.jdbc.driver.DmDriverurl: jdbc:kingbase8://192.168.8.33:54321/testdbusername: systempassword: kingbase

4.3 mybatis-plus测试

TODO

4.4 liquibase整合

liquibase基本不支持国产数据库,但是kingbase借助切换pg的驱动可以间接实现
在这里插入图片描述

(1). 使用pg方式替换kingbase驱动上面

        <dependency><groupId>org.postgresql</groupId><artifactId>postgresql</artifactId><scope>runtime</scope></dependency>

(2). 修改jdbc url配置

spring:datasource:#driver-class-name: dm.jdbc.driver.DmDriver#url: jdbc:kingbase8://192.168.8.33:54321/testdbdriver-class-name: org.postgresql.Driverurl: jdbc:postgresql://192.168.8.33:54321/testdbusername: systempassword: kingbase

参考文档

  1. 官网文档:4. Liquibase注意点

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/179272.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

QTextEdit 是 Qt 框架中的一个小部件(Widget),用于显示和编辑多行文本内容

QTextEdit 是 Qt 框架中的一个小部件&#xff08;Widget&#xff09;&#xff0c;用于显示和编辑多行文本内容。 QTextEdit 提供了一个可编辑的文本区域&#xff0c;可以用于显示和编辑富文本或纯文本。它支持基本的文本格式设置&#xff08;如字体、颜色、样式等&#xff09;…

【AI认证笔记】NO.2人工智能的发展

目录 一、人工智能的发展里程碑 二、当前人工智能的发展特点 1.人工智能进入高速发展阶段 2.人工智能元年 三、人工智能高速发展的三大引擎 1.算法突破 2.算力飞跃 3.数据井喷 四、AI的机遇 五、AI人才的缺口 六、行业AI 人工智能算法&#xff0c;万物互联&#xff…

从家暴谈中国女性在社会中的艰难处境

1、引言 2023年8月17日&#xff0c;一部名叫《我经过风暴》的电影悄然上映&#xff0c;引发了我的诸多思考。我研究过很多类似的案例&#xff0c;例如2020年的“拉姆案”、2021年的“禹秀英案”、2022年的“西安家暴事件”、2023年的“重庆杀妻案”…等等。这一系列案件&#…

qInstallMessageHandler的学习

背景&#xff1a;需要做一个日志系统。 把信息重定向到txt文件中。 参考&#xff1a; QT 调试信息如何输出到文件&#xff08;qDebug/qWarning/qCritical/qFatal&#xff09;-CSDN博客 Qt 之 qInstallMessageHandler&#xff08;重定向至文件&#xff09;-CSDN博客 demo…

Python小技巧:探索函数调用为何加速代码执行

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com Python 作为一种解释型语言&#xff0c;其执行速度相对于编译型语言可能会较慢。然而&#xff0c;在Python中&#xff0c;通常观察到代码在函数中运行得更快的现象。这个现象主要是由于函数调用的内部优化和解释…

神器!使用 patchworklib 库进行多图排版真棒啊

如果想把多个图合并放在一个图里&#xff0c;如图&#xff0c;该如何实现 好在R语言 和 Python 都有对应的解决方案&#xff0c; 分别是patchwork包和patchworklib库。 推介1 我们打造了《100个超强算法模型》&#xff0c;特点&#xff1a;从0到1轻松学习&#xff0c;原理、…

整车测试中的UDS诊断

UDS&#xff08;Unified Diagnostic Services&#xff0c;统一的诊断服务&#xff09;诊断协议是在汽车电子ECU环境下的一种诊断通信协议。这种通信协议被用在几乎所有由OEM一级供应商所制造的新ECU上面。这些ECU控制车辆的各种功能&#xff0c;包括电控燃油喷射系统&#xff0…

Week-T11-优化器对比试验

文章目录 一、准备环境二、准备数据三、搭建训练网络三、训练模型&#xff08;1&#xff09;VSCode训练情况&#xff1a;&#xff08;2&#xff09;jupyter notebook训练情况&#xff1a; 四、模型评估 & 模型预测1、绘制Accuracy-Loss图2、显示model2的预测效果 五、总结1…

域名与服务器负载均衡技术学习总结

域名与服务器负载均衡技术学习总结_域名负载均衡-CSDN博客 OSI七层网络模型和TCP/IP四层网络模型的异同_七层模型和四层模型的区别-CSDN博客

C++类与对象(7)—友元、内部类、匿名对象、拷贝对象时编译器优化

目录 一、友元 1、定义 2、友元函数 3、友元类 二、内部类 1、定义 2、特性&#xff1a; 三、匿名对象 四、拷贝对象时的一些编译器优化 1、传值&传引用返回优化对比 2、匿名对象作为函数返回对象 3、接收返回值方式对比 总结&#xff1a; 一、友元 1、定义…

RPC之grpc重试策略

1、grpc重试策略 RPC 调用失败可以分为三种情况&#xff1a; 1、RPC 请求还没有离开客户端&#xff1b; 2、RPC 请求到达服务器&#xff0c;但是服务器的应用逻辑还没有处理该请求&#xff1b; 3、服务器应用逻辑开始处理请求&#xff0c;并且处理失败&#xff1b; 最后一种…

2020年3月2日 Go生态洞察:Go协议缓冲区的新API发布

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

如何轻松将 4K 转换为 1080p 高清视频

由于某些原因&#xff0c;你可能有一些 4K 视频&#xff0c;与1080p、1080i、720p、720i等高清视频相比&#xff0c;4K 视频具有更高的分辨率&#xff0c;可以给您带来更多的视觉和听觉享受。但是&#xff0c;播放4k 视频是不太容易的&#xff0c;因为超高清电视没有高清电视那…

ubuntu重启后下无wifi,蓝牙和飞行模式切换问题

问题&#xff1a; 打开ubuntu后发现wifi没了&#xff0c;图标也找不到&#xff0c;蓝牙打不开&#xff0c;而打开飞行模式后就可以打开蓝牙了&#xff0c;关闭蓝牙就自动打开了飞行模式&#xff0c;这都是什么奇奇怪怪的问题。然后就是重装wifi驱动&#xff0c;无效。之前我也…

线性表之栈

文章目录 主要内容一.栈1.栈的初始化、判空、进栈、出栈和栈顶元素操作代码如下&#xff08;示例&#xff09;: 2.共享栈3.栈的链式存储结构 总结 主要内容 栈 一.栈 栈是一种数据结构&#xff0c;它是一种只能在一端进行插入或删除操作的线性表。栈的特点是后进先出&#xf…

C#面向对象

过程类似函数只能执行没有返回值 函数不仅能执行&#xff0c;还可以返回结果 1、面向过程 a 把完成某一需求的所有步骤 从头到尾 逐步实现 b 根据开发需求&#xff0c;将某些 功能独立 的代码 封装 成一个又一个 函数 c 最后完成的代码就是顺序的调用不同的函数 特点 1、…

torch::和at:: factory function的差別

torch::和at:: factory function的差別 前言torch::autograd::THPVariable_randtorch::rand_symintat::rand_symintdemotorch命名空間at命名空間 前言 >>> import torch >>> a torch.rand(3, 4) >>> a.requires_grad False >>> a torch…

【问题系列】消费者与MQ连接断开问题解决方案(二)

1. 问题描述 当使用RabbitMQ作为中间件&#xff0c;而消费者为服务时&#xff0c;可能会出现以下情况&#xff1a;在长时间没有消息传递后&#xff0c;消费者与RabbitMQ之间出现连接断开&#xff0c;导致无法处理新消息。解决这一问题的方法是重启Python消费者服务&#xff0c;…

C# 模拟鼠标操作工具类

写在前面 用WinForm做RPA项目时经常需要模拟鼠标操作&#xff0c;通过调用Windows Api 可以实现控制鼠标的移动、点击以及滚轮滚动&#xff0c;做到跟人工一样的操作。 代码实现 public static class MouseKeyController{[DllImport("user32")]private static exte…

【前端】js 多个并行的Promise阻塞工具 指定同时执行数量

“多线程”Promise 工具类 vue that this 或者用 全局变量 map {count:0} //阻塞并获取额度 await WTool.Thread.sleepLimit(that, 变量名称, 500) await WTool.Thread.sleepLimit(map, count, 500) Thread:{/*** 阻塞x毫秒* 使用方法* await sleep&#xff08;5000&…