openGauss数据库自2020年6月30日开源以来,吸引了众多内核开发者的关注。那么openGauss的多线程是如何启动的,一条SQL语句在SQL引擎,执行引擎和存储引擎的执行过程是怎样的,酷哥做了一些总结,第一期内容主要分析openGauss多线程架构启动过程。openGauss数据库是一个单进程多线程的数据库,客户端可以使用JDBCODBCLibpqPsycopg等驱动程序,向openGauss的主线程(Postmaster)发起连接请求。openGauss为什么要使用多线程架构随...
2023-02-13 15:57:14 4963浏览 0点赞 0回复 1收藏
一、介绍在介绍MongoDB之前,我先介绍一下业务开发的时候遇到的痛点,以便大家对它有一个更加清晰的认识!最近在用数据库存储数据的时候发现这么一个坑,例如从消息队列中监听消息的时候,原来的做法是将监听的消息json数据存储在数据库,以便好对异常消息数据进行追溯,消息内容使用text类型存储,起初因为数据内容很短,没啥毛病,但是当随着业务的扩展,收到的消息内容越来越长,最后发现数据库中的text字段...
2023-02-13 15:55:14 3333浏览 0点赞 0回复 0收藏
说到内存溢出,我相信各位都知道是什么,但是说到内存泄露,而且还是ThreadLocal,阿粉就得来说一下这个了,毕竟如果面试的时候被问到ThreadLocal的内存泄露,是不是有可能不太了解了呢,今天阿粉来说一下这个ThreadLocal的内存泄露的原因,以及如何从开发中去避免这个问题。什么是内存泄露说到内存泄露,阿粉就得说一下,这个可能对于初中级的程序员来说,还是比较陌生的,为什么这么说,是因为,JVM有自己的内存回收机制,所以...
2023-02-13 15:53:58 2621浏览 0点赞 0回复 0收藏
关于HashMap阿粉相信大家再面试的时候,是非常容易被问到的,为什么呢?因为至少是在JDK8出来之后,非常容易被问到关于HashMap的知识点,而如果对于没有研究过他的源代码的同学来说,这个可能只是说出一部分来,比如线程安全,链表+红黑树,以及他的扩容等等,今天阿粉就来把HashMap上面大部分会被在面试中问到的内容,做个总结。HashMap说到HashMap想必大家从脑海中直接复现出了一大堆的面试题,HashMap的数据结构JDK7和JDK8Ha...
2023-02-13 15:52:51 2015浏览 0点赞 0回复 0收藏
在日常开发的过程中我们经常会遇到需要mock一些数据的场景,比如说mock一些接口的返回或者说mock一些测试消息用于队列生产者发送消息,可能很多时候我们都是使用一些固定的case或者一条相同的数据重复使用。今天阿粉就教大家用Stream去构造一些伪真实的一些数据。Mock任意个UUID首先我们通过普通写法来构造100个UUID,代码如下相信大家都会写,就不多说了。publicstaticList<U...
2023-02-13 15:52:30 2984浏览 0点赞 0回复 0收藏
一、摘要trywithresources是JDK7中引入的一个新的异常处理机制,它能让开发人员不用显式的释放trycatch语句块中使用的资源。比如,我们以文件资源拷贝为示例,大家所熟悉的trycatchfinally写法如下:publicclassResourceTest1{publicstaticvoidmain(String[]args){BufferedInputStreambinnull;BufferedOutputStreamboutnull;try{binnewBufferedInputStream(newFileInputStream(newFile("test.txt")));b...
2023-02-13 15:50:55 3315浏览 0点赞 0回复 0收藏
前一段时间,阿粉的读者给阿粉留言,说在面试的时候,有个面试官就问她,Spring的各种知识,Spring的生命周期,Spring的循环依赖是如何解决的。就这么几个问题,虽然回答的不是很好,但是也是很幸运的接到了offer,毕竟面试一般很少会因为一两个面试题回答的不好,就直接pass的,还是看综合表现的,既然问到阿粉这个Spring是如何处理循环依赖的了,那么阿粉就得来解释一下,Spring是如何处理循环依赖的。循环依赖什么是循环依赖...
2023-02-09 16:03:57 3972浏览 0点赞 0回复 0收藏
一、摘要Java,作为一款非常热门的编程语言,尽管它有着非常丰富的语言特性,完全面向对象编程,编程高度规范化,但是也有一个最受大家诟病的一个缺点:啰嗦,尤其是当你开发了很多年之后,你会明显的感受到,相比动态语言,java定义变量之前,要先创建类,然后定义变量类型,每个类要写很多的getsettoStringhashCodeequals等等方法。尤其是当一个实体类,高达几十个变量时,写完get、set方法之后,一个实体类...
2023-02-09 16:03:41 3271浏览 0点赞 0回复 0收藏
在日常开发的过程中我们经常会需要调用第三方组件或者数据库,有的时候可能会因为网络抖动或者下游服务抖动,导致我们某次查询失败。这种时候我们往往就会进行重试,当重试几次后依旧还是失败的话才会向上抛出异常进行失败。接下来阿粉就给大家演示一下通常是如何做的,以及如何更优雅的进行重试。常规做法我们先来看一下常规做法,常规做法首先会设置一个重试次数,然后通过while循环的方式进行遍历,当循环次数没有达...
2023-02-09 16:03:26 3254浏览 0点赞 0回复 0收藏
什么是编程?编程就是和计算机交流,你写下要计算机逐一执行的命令,然后让计算机来执行。当然在现实生活中想要别人执行你的命令,首先得让对方听懂你说的话,计算机也一样,但计算机只能听懂16进制。那怎么办呢?难道我还要学习16进制?答案是:当然不用啦,学习编程语言就是为了让计算机能听懂你在说什么,你想让它做什么。如何让计算机听我的命令?这个时候我们需要一个软件,在这个软件中写程序,然后让它解释或者编译成计...
2023-02-09 16:03:07 2362浏览 0点赞 0回复 0收藏
前面的文章给大家介绍Spring的重试机制的时候有提到过Spring有很多Enable开头的注解,平时在使用的时候也没有注意过为什么会有这些注解,今天就给大家介绍一下。Enable注解首先我们先看一下有哪些常用的Enable开头的注解,以及都是干什么用的。EnableRetry:开启Spring的重试功能;EnableScheduling:开启Spring的定时功能;EnableAsync:开启Spr...
2023-02-09 16:02:47 3016浏览 0点赞 0回复 0收藏
首先要了解,任何程序都可以理解为有一些输入,将这些输入的数据记录下来,加以计算,然后输出的过程。我们已经知道用System.out.println可以让计算机输出,我们需要知道如何能让计算机读到我们输入的内容,我们还需要知道如何让计算机能记住我们输入的内容,以及如何进行相应的计算。这篇文章的内容将讲解以下知识点:①输入与输出,②变量与赋值,③浮点数的计算以及与整数之间的转换①输入与输出要读到程序的用户的输入,需...
2023-02-09 16:01:46 2175浏览 0点赞 0回复 0收藏
一、简介在实际的项目开发过程中,我们经常需要将某些变量从代码里面抽离出来,放在配置文件里面,以便更加统一、灵活的管理服务配置信息。比如,数据库、eureka、zookeeper、redis、mq、kafka等服务组件的连接参数配置,还有我们自定义的项目参数配置变量。当然,实际上根据当前的业务需求,我们往往会自定义参数,然后注入到代码里面去,以便灵活使用!今天,我们就一起来聊一聊SpringBoot加载配置文件的几种玩法,如...
2023-02-09 16:01:18 4154浏览 0点赞 0回复 0收藏
我们都知道,在开发的时候,是百分百都能够使用到我们的实体类,各种工具类,而有些实体类,因为表中字段的增多,一个实体类,有可能有二三十个字段,而如果每一个字段都让我们自己去编辑,那你有一多半的时间,都会浪费在处理这个字段上面,所以,今天阿粉就来交给你,这个快速而又简单的根据表结构,生成实体类的小工具,逆向工我们都知道,在开发的时候,是百分百都能够使用到我们的实体类,各种工具类,而有些实体类,因为...
2023-02-09 16:00:53 2134浏览 0点赞 0回复 0收藏
Java程序员都知道要面向接口编程,那Java中的接口除了定义接口方法之外还能怎么用你知道吗?今天阿粉就来带大家看一下Java中的接口还可以有哪些用法。基本特性我们先看一下接口的基本特性接口的定义需要使用关键字interface;接口定义的所有方法默认都是publicabstract;当一个具体的class去实现一个interface时,需要使用implements关键字;接口之间...
2023-02-09 15:56:45 2880浏览 0点赞 0回复 0收藏
一、什么是前缀索引?所谓前缀索引,说白了就是对文本的前几个字符建立索引(具体是几个字符在建立索引时去指定),比如以产品名称的前10位来建索引,这样建立起来的索引更小,查询效率更快!有点类似于Oracle中对字段使用Left函数来建立函数索引,只不过MySQL的这个前缀索引在查询时是内部自动完成匹配的,并不需要使用Left函数。二、为什么要用前缀索引?可能有的同学会发出疑问,为什么不对整个字段建立索引呢?一般来说,当...
2023-02-09 15:54:28 3430浏览 0点赞 0回复 0收藏
1、实现背景1.1背景随着大数据、云计算、物联网的急速发展,数据量呈指数级增长,因此需要消耗更多的存储空间。客户对数据库性能和资源的消耗也愈发看重,期望通过算法优化和软件优化尽可能的对有限的硬件资源进行充分且高效的利用。其中数据的存储资源利用率首先成为行业关注的焦点。高效数据压缩算法作为对数据库存储的优化,期望通过将数据压缩存储,在相同的硬件资源下可以更多的存储处理数据,有效提升数据库对磁盘的利用...
2023-01-30 15:55:40 4678浏览 0点赞 0回复 0收藏
1、前言openGauss是一款全面友好开放的企业级开源关系型数据库,采用木兰宽松许可证v2发行,提供面向多核架构的极致性能、全链路的业务、数据安全、基于AI的调优和高效运维的能力。本文就是采用openGauss设计的一个AI小demo。2、方案意义人工智能被广泛用于棋类对弈的主要原因是:棋类对弈自古以来就被认为是人类智力活动的象征,若人工智能成功达到、甚至高于人类水平,则就代表AI的发展潜力,从而吸引更多研究者关注并投身其...
2023-01-30 15:55:18 4015浏览 0点赞 0回复 0收藏
通过Go语言自制安装openGauss二进制程序前言巧妙利用go语言自制openGauss安装二进制程序,经测试15s即可安装完成。一、安装go语言环境下载解压go[rootnode1]wgethttps:golang.google.cndlgo1.19.1.linuxamd64.tar.gz[rootnode1]tarzxvfgo1.19.1.linuxamd64.tar.gzCusrlocal添加环境变量exportPATH$PATH:usrlocalgobin测试运行packagemainimportfmtfuncmain(){fmt.Println("hello,world!")}[rootnode1]goruntest.gohello,world...
2023-01-05 11:50:26 2622浏览 0点赞 0回复 0收藏
一、背景由于IT建设的快速发展,当数据中心业务突增,需要快速部署多套的数据库时,给运维工作带来了不小的压力和挑战,作为运维人员该如何面对这种困境呢?另外由于个人的习惯等也会导致所部署的环境不一定与规划完全一致,那么对以后的运维也会产生一定的负面影响。很显然,这种传统的方式已经无法适应当前的情景了,自动化运维应运而生,ansible在自动化运维和devops的应用中崭露头角。本文基于ansible工具实现openGauss的一...
2023-01-05 11:49:51 3564浏览 0点赞 0回复 0收藏