开源数据库 | 记一次在麒麟操作系统上适配openGauss进阶之旅

news2024/11/16 9:23:07

引入

适配 | 认证-Kylin V10 ARM 麒麟操作系统+openGauss数据库

开篇

1、数据库架构

百度百科:openGauss 是一款全面友好开放,携手伙伴共同打造的企业级开源关系型数据库。openGauss采用木兰宽松许可证v2发行,提供面向多核架构的极致性能、全链路的业务、数据安全、基于AI的调优和高效运维的能力。openGauss深度融合华为在数据库领域多年的研发经验,结合企业级场景需求,持续构建竞争力特性。同时,openGauss也是一个开源、免费的数据库平台,鼓励社区贡献、合作。

2、核心特性

  • 高性能

  • 提供了面向多核架构的并发控制技术结合鲲鹏硬件优化,在两路鲲鹏下TPCC Benchmark达成性能150万tpmc。

  • 针对当前硬件多核NUMA的架构趋势,在内核关键结构上采用了Numa-Aware的数据结构。

  • 提供Sql-bypass智能快速引擎技术。

  • 针对频繁更新场景,提供Ustore存储引擎。

  • 高可用

  • 支持主备同步,异步以及级联备机多种部署模式。

  • 数据页CRC校验,损坏数据页通过备机自动修复。

  • 备机并行恢复,10秒内可升主提供服务。

  • 提供基于Paxos分布式一致性协议的日志复制及选主框架。

  • 高安全

支持全密态计算,访问控制、加密认证、数据库审计、动态数据脱敏等安全特性,提供全方位端到端的数据安全保护。

  • 易运维

  • 基于AI的智能参数调优和索引推荐,提供AI自动参数推荐。

  • 慢SQL诊断,多维性能自监控视图,实时掌控系统的性能表现。

  • 提供在线自学习的SQL时间预测。

  • 全开放

  • 采用木兰宽松许可证协议,允许对代码自由修改,使用,引用。

  • 提供伙伴认证,培训体系和高校课程。

随着信息技术创新-国产化进程的加速,鼓励大家一起参与到国产化数据库适配的进程中来,为国产化操作系统+国产化数据库社区生态建设贡献一份力量><

写在前面的话,每一篇摘文都以实际案例场景出发,抽出空余时间记录每一次mark历程,在不一样的业务实际场景下,针对项目阶段所产生的变化,制定不一样的技术方案。不论多么渺小的技术方案,放在其对应的场景下都有着不一样的意义。实践是检验真理的唯一标准,当真正实操过后参与讨论,或许会让你有一点新发现,希望对读者在思考上有点不一样的IDea,欢迎Join谁与说,热衷拥抱新知识,旨在技术交流+心得分享->每天译点晓知识。

资讯

继鸿蒙之后,基于openEuler操作系统正式推出,鲲鹏计算生态迅速发展起来,鲲鹏920系列服务器CPU,鲲鹏920处理器兼容ARM架构,在性能、吞吐方面都有创新突破,支持国产-计算推向新高度,不仅CPU,操作系统配套欧拉openEuler,麒麟Kylin V10,鸿蒙就在我们身边。

这里,我们来记录一次在国产操作系统-麒麟上如何部署openGauss数据库?

实战

本文,小编主要以信息技术创新认证->数据库openGauss为例->常见问答Q-A的方式阐述:

1、版本选取

2、安装部署

首先,获取麒麟相关环境信息,

注:麒麟操作系统及安装,远程终端连接可参考之前提供的FAQ手册,本文不重点阐述。)

接着,通过类似终端XshellXftp工具连接主机

创建软件包文件夹并授权,

mkdir -p /home/soft

创建当前部署路径并授权,

mkdir /home/opengauss

查询当前硬件环境-ARM架构服务器,

lscpu

查询当前操作系统信息,

cat /etc/os-release

