【Lustre相关】应用部署-02-Lustre软件源码编译

文章目录

    • 一、前言
    • 二、编译说明
      • 1、配置yum源
      • 2、升级内核
      • 3、安装依赖
      • 3、源码编译
    • 三、Q&A
      • 1、/usr/bin/ld: cannot find -lxxx
        • a、问题说明
        • b、原因分析
        • c、解决措施
      • 2、Deprecated feature: REMAKE_INITRD
        • a、问题说明
        • b、解决措施
      • 3、源码编译安装lustre-zfs软件包后,缺少osd-zfs内核模块
        • a、问题说明
        • b、原因分析
        • c、解决措施
      • 4、安装lustre-zfs-dkms软件包,编译过程中出现`No openssk-devel headers found`警告信息
        • a、问题说明
        • b、解决措施

一、前言

参考文档:
Building+Lustre+from+Source
Compiling_Lustre

本篇主要介绍Lustre软件源码编译相关过程,供以后参考使用

二、编译说明

OS:CentOS Linux release 7.9.2009 (Core)
Kernel:3.10.0-1160.el7.x86_64
lfs:2.12.9

1、配置yum源

  • 添加国内镜像yum源及epel源
yum install wget -y
mv /etc/yum.repos.d/ /etc/yum.repos.d-bak/
mkdir /etc/yum.repos.d/
wget http://mirrors.aliyun.com/repo/Centos-7.repo -P /etc/yum.repos.d/
wget http://mirrors.aliyun.com/repo/epel-7.repo -P /etc/yum.repos.d/
  • 添加lustre源
[root@node94 ~]# cat /etc/yum.repos.d/lustre.repo 
[lustre-server]
name=lustre-server
baseurl=https://downloads.whamcloud.com/public/lustre/lustre-2.12.9/el7.9.2009/server/
gpgcheck=0
enable=1
[root@node94 ~]# yum makecache

2、升级内核

  • 安装lustre内核版本
yum install kernel-3.10.0-1160.49.1.el7_lustre kernel-headers-3.10.0-1160.49.1.el7_lustre  -y
yum install kernel-debuginfo-common-x86_64-3.10.0-1160.49.1.el7_lustre kernel-devel-3.10.0-1160.49.1.el7_lustre  -y

注:需要安装对应内核版本kernel-develkernel-debuginfo-common软件包,否则编译ldiskfs相关包会失败

Disabling ldiskfs support because complete ext4 source does not exist.If you are building using kernel-devel packages and require ldiskfs
server support then ensure that the matching kernel-debuginfo-common
and kernel-debuginfo-common-<arch> packages are installed.

3、安装依赖

  • 下载源码包,安装对应依赖
yum -y groupinstall 'Development Tools'
yum install libyaml libyaml-devel libselinux-devel -y
yum install openssl-devel libselinux-devel -y
yum install libnvpair1 libuutil1 libzfs2 libzfs2-devel libzpool2 -y
yum install spl spl-debuginfo spl-dkms -y
yum install zfs zfs-debuginfo zfs-dkms zfs-test -y
  • 解决/usr/bin/ld: cannot find -lzfs/-lnvpair错误
ln -s /usr/lib64/libnvpair.so.1.0.1 /usr/lib64/libnvpair.so
ln -s /usr/lib64/libzfs.so.2.0.0 /usr/lib64/libzfs.so
echo "/usr/lib64/" >> /etc/ld.so.conf
ldconfig

3、源码编译

  • 下载源码包
wget https://downloads.whamcloud.com/public/lustre/lustre-2.12.9/el7.9.2009/server/SRPMS/lustre-2.12.9-1.src.rpm
rpm2cpio lustre-2.12.9-1.src.rpm |cpio -div
  • 解决zfs编译问题

解决dkms编译问题:Install-Lustre2.12.8-on-CentOS-7.9-2009

修改源码文件lustre-dkms_pre-build.sh,注释掉dkms status -m zfs -k $3 -a $5 | awk -F', ' '{print $2; exit 0}' | grep -v ': added$'获取zfs版本命令,修改为dkms status -m zfs -k $3 -a $5 | awk -F', ' '{print $1; exit 0}' | cut -f2 -d'/'| cut -f1 -d':',之后重新打包源码包,重新编译软件

