From 4f8ea27ca02d095765007b66a7dbcfe299855ddb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E4=B8=80=E9=B8=A3?= Date: Mon, 13 Dec 2021 19:52:35 +0800 Subject: [PATCH] add my blog --- content/zh/post/yy/.DS_Store | Bin 0 -> 6148 bytes content/zh/post/yy/1.md | 382 +++++++++++++++++ ...05\344\270\216\344\275\277\347\224\250.md" | 383 ++++++++++++++++++ content/zh/post/yy/image/.DS_Store | Bin 0 -> 6148 bytes content/zh/post/yy/image/1.png | Bin 0 -> 58088 bytes 5 files changed, 765 insertions(+) create mode 100644 content/zh/post/yy/.DS_Store create mode 100644 content/zh/post/yy/1.md create mode 100644 "content/zh/post/yy/OpenGauss\346\225\260\346\215\256\345\272\223\345\256\211\350\243\205\344\270\216\344\275\277\347\224\250.md" create mode 100644 content/zh/post/yy/image/.DS_Store create mode 100644 content/zh/post/yy/image/1.png diff --git a/content/zh/post/yy/.DS_Store b/content/zh/post/yy/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..dfafa71a385bb894ab16e9d3dc9bfb326bd70a6c GIT binary patch literal 6148 zcmeHKO=}ZD7=EYS+KolYp`sUI!9x{dO`2*bg2WgRMJ#kh53R;*c1agEJ4-g(96~Th z+oSqVMEn8bU-0fP(PusaNg6*+w#d9N^US;-Gds`h&g@G>td{vDqC64VC<3jssOE^U zi*igBv_`}+F~-A)x4ejZ=!*f37zPXjr<(!s?OIf#b?T5m^Znj|ZS98?xrikS;nk!z z1=F5v5B7KSJ-vRK=riH7mqcOOD;B@8g+*)W%(A^~uh=i#ecpF_&0dz)n%!N|d&+s_ zjoVG{Ss3&i`PF+o?lr?W=*oc558$%*JdAzbukkGQQyJ?jgPpT;jr_&Ipi(Y4rLD@a z;0(4liUnu0d}}z&*%z+dxV_VO9d%-UC>KWzN0^jz8pm*i#>CR2cFAq=PBJ!6TRXg7 z*UPn!zO%xok6-T2dia0vNcMj>!-3n4BObRgs(9j6+NOj8is=EiCZm+nAZf)f-|rs2 z{rcqm_M7bL+|B)f*lQD8w)VHDxx=uyfpfc(T-9&2>n#Z&Q%_F=f2Qx3oWz4od zF&nx@PMQJz!rLn+{UBz3!+>Gn)G;8=2M0x9RpUsZJUURx6aZ*JEd_1)>ko8<0$9~J zQV0!%sZgK_Wje)RI&)wu9QLaAA1PGf#N^BvN6*Z3hQf5>!5ryMtg6t|h5^ICGy{vO zn-};0{a@$*(?O=args.threshold, _info)) +                        for item in _info: +                            item.insert(1, stats) +                        info_sum.extend(_info) +                ResultSaver().save(info_sum, args.predicted_file) +            else: +                pred_result = list(filter(lambda item: float(item[1])>=args.threshold, pred_result)) +                ResultSaver().save(pred_result, args.predicted_file) +        else: +            from prettytable import PrettyTable + +            display_table = PrettyTable() +            if args.model == 'template': +                display_table.field_names = ['sql', 'status', 'predicted time', 'most similar template'] +                display_table.align = 'l' +                status = ('Suspect illegal SQL', 'No SQL information', 'No SQL template found', 'Fine match') +                for stats in status: +                    if pred_result[stats]: +                        for sql, predicted_time, similariest_sql in pred_result[stats]: +                            if predicted_time >= args.threshold or stats == 'Suspect illegal sql': +                                display_table.add_row([sql, stats, predicted_time, similariest_sql]) +            else: +                display_table.field_names = ['sql', 'predicted time'] +                display_table.align = 'l' +                for sql, predicted_time in pred_result: +                    if float(predicted_time) >= args.threshold: +                        display_table.add_row([sql, predicted_time]) +            print(display_table.get_string()) + + +``` + +### (2)然后来分析下模板化算法的框架 + +![img](https://img-community.csdnimg.cn/images/8c96253c420541da878276f136902b1d.png "#left") + + 模板化方法类的结构就如上所示,其中fit方法就是训练的,transform方法是预测的,load是加载模型,save是储存模型,predict_duration_time是计算执行时间,在transform中会被调用。 + +```python +# fit方法: +def fit(self, data): +        # 对每条sql语句按照粗、细粒度进行标准化,生成模板 +        for sql, duration_time in data: +            if check_illegal_sql(sql): +                continue +            sql_template = templatize_sql(sql) +            sql_prefix = sql_template.split()[0] +            if sql_prefix not in self.__hash_table: +                sql_prefix = 'OTHER'#如果不存在,说明没有此模板,就标记下来,后续插入 +            +            if sql_template not in self.__hash_table[sql_prefix]: +                self.__hash_table[sql_prefix][sql_template] = dict(time_list=[], count=0, mean_time=0.0, iter_time=0.0) +            self.__hash_table[sql_prefix][sql_template]['count'] += 1 +            self.__hash_table[sql_prefix][sql_template]['time_list'].append(duration_time) +        # 更新模板信息,也就相当于是训练的过程了 +        for sql_prefix, sql_prefix_info in self.__hash_table.items(): +            for sql_template, sql_template_info in sql_prefix_info.items(): +                del sql_template_info['time_list'][:-self.time_list_size] +                sql_template_info['mean_time'] = sum(sql_template_info['time_list']) / len(sql_template_info['time_list']) +                sql_template_info['iter_time'] = reduce(lambda x, y: (x+y)/2, sql_template_info['time_list']) + +# Predict_duration_time方法,就是去从一堆模板中找到最相似的k个,然后算均值(KNN方法)。 +def predict_duration_time(self, sql): +        top_similarity_sql = None +        if check_illegal_sql(sql): +            predict_time = -1 +            status = 'Suspect illegal sql' +            return sql, status, predict_time, top_similarity_sql + +        sql_template = templatize_sql(sql) +        # get 'sql_template' of SQL +        sql_prefix = sql_template.strip().split()[0] +        if sql_prefix not in self.__hash_table: +            sql_prefix = 'OTHER' +        if not self.__hash_table[sql_prefix]: +            status = 'No SQL information' +            predict_time = -1 +        elif sql_template not in self.__hash_table[sql_prefix]: +            similarity_info = [] +            """ +            if the template does not exist in the hash table, +            then calculate the possible execution time based on template +            similarity and KNN algorithm in all other templates +            """ +            status = 'No SQL template found' +            for local_sql_template, local_sql_template_info in self.__hash_table[sql_prefix].items(): +                similarity_info.append( +                    (self.similarity_algorithm(sql_template, local_sql_template), +                     local_sql_template_info['mean_time'], local_sql_template)) +            topn_similarity_info = heapq.nlargest(self.knn_number, similarity_info) #找相似度最高的模板的信息 +            sum_similarity_scores = sum(item[0] for item in topn_similarity_info) +            if not sum_similarity_scores: +                sum_similarity_scores = self.bias +            top_similarity_sql = '\n'.join([item[2] for item in topn_similarity_info]) +            similarity_proportions = [item[0] / sum_similarity_scores for item in +                                      topn_similarity_info] +            topn_duration_time = [item[1] for item in topn_similarity_info] +            predict_time = reduce(lambda x, y: x + y, +                                  map(lambda x, y: x * y, similarity_proportions, +                                      topn_duration_time)) + +        else: +            status = 'Fine match' +            predict_time = self.__hash_table[sql_prefix][sql_template]['iter_time'] +            top_similarity_sql = sql_template + +        return sql, status, predict_time, top_similarity_sql + + + +``` + + +### (3)模板化算法-相似度计算算法 + +主要有四个算法: + +```python +# 1°余弦距离 + +![img](https://img-community.csdnimg.cn/images/1c5180dffb5646dfa85d0a4f69f2e495.png "#left") + + +def distance(str1, str2): +    c_1 = Counter(str1) +    c_2 = Counter(str2) +    c_union = set(c_1).union(c_2) +    dot_product = sum(c_1.get(item, 0) * c_2.get(item, 0) for item in c_union) +    mag_c1 = math.sqrt(sum(c_1.get(item, 0)**2 for item in c_union)) +    mag_c2 = math.sqrt(sum(c_2.get(item, 0)**2 for item in c_union)) +    return dot_product / (mag_c1 * mag_c2) + +# 2°编辑距离 + + +![img](https://img-community.csdnimg.cn/images/a1d9f682b03b4b72b087053d5796a0aa.png "#left") + +def distance(str1, str2): +    """ +    func: calculate levenshtein distance between two strings. +    :param str1: string1 +    :param str2: string2 +    :return: distance +    """ +    len_str1 = len(str1) + 1 +    len_str2 = len(str2) + 1 +    +    mat = [[0]*len_str2 for i in range(len_str1)] +    mat[0][0] = 0 +    for i in range(1,len_str1): +        mat[i][0] = mat[i-1][0] + 1 +    for j in range(1,len_str2): +        mat[0][j] = mat[0][j-1]+1 +    for i in range(1,len_str1): +        for j in range(1,len_str2): +            if str1[i-1] == str2[j-1]: +                mat[i][j] = mat[i-1][j-1] +            else: +                mat[i][j] = min(mat[i-1][j-1],mat[i-1][j],mat[i][j-1])+1 +    +    return 1 / mat[len_str1-1][j-1] + + +# 3°列表距离 + +大致就是两个部分:长度相似度+内容相似度 +def distance(str1, str2): +    sql_distance = 0.0 +    list1 = str1.split() +    list2 = str2.split() +    sorted_list1 = sorted(list1) +    sorted_list2 = sorted(list2) +    max_len = max(len(sorted_list1), len(sorted_list2)) +    min_len = min(len(sorted_list1), len(sorted_list2)) +    short_list = sorted_list1 if len(sorted_list1) < len(sorted_list2) else sorted_list2 +    long_list = sorted_list1 if len(sorted_list1) > len(sorted_list2) else sorted_list2 +    for item in short_list: +        if item in long_list: +            sql_distance += 1.0 +    length_similarity = float(min_len / max_len) +    return sql_distance + length_similarity +# 4°解析树距离(这里没看懂,就不叙述了) + + +``` + + + +## 3、DNN算法 + + +![img](https://img-community.csdnimg.cn/images/6ab627cccee340568590338bffdd10dd.png "#left") + + +DNN模型主要有一个word2vec模块,然后是接上一个KerasRegression,KerasRegression结构如下: +  +```python +from tensorflow.keras import Input, Model +        from tensorflow.keras.layers import Dense +        inputs = Input(shape=(shape,)) +        layer_dense1 = Dense(128, activation='relu', +            kernel_initializer='he_normal')(inputs) +        layer_dense2 = Dense(256, activation='relu', +            kernel_initializer='he_normal')(layer_dense1) +        layer_dense3 = Dense(256, activation='relu', +            kernel_initializer='he_normal')(layer_dense2) +        layer_dense4 = Dense(256, activation='relu', +            kernel_initializer='he_normal', name='vectors')(layer_dense3) +        y_pred = Dense(encoding_dim)(layer_dense4) +        model = Model(inputs=inputs, outputs=y_pred) +        model.compile(optimizer='adam', loss='mse', metrics=['mae']) +        return model + + +``` +就是一个简单的5层全连接网络。 + +预测过程: +  +```python +feature_list = [] +        data_backup = list(data) +        error_list = [] +        for idx_error, sql in enumerate(data_backup): +            if check_illegal_sql(sql): +                error_list.append(idx_error) +                continue +            filter_template = templatize_sql(sql) +            vector = self.w2v.str2vec(filter_template) +            feature_list.append(vector) + +        features = np.array(feature_list) +        predictions = self.regression.predict(features) +        predictions = np.abs(predictions) +        score = self.scaler.inverse_transform(predictions) +        if error_list: +            for item in error_list: +                score = np.insert(score, item, -1) +        score = np.hstack((np.array(data_backup).reshape(-1, 1), score.reshape(-1, 1))).tolist() +        return score + + +``` + +训练过程就相当于预测过程多一个反向传播。 diff --git "a/content/zh/post/yy/OpenGauss\346\225\260\346\215\256\345\272\223\345\256\211\350\243\205\344\270\216\344\275\277\347\224\250.md" "b/content/zh/post/yy/OpenGauss\346\225\260\346\215\256\345\272\223\345\256\211\350\243\205\344\270\216\344\275\277\347\224\250.md" new file mode 100644 index 00000000..ca3ccd27 --- /dev/null +++ "b/content/zh/post/yy/OpenGauss\346\225\260\346\215\256\345\272\223\345\256\211\350\243\205\344\270\216\344\275\277\347\224\250.md" @@ -0,0 +1,383 @@ ++++ +title = "openGauss数据库安装与使用" +date = "2021-11-30" +tags = ["openGauss社区开发入门"] +archives = "2021-11" +author = "chenyiming" +summary = "openGauss社区开发入门" +times = "17:30" ++++ +# 一、相关说明 + 使用VMware虚拟机,安装CentOS7.9 64位系统(因为找不到7.6的安装包了),设置此系统的基础参数如下(这里内存需要设置大一点,不然可能会无法运行OpenGauss): + +![img](/Users/chenyiming/Desktop/data/blog/content/zh/post/yy/image/1.png "#left") + + 此外,还需要修改/etc/redhat-release文件中系统的版本为:CentOS Linux release 7.6(Core),这是因为不安装7.6,可能出现gauss与os不匹配的问题,但是目前已经没有7.6的包了。所以选择了7.9,然后吧版本号改掉。 + + + +# 二、具体安装步骤 + + +## 1.准备操作 +(1)配置yum源 + 删除自带的yum源 + +```bash +rm -rf /etc/yum.repos.d/* +``` + + 下载阿里云的yum源 + +```bash +wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo +``` + + 然后更新缓存 +```bash +yum makecache +``` +(2)安装一些依赖项 + +``` +yum clean all +yum install -y lksctp* +yum install -y java-1.8.0-openjdk* psmisc bzip2 python3 python3-devel +yum install -y libaio-devel flex bison ncurses-devel glibc-devel patch redhat-lsb-core +``` + + + +(3)配置ip和hostname + +``` +hostname && ifconfig |grep broadcast|awk '{print $2}' +sed -i '/MasterG/d' /etc/hosts +echo "192.168.2.131 MasterG ##Gauss OM IP Hosts Mapping" >> /etc/hosts +cat /etc/hosts|grep Gauss + + + +``` +(4)关闭防火墙然后重启 + +``` +systemctl status firewalld +systemctl disable firewalld.service +systemctl stop firewalld.service +sed -i '/SELINUX=/d' /etc/selinux/config +echo "SELINUX=disabled" >> /etc/selinux/config +cat /etc/selinux/config|grep -v ^#|grep -v '^$' +reboot + + +``` + +(5)配置时区 + +``` +echo "export LANG=en_US.UTF-8" >> ~/.bash_profile +source ~/.bash_profile +env|grep LANG +rm -fr /etc/localtime +ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime +ll /etc/localtime + + +``` + +(6)关闭SWAP + +``` +swapoff -a + + +``` + +(7)关闭透明页并重启 + +``` +echo never > /sys/kernel/mm/transparent_hugepage/enabled +echo never > /sys/kernel/mm/transparent_hugepage/defrag +sed -i '/^GRUB_CMDLINE_LINUX/d' /etc/default/grub +echo "GRUB_CMDLINE_LINUX=\"rhgb quiet transparent_hugepage=never\"" >> /etc/default/grub +grub2-mkconfig -o /boot/grub2/grub.cfg + +reboot + + +``` + +(8)修改系统资源限制 + +``` +echo "* soft stack 3072" >> /etc/security/limits.conf +echo "* hard stack 3072" >> /etc/security/limits.conf +echo "* soft nofile 1000000" >> /etc/security/limits.conf +echo "* hard nofile 1000000" >> /etc/security/limits.conf +echo "* soft nproc unlimited" >> /etc/security/limits.d/90-nproc.conf +tail -n 4 /etc/security/limits.conf +tail -n 1 /etc/security/limits.d/90-nproc.conf + + +``` + +## 2.详细安装 + +(1)下载安装包、创建用户组和目录 + +``` +groupadd dbgrp +useradd -g dbgrp -d /home/omm -m -s /bin/bash omm + echo "omm" | passwd -‐stdin omm +mkdir -p /opt/software/openGauss +chmod 755 -R /opt/software +chown -R omm:dbgrp /opt/software/openGauss +cd /opt/software/openGauss/ +wgethhttps://opengauss.obs.cn-south-1.myhuaweicloud.com/2.0.0/x86/openGauss-2.0.0-CentOS-64bit-all.tar.gz +tar -zxvf openGauss-2.0.0-CentOS-64bit-all.tar.gz +tar -zxvf openGauss-2.0.0-CentOS-64bit-om.tar.gz + + +``` + +(2)配置XML文件 + +``` +cp script/gspylib/etc/conf/cluster_config_template.xml . +具体配置文件为(标红的地方要设置成自己的): + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +``` + +(3)添加lib库 +在 .bashrc文件中添加如下: + +``` +export GPHOME=/opt/huawei/install/om +export PATH=$GPHOME/script/gspylib/pssh/bin:$GPHOME/script:$PATH +export LD_LIBRARY_PATH=$GPHOME/lib:$LD_LIBRARY_PATH +export PYTHONPATH=$GPHOME/lib +export GAUSSHOME=/opt/huawei/install/app +export PATH=$GAUSSHOME/bin:$PATH +export LD_LIBRARY_PATH=$GAUSSHOME/lib:$LD_LIBRARY_PATH +export S3_CLIENT_CRT_FILE=$GAUSSHOME/lib/client.crt +export GAUSS_VERSION=2.0.0 +export PGHOST=/opt/huawei/tmp +export GAUSSLOG=/opt/huawei/log/omm +umask 077 +export GAUSS_ENV=2 +export GS_CLUSTER_NAME=singlenode + + + +``` +(4)交互式安装 +首先是预安装: + +``` +cd /opt/software/openGauss/script +python3 gs_preinstall -U omm -G dbgrp -X +/opt/software/openGauss/cluster_config_template.xml + + + +``` +正常的话,会出现如下信息: +_Parsing the configuration file. +Successfully parsed the configuration file. +Installing the tools on the local node. +Successfully installed the tools on the local node. +Setting pssh path +Successfully set core path. +Are you sure you want to create the user[omm] and create trust for it (yes)? yes +Preparing SSH service. +Successfully prepared SSH service. +Checking OS software. +Successfully check os software. +Checking OS version. +Successfully checked OS version. +Creating cluster's path. +Successfully created cluster's path. +Setting SCTP service. +Successfully set SCTP service. +Set and check OS parameter. +Setting OS parameters. +Successfully set OS parameters. +Warning: Installation environment contains some warning messages. +Please get more details by "/opt/software/openGauss/script/gs_checkos -i A -h node1 --detail". +Set and check OS parameter completed. +Preparing CRON service. +Successfully prepared CRON service. +Setting user environmental variables. +Successfully set user environmental variables. +Setting the dynamic link library. +Successfully set the dynamic link library. +Setting Core file +Successfully set core path. +Setting pssh path +Successfully set pssh path. +Set ARM Optimization. +No need to set ARM Optimization. +Fixing server package owner. +Setting finish flag. +Successfully set finish flag. +Preinstallation succeeded. + +到这里说明预安装完成。 + +然后是正式安装: + +``` + cd script/ + gs_install -X /opt/software/openGauss/cluster_config_template.xml + + + +``` +正常的话会出现如下信息: +Parsing the configuration file. +Check preinstall on every node. +Successfully checked preinstall on every node. +Creating the backup directory. +Successfully created the backup directory. +begin deploy.. +Installing the cluster. +begin prepare Install Cluster.. +Checking the installation environment on all nodes. +begin install Cluster.. +Installing applications on all nodes. +Successfully installed APP. +begin init Instance.. +encrypt cipher and rand files for database. +Please enter password for database: +Please repeat for database: +begin to create CA cert files +The sslcert will be generated in /opt/huawei/install/app/sslcert/om +Cluster installation is completed. +Configuring. +Deleting instances from all nodes. +Successfully deleted instances from all nodes. +Checking node configuration on all nodes. +Initializing instances on all nodes. +Updating instance configuration on all nodes. +Check consistence of memCheck and coresCheck on database nodes. +Configuring pg_hba on all nodes. +Configuration is completed. +Successfully started cluster. +Successfully installed application. +end deploy. + +输入 +``` +gsql -d postgres -p 26000 + + +``` +使数据库在本地运行,没有出现报错信息即说明安装成功。 + + +3.连接设置 +(1)安装jdk1.8 +(2)下载好jdbc压缩包后,解压至: + +``` +/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.302.b08-0.el7_9.x86_64/jre/lib/ext + + +``` +(3)登陆到omm用户上,然后登录数据库主节点,执行如下指令: +NodeName为当前节点名称,还要注意localhost改成对应的。 + +``` +gs_guc reload -N node1-I all -c "listen_addresses='localhost,192.168.2.131’” + + +``` +(4)执行下列指令,在数据库主节点配置文件中增加一条规则: + +``` +gs_guc reload -N all -I all -h "host all user 192.168.17.129/32 sha256" + + +``` +(5)然后通过java程序就可以链接了。 + +```java +import java.sql.*; +public class java_connect_opengauss{ +    public static Connection getConnect(String username, String passwd){ +        String driver = "org.postgresql.Driver"; +        String sourceURL = "jdbc:postgresql://127.0.0.1:26000/postgres"; +        Connection conn = null; +        try{ +            Class.forName(driver); +        } +        catch( Exception e ){ +            e.printStackTrace(); +            return null; +        } +        +        try{ +            conn = DriverManager.getConnection(sourceURL, username, passwd); +            System.out.println("Connection succeed!"); +        } +        catch(Exception e) +        { +            e.printStackTrace(); +            return null; +        } +        +        return conn; +    }; +    public static void main(String[] args) { +        //输入数据库的用户名和密码 +        Connection conn = getConnect("username", "password"); +        try { +            conn.close();   +        } catch (SQLException e) {     +            e.printStackTrace();   +        } +    } +} + + +``` + + + +``` +Javac java_connect_opengauss.java +java java_connect_opengauss + + +``` +然后会出出现Connection succeed! +即代表连接成功 diff --git a/content/zh/post/yy/image/.DS_Store b/content/zh/post/yy/image/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..a6a4fe557a05fd2620e5e9da1c79633210899c20 GIT binary patch literal 6148 zcmeHKF-`+P474Fgk!VsQqcCw5aA2f}g2`}6U1*dI^(N$p&M+&kOY+CJ@L z#OF_Xgs*?Y<_=I^3P=GdAO)m=6gW!(_FmZXK2cE$NC7GEuK>Rf4NmNZLt=b75Ml%X zE|3nxI%WxAV*=OX8`y+#aAI`XaRdf||mbo00w=hV$!6N<;}$hRmr?}>_1 zKnjc%xXtZ~{r?F*GyjiC+DQQ^a8(NUV)wG!;+3kmPF{|^w!vTFtoeb{unr1Bv}0hj hV{F)tAEGGh8rOK<3x~v@BOi32{tQqTnH0FR0)LK58e;$e literal 0 HcmV?d00001 diff --git a/content/zh/post/yy/image/1.png b/content/zh/post/yy/image/1.png new file mode 100644 index 0000000000000000000000000000000000000000..12f7e47eaecd1e3ea3ba6e9c3cf0af4cc8eba165 GIT binary patch literal 58088 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%0AtK*l=r4fcjU9*eh1nSvPcT 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 inEo}CAae-k)IchWrcX&K#5yfB9x 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 He