进入软件安装包文件路径,下载openGauss安装包(根据实际需要,选择不同的版本:opengauss 1 || opengauss2 || opengauss3)

cd /home/soft

注:不同的操作系统及其搭载的硬件环境x86、arm架构需要特别留意一下,比如:在Kylin操作系统x86架构下执行aarch64这类包会报“无非执行二进制文件,可执行文件格式错误”!)

查询当前硬件环境-为x86架构服务器,执行aarch64包…

接下来,进入当前部署路径,解压openGauss安装包,

cd /home/opengauss

image.png

查看python版本,opengauss目录,

image.png

:本文这里是已经装好环境了的,我们在初始化openGauss安装环境+python环境前,可提前查阅,更多请参考openGauss官方摘文)

其中,配置文件维护,可以通过Xshell或Xftp工具去创建VS修改,

在script文件夹下创建clusterconfig.xml文件,

vi script/clusterconfig.xml
<?xml version="1.0" encoding="UTF-8"?>
<ROOT>
    <!-- openGauss信息 -->
    <CLUSTER>
        <PARAM name="clusterName" value="opengauss_cluster" />
        <PARAM name="nodeNames" value="opengauss_node1" />
        <PARAM name="backIp1s" value="ip"/>
        <PARAM name="gaussdbAppPath" value="/home/opengauss/install/app" />
        <PARAM name="gaussdbLogPath" value="/var/log/omm" />
        <PARAM name="tmpMppdbPath" value="/home/opengauss/tmp" />
        <PARAM name="gaussdbToolPath" value="/home/opengauss/install/om" />
        <PARAM name="corePath" value="/home/opengauss/corefile" />
        <!-- openGauss 类型簇类型。该参数是可选的。single-inst表示一个主节点多个备节点的独立集群。-->
        <PARAM name="clusterType" value="single-inst"/>
    </CLUSTER>
    <DEVICELIST>
        <!-- opengauss_node1节点信息 -->
        <DEVICE sn="1000001">
             <!-- 主机名。-->
            <PARAM name="name" value="opengauss_node1"/>
             <!-- AZ 名称。该值为字符串,不能包含特殊字符,例如AZ1、AZ2、AZ3。-->
            <PARAM name="azName" value="AZ1"/>
             <!-- AZ优先。-->
            <PARAM name="azPriority" value="1"/>
            <!-- 如果服务器只有一个网卡可用,将backIP1和sshIP1配置成同一个IP。后端存储网络中主机的内网IP地址,所有的 openGauss 主机都在这个网络上相互通信。-->
            <PARAM name="backIp1" value="ip"/>
             <!-- SSH可靠通道的外部IP地址。如果没有使用外部网络,您可以将其留空或将其设置为backIp1的值。-->
            <PARAM name="sshIp1" value="ip"/>
            
             <!--dbnode1-->
             <!-- 当前主机上要部署的数据库节点数。-->
             <PARAM name="dataNum" value="1"/>
             <!-- 数据库节点的基本端口号。默认值为40000。-->
             <PARAM name="dataPortBase" value="15400"/>
             <!-- 当前主机上存储数据库节点数据的目录。它是一个数据存储目录,应该在数据盘上。-->
             <PARAM name="dataNode1" value="/home/opengauss/install/data/db1"/>
             <!-- 当前集群中同步模式的节点数。该参数是可选的。取值范围为 0 到备用数据库节点数。-->
             <PARAM name="dataNode1_syncNum" value="0"/>
        </DEVICE>
    </DEVICELIST>
</ROOT>

接下来,就是初始化安装环境:执行gs_preinstall,

./gs_preinstall -U omm -G dbgrp -X /home/opengauss/script/clusterconfig.xml

检查预安装环境gs_checkos,执行gs_install,按提示步骤去执行即可,待安装完成后,查看状态

gs_om -t status --detail

测试数据库连接是否正常

gsql -d postgres -p port

启动/停止服务