[root@node96 ~]# tar -zxvf lustre-2.12.9.tar.gz
[root@node96 ~]# cat ./lustre-2.12.9/lustre-dkms_pre-build.sh | grep ZFS_VERSION=# ZFS_VERSION=$(dkms status -m zfs -k $3 -a $5 | awk -F', ' '{print $2; exit 0}' | grep -v ': added$')ZFS_VERSION=$(dkms status -m zfs -k $3 -a $5 | awk -F', ' '{print $1; exit 0}' | cut -f2 -d'/'| cut -f1 -d':')
[root@node96 ~]# tar -zcvf lustre-2.12.9.tar.gz lustre-2.12.9
  • 源码编译rpm包
cd lustre-2.12.9
sh ./autogen.sh
./configure 2>&1 | tee configure.log
make -j $(nproc) rpms 2>&1 | tee compile.log
  • 编译lustre-zfs-dkms软件包
cp ../lustre-2.12.9.tar.gz /root/rpmbuild/SOURCES/
rpmbuild -bb --with zfs lustre-dkms.spec
cp -ra  /root/rpmbuild/RPMS/noarch/lustre-zfs-dkms-2.12.9-1.el7.noarch.rpm ./
  • 编译成功后,会在当前目录下生成对应rpm包
Wrote: /tmp/rpmbuild-lustre-root-bHLH8tPT/RPMS/x86_64/lustre-2.12.9-1.el7.x86_64.rpm
Wrote: /tmp/rpmbuild-lustre-root-bHLH8tPT/RPMS/x86_64/kmod-lustre-2.12.9-1.el7.x86_64.rpm
Wrote: /tmp/rpmbuild-lustre-root-bHLH8tPT/RPMS/x86_64/kmod-lustre-osd-ldiskfs-2.12.9-1.el7.x86_64.rpm
Wrote: /tmp/rpmbuild-lustre-root-bHLH8tPT/RPMS/x86_64/lustre-osd-ldiskfs-mount-2.12.9-1.el7.x86_64.rpm
Wrote: /tmp/rpmbuild-lustre-root-bHLH8tPT/RPMS/x86_64/kmod-lustre-osd-zfs-2.12.9-1.el7.x86_64.rpm
Wrote: /tmp/rpmbuild-lustre-root-bHLH8tPT/RPMS/x86_64/lustre-osd-zfs-mount-2.12.9-1.el7.x86_64.rpm
Wrote: /tmp/rpmbuild-lustre-root-bHLH8tPT/RPMS/x86_64/lustre-resource-agents-2.12.9-1.el7.x86_64.rpm
Wrote: /tmp/rpmbuild-lustre-root-bHLH8tPT/RPMS/x86_64/lustre-tests-2.12.9-1.el7.x86_64.rpm
Wrote: /tmp/rpmbuild-lustre-root-bHLH8tPT/RPMS/x86_64/kmod-lustre-tests-2.12.9-1.el7.x86_64.rpm
Wrote: /tmp/rpmbuild-lustre-root-bHLH8tPT/RPMS/x86_64/lustre-iokit-2.12.9-1.el7.x86_64.rpm
Wrote: /tmp/rpmbuild-lustre-root-bHLH8tPT/RPMS/x86_64/lustre-debuginfo-2.12.9-1.el7.x86_64.rpmWrote: /root/rpmbuild/RPMS/noarch/lustre-zfs-dkms-2.12.9-1.el7.noarch.rpm
  • 使用kmod安装lustre zfs文件系统相关软件包(kmod-lustre-osd-zfs),安装失败出现ksym错误,改用dkms方式安装(使用rpm -Uvh安装lustre-osd-zfs-mountlustre-zfs-dkms软件包)
---> Package lustre-osd-zfs-mount.x86_64 0:2.12.9-1.el7 will be installed
--> Finished Dependency Resolution
Error: Package: kmod-lustre-osd-zfs-2.12.9-1.el7.x86_64 (/kmod-lustre-osd-zfs-2.12.9-1.el7.x86_64)Requires: ksym(sa_bulk_lookup) = 0xbcff886a

三、Q&A

1、/usr/bin/ld: cannot find -lxxx

a、问题说明

编译过程中出现/usr/bin/ld: cannot find -lxxx错误,相关提示信息如下:

/usr/bin/ld: cannot find -lzfs
/usr/bin/ld: cannot find -lnvpair
collect2: error: ld returned 1 exit status
b、原因分析

