大金仓数据库:kingbase学习

2023-11-29 04:20

本文主要是介绍大金仓数据库: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注意点

这篇关于大金仓数据库:kingbase学习的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/431418

相关文章

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA

Ubuntu中远程连接Mysql数据库的详细图文教程

《Ubuntu中远程连接Mysql数据库的详细图文教程》Ubuntu是一个以桌面应用为主的Linux发行版操作系统,这篇文章主要为大家详细介绍了Ubuntu中远程连接Mysql数据库的详细图文教程,有... 目录1、版本2、检查有没有mysql2.1 查询是否安装了Mysql包2.2 查看Mysql版本2.

Oracle数据库常见字段类型大全以及超详细解析

《Oracle数据库常见字段类型大全以及超详细解析》在Oracle数据库中查询特定表的字段个数通常需要使用SQL语句来完成,:本文主要介绍Oracle数据库常见字段类型大全以及超详细解析,文中通过... 目录前言一、字符类型(Character)1、CHAR:定长字符数据类型2、VARCHAR2:变长字符数

Win11安装PostgreSQL数据库的两种方式详细步骤

《Win11安装PostgreSQL数据库的两种方式详细步骤》PostgreSQL是备受业界青睐的关系型数据库,尤其是在地理空间和移动领域,:本文主要介绍Win11安装PostgreSQL数据库的... 目录一、exe文件安装 (推荐)下载安装包1. 选择操作系统2. 跳转到EDB(PostgreSQL 的

SpringBoot实现数据库读写分离的3种方法小结

《SpringBoot实现数据库读写分离的3种方法小结》为了提高系统的读写性能和可用性,读写分离是一种经典的数据库架构模式,在SpringBoot应用中,有多种方式可以实现数据库读写分离,本文将介绍三... 目录一、数据库读写分离概述二、方案一:基于AbstractRoutingDataSource实现动态

C# WinForms存储过程操作数据库的实例讲解

《C#WinForms存储过程操作数据库的实例讲解》:本文主要介绍C#WinForms存储过程操作数据库的实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、存储过程基础二、C# 调用流程1. 数据库连接配置2. 执行存储过程(增删改)3. 查询数据三、事务处

mysql数据库重置表主键id的实现

《mysql数据库重置表主键id的实现》在我们的开发过程中,难免在做测试的时候会生成一些杂乱无章的SQL主键数据,本文主要介绍了mysql数据库重置表主键id的实现,具有一定的参考价值,感兴趣的可以了... 目录关键语法演示案例在我们的开发过程中,难免在做测试的时候会生成一些杂乱无章的SQL主键数据,当我们

Spring Boot 整合 MyBatis 连接数据库及常见问题

《SpringBoot整合MyBatis连接数据库及常见问题》MyBatis是一个优秀的持久层框架,支持定制化SQL、存储过程以及高级映射,下面详细介绍如何在SpringBoot项目中整合My... 目录一、基本配置1. 添加依赖2. 配置数据库连接二、项目结构三、核心组件实现(示例)1. 实体类2. Ma

查看Oracle数据库中UNDO表空间的使用情况(最新推荐)

《查看Oracle数据库中UNDO表空间的使用情况(最新推荐)》Oracle数据库中查看UNDO表空间使用情况的4种方法:DBA_TABLESPACES和DBA_DATA_FILES提供基本信息,V$... 目录1. 通过 DBjavascriptA_TABLESPACES 和 DBA_DATA_FILES

Java实现数据库图片上传与存储功能

《Java实现数据库图片上传与存储功能》在现代的Web开发中,上传图片并将其存储在数据库中是常见的需求之一,本文将介绍如何通过Java实现图片上传,存储到数据库的完整过程,希望对大家有所帮助... 目录1. 项目结构2. 数据库表设计3. 实现图片上传功能3.1 文件上传控制器3.2 图片上传服务4. 实现