gs_om -t stop 

gs_om -t start

卸载服务

执行gs_uninstall 
卸载集群
su - omm
gs_uninstall --delete-data
本地卸载
gs_uninstall --delete-data -L

3、适配改造

接下来,那如何在我们项目工程中去替换传统数据库Oracle/MySql/SqlServer,实现国产化数据库平滑替代?

// 驱动-连接地址-账号-密码等信息
String driverClassName = "org.postgresql.Driver";
String url = "jdbc:postgresql://ip:port/postgres";
String username = "user";
String password = "pwd";
// 加载驱动
Class.forName(driverClassName);
// 获取数据库连接对象
Connection con = (Connection) DriverManager.getConnection(url,username,password);
// 获取数据库操作对象
PreparesStatement ps = con.preparesStatement("SELECT COUNT(*) FROM TEST;");
// 执行sql
ResultSet rs= ps.executeQuery();
// 这里还可以获取到数据库产品名称
DatabaseMetaData metaData = (DatabaseMetaData) con.getMetaData();
// 这里为国产数据库-适配,在xml指定国产数据库的databaseId奠定基础
System.out.println("数据库产品名称:" + metaData.getDatabaseProductName());
最后需关闭连接close,释放资源->rs-ps-con. 

tk.mybatis:mybatis定制的第一大业务增强库,或mybatis-plus,可根据实际业务场景择优选取控件。

pagehelper:分页控件,mybatis定制的第二大业务增强库。

总结

从全面适配工作改造下来,这也确实给了DBA以及研发人员对数据库SQL方言语句书写的一些约束规范

若是通过Mysql或Oracle或SqlServer迁移导入至openGauss。在数据迁移的时候,报某些字段超长,则需要查看源数据库中那些字段的类型及长度,这里应该是迁移有些字段,须在目标数据库中增加位宽

比如:在MySql中varchar是表示字符,varchar(50)表示可以存放50个字符,而Oracle中varchar(50)表示50个字节。这就意味着,50个字节,如果存中文,在utf-8的字符集下,只能存最多16个。所以,从源数据库到目标数据库中,varchar类型,需特别留意一下。

在实际项目工程中,研发尽量通用型写法。若是对于有些BI业务,其中,SQL写法较为复杂,不同数据库厂商方言不兼容,则可以基于Mybatis插件的思想,根据当前数据库databaseId,拦截SQL语句,加入各自数据库的SQL方言函数兼容,无需多套数据库XML中SQL写法,支持插拔式-需要时开启。

其中,分页的SQL拼装原理,对于不同的数据库可加入其对应的转换器,

protected BoundSql getPageBoundSql(Object parameterObject) {
    String tempSql = sql;
    String orderBy = PageHelper.getOrderBy();
    if (orderBy != null) {
        tempSql = OrderByParser.converToOrderBySql(sql, orderBy);
    }
    tempSql = localParser.get().getPageSql(tempSql);
    return new BoundSql(configuration, tempSql, localParser.get().getPageParameterMapping(configuration, original.getBoundSql(parameterObject)), parameterObject);
}

出现厂商中SQL方言函数也覆盖不全的话,则可以@厂商提供,或者通过通用ORM组件的方式去改造SQL,

多数据库连接工具,可选Tool->DBeaver,

:欢迎童鞋私信留言,由于时间等原因,阐述不一定俱全,对于国产化这块,搜索可用资源较少,希望对各位读者,在适配鲲鹏,国产操作系统-麒麟,欧拉操作系统以及国产化数据库过程中能够有所帮助,将不断完善技术手册-共享,涵盖统信、国产化操作系统、国产化数据库达梦、金仓、海量、openGauss、东方通中间件FAQ安装指导手册)

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

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

相关文章

linux安装nginx遇到的报错