当出现/usr/bin/ld: cannot find -lxxx错误时,通常是找不到xxx库文件导致(库文件命名一般为libxxx.so),解决思路如下:
通过find / -name *xxx.so*全局搜索,确认是否已安装库文件相关软件

  • 如无法搜索到对应so文件,则查找对应库文件由哪个软件提供,安装对应软件即可
  • 如可以搜索到对应so文件,但文件名称带有其他后缀信息,则需要更改so文件名称创建一个软链接
#参考示例如下,出现/usr/bin/ld: cannot find -lzfs错误,全局查找存在libzfs.so.2.0.0文件,so后带有其他后缀信息
[root@node94 ~]# find / -name *zfs.so*
/usr/lib64/libzfs.so.2
/usr/lib64/libzfs.so.2.0.0
#创建一个libzfs.so库文件软链接,指向libzfs.so.2.0.0文件
[root@node94 ~]# ln -s /usr/lib64/libzfs.so.2.0.0 /usr/lib64/libzfs.so
  • 如可以搜索到对应so文件,且文件名称未带有其他后缀,则可将库文件所在路径添加到/etc/ld.so.conf文件内
echo "/usr/lib64/" >> /etc/ld.so.conf
ldconfig
c、解决措施
  • 遍历根目录可查找到对应so文件
[root@node94 ~]# find / -name *zfs.so*
/usr/lib64/libzfs.so.2
/usr/lib64/libzfs.so.2.0.0
[root@node94 ~]# find / -name *nvpair.so*
/usr/lib64/libnvpair.so.1
/usr/lib64/libnvpair.so.1.0.1
  • 创建软链接重命名so文件,将so文件路径添加到/etc/ld.so.conf
ln -s /usr/lib64/libnvpair.so.1.0.1 /usr/lib64/libnvpair.so
ln -s /usr/lib64/libzfs.so.2.0.0 /usr/lib64/libzfs.so
echo "/usr/lib64/" >> /etc/ld.so.conf
ldconfig

2、Deprecated feature: REMAKE_INITRD

a、问题说明

安装完相关软件依赖包之后,执行dmks出现Deprecated feature: REMAKE_INITRD提示信息

[root@node96 lustre-2.12.9]# dkms status
Deprecated feature: REMAKE_INITRD (/var/lib/dkms/spl/0.7.13/source/dkms.conf)
Deprecated feature: REMAKE_INITRD (/var/lib/dkms/zfs/0.7.13/source/dkms.conf)
spl/0.7.13, 3.10.0-1160.49.1.el7_lustre.x86_64, x86_64: installed
zfs/0.7.13, 3.10.0-1160.49.1.el7_lustre.x86_64, x86_64: installed
b、解决措施
  • 修改spl和zfs dkms配置文件,注释掉REMAKE_INITRD="no"配置
sed -i "s/REMAKE_INITRD=\"no\"/#REMAKE_INITRD=\"no\"/g" /usr/src/spl-0.7.13/dkms.conf
sed -i "s/REMAKE_INITRD=\"no\"/#REMAKE_INITRD=\"no\"/g" /usr/src/zfs-0.7.13/dkms.conf
  • 再次执行dkms status命令,此时没有出现Deprecated feature: REMAKE_INITRD提示信息
[root@node96 lustre-2.12.9]# dkms status
spl/0.7.13, 3.10.0-1160.49.1.el7_lustre.x86_64, x86_64: installed
zfs/0.7.13, 3.10.0-1160.49.1.el7_lustre.x86_64, x86_64: installed

3、源码编译安装lustre-zfs软件包后,缺少osd-zfs内核模块

a、问题说明

使用源码编译后的lustre软件包安装,执行mkfs.lustre --backfstype=zfs格式化zpool成功,但执行mount -t lustre挂载zpool失败,查看dmesg信息出现LustreError: 158-c: Can't load module 'osd-zfs'错误

b、原因分析

官方提供的源码文件中,lustre-dkms_pre-build.sh获取zfs版本方法有误,拿不到zfs版本信息,导致后续的zfs相关内核模块未编译成功

[root@node96 lustre-2.12.9]# cat ./configure | grep zfsverzfsver=$(ls -1 /usr/src/ | grep -m1 zfs | cut -f2 -d'-')zfsdkms="/var/lib/dkms/zfs/${zfsver}"zfssrc1="/usr/src/zfs-${zfsver}/${LINUXRELEASE}"zfssrc2="/usr/src/zfs-${zfsver}"zfsver=$((echo "#include <zfs_config.h>";echo "zfsver=ZFS_META_VERSION-ZFS_META_RELEASE") |grep "^zfsver=" | tr -d \" | cut -d= -f2)zfsver="Not found"{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $zfsver" >&5
$as_echo "$zfsver" >&6; }ZFS_VERSION=${zfsver}ZFS_MAJOR=$(echo $zfsver | sed -re 's/([0-9]+)\.([0-9]+)\.([0-9]+)(\.([0-9]+))?.*/\1/')ZFS_MINOR=$(echo $zfsver | sed -re 's/([0-9]+)\.([0-9]+)\.([0-9]+)(\.([0-9]+))?.*/\2/')ZFS_PATCH=$(echo $zfsver | sed -re 's/([0-9]+)\.([0-9]+)\.([0-9]+)(\.([0-9]+))?.*/\3/')ZFS_FIX=$(echo $zfsver   | sed -re 's/([0-9]+)\.([0-9]+)\.([0-9]+)(\.([0-9]+))?.*/\5/')
[root@node96 lustre-2.12.9]# ls -1 /usr/src/ | grep -m1 zfs | cut -f2 -d'-'
0.7.13
[root@node96 lustre-2.12.9]# cat lustre-dkms_pre-build.sh | grep ZFS_VERSIONZFS_VERSION=$(dkms status -m zfs -k $3 -a $5 | awk -F', ' '{print $2; exit 0}' | grep -v ': added$')if [ -z $ZFS_VERSION ] ; then--with-spl=$6/spl-${ZFS_VERSION} \--with-spl-obj=$7/spl/${ZFS_VERSION}/$3/$5 \--with-zfs=$6/zfs-${ZFS_VERSION} \--with-zfs-obj=$7/zfs/${ZFS_VERSION}/$3/$5"
[root@node96 lustre-2.12.9]# dkms status -m zfs -k $3 -a $5 | awk -F', ' '{print $2; exit 0}' | grep -v ': added$'[root@node96 lustre-2.12.9]# dkms status -m zfs -k $3 -a $5 | awk -F', ' '{print $1; exit 0}' | cut -f2 -d'/'| cut -f1 -d':'
0.7.13
c、解决措施

解决dkms编译问题:Install-Lustre2.12.8-on-CentOS-7.9-2009

修改源码文件lustre-dkms_pre-build.sh,注释掉dkms status -m zfs -k $3 -a $5 | awk -F', ' '{print $2; exit 0}' | grep -v ': added$'获取zfs版本命令,修改为dkms status -m zfs -k $3 -a $5 | awk -F', ' '{print $1; exit 0}' | cut -f2 -d'/'| cut -f1 -d':',之后重新打包源码包,重新编译软件

[root@node96 ~]# tar -zxvf lustre-2.12.9.tar.gz
[root@node96 ~]# cat ./lustre-2.12.9/lustre-dkms_pre-build.sh | grep ZFS_VERSION=# ZFS_VERSION=$(dkms status -m zfs -k $3 -a $5 | awk -F', ' '{print $2; exit 0}' | grep -v ': added$')ZFS_VERSION=$(dkms status -m zfs -k $3 -a $5 | awk -F', ' '{print $1; exit 0}' | cut -f2 -d'/'| cut -f1 -d':')
[root@node96 ~]# tar -zcvf lustre-2.12.9.tar.gz lustre-2.12.9

4、安装lustre-zfs-dkms软件包,编译过程中出现No openssk-devel headers found警告信息

a、问题说明

安装lustre-zfs-dkms软件包,编译过程中出现以下警告信息

[root@node93 lustre-zfs]# rpm -Uvh *.rpm
Preparing...                          ################################# [100%]
Updating / installing...1:lustre-osd-zfs-mount-2.12.9-1.el7################################# [ 50%]2:lustre-zfs-dkms-2.12.9-1.el7     ################################# [100%]
Loading new lustre-zfs-2.12.9 DKMS files...
Deprecated feature: REMAKE_INITRD (/usr/src/lustre-zfs-2.12.9/dkms.conf)
Building for 3.10.0-1160.49.1.el7_lustre.x86_64
Building initial module for 3.10.0-1160.49.1.el7_lustre.x86_64
Deprecated feature: REMAKE_INITRD (/var/lib/dkms/lustre-zfs/2.12.9/source/dkms.conf)
Deprecated feature: REMAKE_INITRD (/var/lib/dkms/zfs/0.7.13/source/dkms.conf)
configure: WARNING:No openssk-devel headers found, unable to build l_getsepol and SELinux status checkingconfigure: WARNING:No selinux package found, unable to build selinux enabled toolsDone.
Deprecated feature: REMAKE_INITRD (/var/lib/dkms/lustre-zfs/2.12.9/source/dkms.conf)
Deprecated feature: REMAKE_INITRD (/var/lib/dkms/lustre-zfs/2.12.9/source/dkms.conf)
b、解决措施