1、Linux如何修改只读文件&#xff08;以设置自动连网为例&#xff09; vim /etc/sysconfig/network-scripts/ifcfg-ens33 然后提示 E45&#xff1a;已设定选项“readonly”&#xff08;请加&#xff01;强制执行&#xff09; 如果需要强制修改&#xff0c;可以使用&#xff0…

关于idea如何成功运行web项目

导入项目 如图 依次选择 file - new - Project from Existing Sources 选择存放的项目目录地址 如图 导入完成 点击ok 如图 依次选择 Create project from existing sources 点击next如图 &#xff0c;此处默认即可 点击 next如图 点击next有该提示 是因为之前导入过…

抖音seo源码开发源代码开发技术分享

一、 抖音SEO源码开发&#xff0c;需要掌握以下技术&#xff1a; 抖音API接口&#xff1a;抖音提供了丰富的API接口&#xff0c;包括用户信息、视频信息、评论信息等。 数据爬取技术&#xff1a;通过抓包分析抖音接口的数据结构&#xff0c;可以使用Python等编程语言编写爬虫程…

Elasticsearch Query DSL

Elasticsearch Query DSL 这里使用的 Elasticsearch 的版本为 7.12.1。 1、基本概念 1.1 文档(Document) ElasticSearch 是面向文档的&#xff0c;文档是所有可搜索数据的最小单位&#xff0c;例如 MySQL 的一条数据记录。 文档会被序列化成为 json 格式&#xff0c;保存在…

B076-项目实战--宠物上下架 展示 领养 收购订单

目录 上下架功能提供后台宠物列表实现 前台展示前台宠物列表和详情展示店铺展示 领养分析前台后端PetControllerPetServiceImpl 订单需求分析可能产生订单的模块订单模块额外功能 订单设计表设计流程设计 集成基础代码收购订单创建订单前端后端 上下架功能提供 后台宠物列表实…

生成虚拟淘宝购买记录截图图片制作

大家都知道&#xff0c;淘宝购买记录截图在某些情况下非常重要&#xff0c;但手动制作却非常繁琐&#xff0c;耗费时间和精力。如果你也遇到了这个问题&#xff0c;那么不妨试试淘宝订单生成器&#xff0c;它能够帮助你轻松生成淘宝购买记录截图&#xff0c;提升工作效率。 虚拟…

Docker 容器高级操作