官方文档相关错误提示判断:lustre-core.m4

  • 安装相关依赖包
yum install openssl-devel libselinux-devel -y
  • 处理Deprecated feature: REMAKE_INITRD警告信息
sed -i "s/REMAKE_INITRD=\"no\"/#REMAKE_INITRD=\"no\"/g" /usr/src/lustre-zfs-2.12.9/dkms.conf
sed -i "s/REMAKE_INITRD=\"no\"/#REMAKE_INITRD=\"no\"/g" /var/lib/dkms/lustre-zfs/2.12.9/source/dkms.conf
sed -i "s/REMAKE_INITRD=\"no\"/#REMAKE_INITRD=\"no\"/g" /var/lib/dkms/zfs/0.7.13/source/dkms.conf

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

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

相关文章

JAVA基础进阶(十一)

一、创建线程的三种方式 Java语言中是用Thread类来表示线程&#xff0c;线程的创建和开启都是通过Thread类来实现的。 继承Thread类重写run方法。 调用线程对象的start()方法启动线程&#xff08;启动后还是执行run方法的&#xff09;,而不是调用创建的子类对象的run()方法。…

MSUSB30模拟开关可Pin to Pin兼容FSUSB30/SGM7222

MSUSB30/MSUSB30N 是一款高速、低功耗双刀双掷 USB 模拟开关芯片&#xff0c;其工作电压范围是1.8V 至5.5V。可Pin to Pin兼容FSUSB30/SGM7222。其具有低码间偏移、高通道噪声隔离度、宽带宽的特性。 MSUSB30/MSUSB30N 主要应用范围包括&#xff1a;具有 USB2.0 接口的手持设备…

Linux “grep“ 命令

1. 目标 本文主要介绍 Linux "grep" 命令&#xff1a;用于查找文件里符合条件的字符串或正则表达式。 2. grep 命令 "grep" 命令的基本语法是&#xff1a; grep [options] pattern [files]pattern - 表示要查找的字符串或正则表达式。 files - 表示要查…

shared_ptr子类指针转换成父类指针

假设有如下应用场景: class Base { public:void addChild(std::shared_ptr<Base>& child){...} }class Derived : public Base {}int main() {Base a;std::shared_ptr<Derived> b std::make_shared<Derived>();a.addChild(b); // Error } 该代码中声…

Response(Http协议连载)

Response对象 功能&#xff1a; 设置响应消息 设置响应行 格式&#xff1a;HTTP/1.1 200 ok 设置状态码&#xff1a;setStatus(int sc) 设置响应头 设置头&#xff1a;setHeader(String name,String value); 设置响应体 使用步骤&#xff1a; 获取输出流 字符输出流&#xff…

[UGUI]实现从一个道具栏拖拽一个UI道具到另一个道具栏

在Unity游戏开发中&#xff0c;实现UI道具的拖拽功能是一项常见的需求。本文将详细介绍如何使用Unity的UGUI系统和事件系统&#xff0c;实现从一个道具栏拖拽一个UI道具到另一个道具栏的功能。 一、准备工作 首先&#xff0c;你需要在Unity中创建两个道具栏和一些UI道具。道具…

事件机制?

事件流&#xff1a; 描述的页面接收事件的顺序。先进行事件捕获 到达目标元素 在进行事件冒泡 分为事件捕获和事件冒泡 事件冒泡&#xff1a;从具体元素从内向外依次触发事件 从下面这个小案例可以清楚了解什么是事件冒泡 <!DOCTYPE html> <html lang"en"…

C++ -- 每日选择题 -- Day2

第一题 1. 下面代码中sizeof(A)结果为&#xff08;&#xff09; #pragma pack(2) class A {int i;union U{char str[13];int i;}u;void func() {};typedef char* cp;enum{red,green,blue}color; }; A&#xff1a;20 B&#xff1a;21 C&#xff1a;22 D&#xff1a;24 答案及解析…

leecode 回文数

给你一个整数 x &#xff0c;如果 x 是一个回文整数&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 回文数是指正序&#xff08;从左向右&#xff09;和倒序&#xff08;从右向左&#xff09;读都是一样的整数。 例如&#xff0c;121 是回文&#xff0c;而…

Linux 挂载文件系统为可读写 mount -uw / 和 mount -o remount,rw /

Linux 挂载文件系统为可读写 mount -uw / 和 mount -o remount,rw / 在挂载文件系统为可读写时&#xff0c;我发现一个问题&#xff0c;有时用mount -uw /就可以把文件系统挂载成可写的状态。但有时就会发生 “read-only file system” 的错误&#xff0c;这时我用mount -o re…

智能优化算法应用:基于纵横交叉算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于纵横交叉算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于纵横交叉算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.纵横交叉算法4.实验参数设定5.算法结果6.参考…

【字符串探秘:手工雕刻的String类模拟实现大揭秘】

【本节目标】 1. string类的模拟实现 2.C基本类型互转string类型 3.编码表 &#xff1a;值 --- 符号对应的表 4.扩展阅读 1. string类的模拟实现 1.1 经典的string类问题 上面已经对string类进行了简单的介绍&#xff0c;大家只要能够正常使用即可。在面试中&#xff0c;…

1.网络编程基础知识 - 基础概念、TCP网络通信、UDP网络通信

网络编程 文章目录 网络编程一、概念1.1 网络1.2 IP地址1.2.1 IPv4 介绍1.2.2 IPv6 介绍1.2.3 查看IP地址 1.3 域名和端口1.4 网络协议1.5 TCP与UDP1.6 InetAddress类1.7 Socket 二、TCP网络通信编程2.1 介绍2.2 案例2.2.1 字节流编程案例12.2.2 字节流编程案例22.2.3 字符流编…

【UGUI】Unity教程:实现物品的拖拽功能

大家好&#xff0c;今天&#xff0c;我们将一起学习如何在Unity中实现物品的拖拽功能。这是一个非常实用的技能&#xff0c;无论你是在制作RPG游戏的背包系统&#xff0c;还是在制作策略游戏的建筑放置功能&#xff0c;都会用到这个技能。那么&#xff0c;让我们开始吧&#xf…

5. 文件属性和目录

5. 文件属性和目录 1. Linux 系统的文件类型1.1 普通文件1.2 目录文件1.3 字符设备文件和块设备文件1.4 符号链接文件1.5 管道文件1.6 套接字文件 2. stat 系统调用2.1 struct stat 结构体2.2 st_mode 变量2.3 struct timespec 结构体 3. fstat 和 lstat 函数3.1 fstat 函数3.2…

python中的序列

文章目录 序列类型标准类型运算符标准类型运算符序列类型运算符字符串 序列类型 字符串 列表 元组 由元组构成的列表 标准类型运算符 &#xff08;1&#xff09;按字符串大小比较 标准类型运算符 序列类型运算符 序列类型转换内建函数 注&#xff1a; &#xff08;1&#xff…

深入理解MySQL索引底层数据结构与算法

索引的本质 索引是帮助MySQL高效获取数据的排好序的数据结构 索引的数据结构 二叉树红黑数Hash表B-Tree MySQL索引底层为啥不用二叉树 如图&#xff0c;对单边增长的数据&#xff0c;索引效率没有什么提升 MySQL索引底层为啥不用红黑数 红黑数&#xff1a;二叉平衡树 随…

并发与数据一致性:事务的保障

关注公众号【爱发白日梦的后端】分享技术干货、读书笔记、开源项目、实战经验、高效开发工具等&#xff0c;您的关注将是我的更新动力&#xff01; 并发 并发是计算机系统中同时执行多个独立任务的能力。通过共享资源和并发执行&#xff0c;系统可以提高性能和效率。然而&…

【C 语言经典100例】C 练习实例29

题目&#xff1a;给一个不多于5位的正整数&#xff0c;要求&#xff1a;一、求它是几位数&#xff0c;二、逆序打印出各位数字。 程序分析&#xff1a;学会分解出每一位数&#xff0c;如下解释。 #include <stdio.h>int main( ) {long a,b,c,d,e,x;printf("请输入…

silero-vad 官方新增了java 的demo

原来参考android GitHub - gkonovalov/android-vad: Android Voice Activity Detection (VAD) library. Supports WebRTC VAD GMM, Silero VAD DNN, Yamnet VAD DNN models.的kt改写java demo 可费劲了 上个月 https://github.com/snakers4/silero-vad/tree/master/examples…