Docker容器高级操作 Docker容器创建、停止、启动、删除等基础操作上篇已述,然Docker容器被广大开发者青睐,不可能只有如此简单的功能,必有高阶功法。那么接下来 让我们一同走进容器操作的高级篇,领略其高级操作的魅力。 查看容器 docker ps -a | grep tomcat [root@tudou…

【数据结构】实验十:哈夫曼编码

实验十 哈夫曼编码 一、实验目的与要求 1&#xff09;掌握树、森林与二叉树的转换&#xff1b; 2&#xff09;掌握哈夫曼树和哈夫曼编码算法的实现&#xff1b; 二、 实验内容 1. 请编程实现如图所示的树转化为二叉树。 2. 编程实现一个哈夫曼编码系统&#xff0c;系统功能…

PingCAP 陈煜琦:深耕中国市场,构建客户成功生态

在 PingCAP 用户峰会 2023 上&#xff0c;PingCAP 副总裁陈煜琦分享了“激流入海&#xff0c;PingCAP 中国业务发展策略”的演讲&#xff0c;介绍了 PingCAP 在技术层面的发展方向&#xff0c;强调了 PingCAP 服务于中国企业客户的重要性&#xff0c;并介绍了 PingCAP 助力 客户…

Pytest学习教程_基础知识(一)

前言 pytest是一个用于编写和执行Python单元测试的框架。它提供了丰富的功能和灵活性&#xff0c;使得编写和运行测试变得简单而高效。 pytest的一些主要特点和解释如下&#xff1a; 自动发现测试&#xff1a;pytest会自动查找以"test_"开头的文件、类和函数&#x…

TEE GP(Global Platform)功能认证方案

TEE之GP(Global Platform)认证汇总 一、功能认证介绍 二、功能认证测试套和测试工具 1、“测试套件”是指由GlobalPlatform测试文档、测试脚本和/或其他材料组成的套件&#xff0c;基于给定的GlobalPlatform规范和相关配置&#xff0c;由GlobalPlatform发布&#xff0c;目的是…

【C++】类和对象-对象特性

1.构造函数和析构函数 2.函数的分类以及调用 以后采用括号法 int main() { /******************************************///test01();//test02();Person p;/******************************************/system("pause");return 0; }&#xff08;1&#xff09…

行业追踪,2023-07-27

自动复盘 2023-07-27 凡所有相&#xff0c;皆是虚妄。若见诸相非相&#xff0c;即见如来。 k 线图是最好的老师&#xff0c;每天持续发布板块的rps排名&#xff0c;追踪板块&#xff0c;板块来开仓&#xff0c;板块去清仓&#xff0c;丢弃自以为是的想法&#xff0c;板块去留让…

linux系统下(centos7.9)安装Jenkins全流程

一、卸载历史版本 # rpm卸载 rpm -e jenkins# 检查是否卸载成功 rpm -ql jenkins# 彻底删除残留文件 find / -iname jenkins | xargs -n 1000 rm -rf二、环境依赖安装 yum -y install epel-releaseyum -y install daemonize三、安装Jenkins Jenkins官网传送带&#xff1a; …

【bar堆叠图形绘制】

绘制条形图示例 在数据可视化中&#xff0c;条形图是一种常用的图表类型&#xff0c;用于比较不同类别的数据值。Python的matplotlib库为我们提供了方便易用的功能来绘制条形图。 1. 基本条形图 首先&#xff0c;我们展示如何绘制基本的条形图。假设我们有一个包含十个类别的…

【数据结构】实验四:循环链表

实验四 循环链表 一、实验目的与要求 1&#xff09;熟悉循环链表的类型定义和基本操作&#xff1b; 2&#xff09;灵活应用循环链表解决具体应用问题。 二、实验内容 题目一&#xff1a;有n个小孩围成一圈&#xff0c;给他们从1开始依次编号&#xff0c;从编号为1的小孩开…

写给新手的单元测试框架unittest运行的简单问题

当使用unittest框架编写和运行单元测试时&#xff0c;需要遵循以下步骤&#xff1a; 1、导入unittest模块&#xff1a;在代码中首先导入unittest模块。 import unittest 2、创建测试类&#xff1a;创建一个继承自unittest.TestCase的测试类。该类将包含一系列测试方法。 cla…

#P1006. [NOIP2010普及组] 三国游戏

题目描述 小涵很喜欢电脑游戏&#xff0c;这些天他正在玩一个叫做《三国》的游戏。 在游戏中&#xff0c;小涵和计算机各执一方&#xff0c;组建各自的军队进行对战。游戏中共有 NN 位武将&#xff08;NN为偶数且不小于44&#xff09;&#xff0c;任意两个武将之间有一个“默…

什么是低代码开发平台?它可以实现哪些功能?

什么是低代码开发平台&#xff1f; 低代码来源于英文“Low Code&#xff0c;它意指一种快速开发的方式&#xff0c;使用最少的代码、以最快的速度来交付应用程序。通俗的来说&#xff0c;就是所需代码数量低&#xff0c;开发人员门槛低&#xff0c;操作难度低。一般采用简单的…

模拟实现二叉搜索树

1、TreeSet和TreeMap插入元素时一定要比较大小&#xff0c;因为其底层是红黑树&#xff08;由二叉搜索树调整形成&#xff09;。 2、删除二叉搜索树的目标节点时有三种情况&#xff1a; &#xff08;1&#xff09;cur.leftnull ①cur是root&#xff0c;则rootcur.right ②cur不…