Greenplum功能调研

news2024/10/6 2:24:03

Greenplum 介绍

文章目录

      • Greenplum 介绍
        • 1. 背景介绍
        • 2. 特点
        • 3. 架构
        • 4. MPP结构
        • 5. MVCC
        • 6. 语法结构
        • 7. GreenPlum集群常用命令
        • 7. 维护
        • 8. 参考

1. 背景介绍

  • Greenplum。公司成立于2003年,2006年推出了首款产品,其主营业务关注在数据仓库和商业智能方面.
  • Greenplum基于postgresql开发,架构采用了MPP(大规模并行处理)。在 MPP 系统中,每个 SMP节点也可以运行自己的操作系统、数据库等。
    换言之,每个节点内的 CPU 不能访问另一个节点的内存。节点之间的信息交互是通过节点互联网络实现的.

2. 特点

  • 各个节点间shared-nothing: 各个处理单元都有自己私有的CPU/内存/硬盘等,不存在共享资源,
    各处理单元之间通过协议通信,并行处理和扩展能力更好。各节点相互独立,各自处理自己的数据,处理后的结果可能向上层汇总或在节点间流转。
    Share-Nothing架构在扩展性和成本上都具有明显优势。
  • MPP结构: 大规模并行处理系统是由许多松耦合处理单元组成的,借助MPP这种高性能的系统架构,
    Greenplum可以将TB级的数据仓库负载分解,并使用所有的系统资源并行处理单个查询。
  • MVCC: 与事务型数据库系统通过锁机制来控制并发访问的机制不同, GPDB使用多版本控制(Multiversion Concurrency Control/MVCC)保证数据一致性。
    这意味着在查询数据库时,每个事务看到的只是数据的快照,其确保当前的事务不会看到其他事务在相同记录上的修改。据此为数据库的每个事务提供事务隔离。
    使用MVCC而不是使用锁机制的最大优势是,MVCC对查询(读)的锁与写的锁不存在冲突,并且读与写之间从不互相阻塞。
  • 遵循SQL标准一致性, 基本兼容SQL语法(psql), 因此查询较为灵活, 绝大部分场景都能支持
  • 支持多方式的授权管理及审计,表级别粒度
  • 近乎线性的在线扩展能力- 单节点master的cpu和带宽可能会成为瓶颈

3. 架构

  • 组成: Greenplum主要由Master节点、Segment节点、interconnect三大部分
    • Master节点不存放任何用户数据,只是对客户端进行访问控制和存储表分布逻辑的元数据
    • Segment节点负责数据的存储,可以对分布键进行优化以充分利用Segment节点的io性能来扩展整集群的io性能
      存储方式可以根据数据热度或者访问模式的不同而使用不同的存储方式。
      一张表的不同数据可以使用不同的物理存储方式:行存储、列存储、外部表
    • interconnect负责不同PostgreSQL实例(即 segment)之间的通信
  • 存储结构: Greenplum提供称为“多态存储”的灵活存储方式。多态存储可以根据数据热度或者访问模式的不同而使用不同的存储方式。
    一张表的不同数据可以使用不同的物理存储方式。支持的存储方式包含:
    • 行存储:行存储是传统数据库常用的存储方式,特点是访问比较快,多列更新比较容易。
    • 列存储:列存储按列保存,不同列的数据存储在不同的地方(通常是不同文件中)。适合一次只访问宽表中某几个字段的情况。列存储的另外一个优势是压缩比高。
    • 外部表:数据保存在其他系统中例如HDFS,数据库只保留元数据信息。

4. MPP结构

  • Master节点不存放任何用户数据,只是对客户端进行访问控制和存储表分布逻辑的元数据
  • Segment节点负责数据的存储,可以对分布键进行优化以充分利用Segment节点的io性能来扩展整集群的io性能
  • 存储方式可以根据数据热度或者访问模式的不同而使用不同的存储方式。一张表的不同数据可以使用不同的物理存储方式:行存储、列存储、外部表
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2KoUyUL8-1691049797698)(https://images2015.cnblogs.com/blog/133059/201608/133059-20160817142614578-1792667130.png "MVCC 示例图")]

5. MVCC

  • MVCC优化的目标是读操作不会阻塞写操作,写操作也不会阻塞读操作。
  • 实现方式: 在 update一个数据时,将创建数据项目的新版本,同时保留旧版本,并做上标记,即采用多版本的方法来解决读和写之间的冲突。
    由于写的时候旧版本数据不会被删除,读和写发生在了不同版本的数据上,读和写操作便不会发生冲突。这种方法允许Greenplum在读写同时进行的情况下,
    仍然能够提供高并发特性。
  • 每一个数据 都有xmin(新增修改操作的事物id)和xmax(删除操作的事物id)两个属性, 每次事物操作都会生成一个快照,
    快照内容包括xmin xmax 和 running 即正在执行的事物id集合
  • 数据可见的条件: xmin有值 且 xmin小于快照的xmin 且 不在running中 且 (xmax无值 或 有值但在running中 或 有值但超了快照的xmax)
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6sN76cOU-1691049797698)(https://mmbiz.qpic.cn/mmbiz_png/xq1Bf3uUkCicaicZicRDLN8cGJA0YEycs3gx6jiaREarJMVxfA20CYU8sMpq8Q8es67iawuIsR2MIQsSfxsqaMbN8Sw/640 "可见性示例图片")]

6. 语法结构

  • 遵循SQL标准一致性, 基本兼容SQL语法(psql) 具体请看Greenplum特点概要

  • psql示例

    切到系统用户postgres 使用psql命令登录PostgreSQL控制台。
    这时相当于系统用户postgres以同名数据库用户的身份,登录数据库,这是不用输入密码的。如果一切正常,系统提示符会变为"postgres=#",表示这时已经进入了数据库控制台。

    psql -d postgres
    

    以下的命令都在控制台内完成。
    第一件事是使用\password命令,为postgres用户设置一个密码。

    \password postgres
    

    第二件事是创建数据库用户dbuser(刚才创建的是Linux系统用户),并设置密码。

    CREATE USER dbuser WITH PASSWORD 'password';
    

    第三件事是创建用户数据库,这里为exampledb,并指定所有者为dbuser。

    CREATE DATABASE exampledb OWNER dbuser;
    

    第四件事是将exampledb数据库的所有权限都赋予dbuser,否则dbuser只能登录控制台,没有任何数据库操作权限。

    GRANT ALL PRIVILEGES ON DATABASE exampledb to dbuser;
    

    使用\q命令退出控制台(也可以直接按ctrl+D)。

    \q
    

    连接gp命令:

    psql -d 库名 -h ip地址 -p 端口号 -U 用户名;
    

    gp 添加分区:

    alter table 表名 add partition d20190611 values('20190611') ;
    

    gp 新建表:

    alter table 表名 rename column old_column_name to new_column_name;  
    

    gp 添加字段:

    alter table 表名 add column update_flag varchar(255);
    

    gp 删除字段:

    ALTER TABLE 表名 DROP COLUMN rt_gather_price_remark;
    

    gp 修改字段的类型:

    alter table 表名 alter column rt_gather_price_remark varchar(200) text; 
    

    gp 删除表:

    drop table if exists 表名;
    

    gp 删除分区:

    alter table 表名 DROP partition d20190729;
    

    gp 清空分区数据:

    alter table 表名 truncate partition d20191010;
    

    gp 删除进程:

    select pg_cancel_backend(407367);
    

    gp 查看表结构:

    SELECT a.attnum,a.attname AS field,t.typname AS type,a.attlen AS length,a 
    .atttypmod AS lengthvar,a.attnotnull AS notnull from pg_class c,pg_attribute a,pg_type t where 
    c.relname='表名' and a.attnum>0 and a.attrelid=c.oid and a.atttypid=t.oid order by attnum ;
    

7. GreenPlum集群常用命令

命令 参数 作用
gpstate -b => 显示简要状态
gpstate -c => 显示主镜像映射
gpstart -d => 指定数据目录(默认值: M A S T E R D A T A D I R E C T O R Y ) g p s t a t e − e = > 显示具有镜像状态问题的片段 g p s t a t e − f = > 显示备用主机详细信息 g p s t a t e − i = > 显示 G R I P L U M 数据库版本 g p s t a t e − m = > 显示镜像实例同步状态 g p s t a t e − p = > 显示使用端口 g p s t a t e − Q = > 快速检查主机状态 g p s t a t e − s = > 显示集群详细信息 g p s t a t e − v = > 显示详细信息 g p c o n f i g 命令参数作用 g p c o n f i g − c = > − − c h a n g e p a r a m n a m e 通过在 p o s t g r e s q l . c o n f 文件的底部添加新的设置来改变配置参数的设置。 g p c o n f i g − v = > − − v a l u e v a l u e 用于由 − c 选项指定的配置参数的值。默认情况下,此值将应用于所有 S e g m e n t 及其镜像、 M a s t e r 和后备 M a s t e r 。 g p c o n f i g − m = > − − m a s t e r v a l u e m a s t e r v a l u e 用于由 − c 选项指定的配置参数的 M a s t e r 值。如果指定,则该值仅适用于 M a s t e r 和后备 M a s t e r 。该选项只能与 − v 一起使用。 g p c o n f i g − m a s t e r o n l y = > 当被指定时, g p c o n f i g 将仅编辑 M a s t e r 的 p o s t g r e s q l . c o n f 文件。 g p c o n f i g − r = > − − r e m o v e p a r a m n a m e 通过注释掉 p o s t g r e s q l . c o n f 文件中的项删除配置参数。 g p c o n f i g − l = > − − l i s t 列出所有被 g p c o n f i g 工具支持的配置参数。 g p c o n f i g − s = > − − s h o w p a r a m n a m e 显示在 G r e e n p l u m 数据库系统中所有实例( M a s t e r 和 S e g m e n t )上使用的配置参数的值。如果实例中参数值存在差异,则工具将显示错误消息。使用 − s = > 选项运行 g p c o n f i g 将直接从数据库中读取参数值,而不是从 p o s t g r e s q l . c o n f 文件中读取。如果用户使用 g p c o n f i g 在所有 S e g m e n t 中设置配置参数,然后运行 g p c o n f i g − s 来验证更改,用户仍可能会看到以前的(旧)值。用户必须重新加载配置文件( g p s t o p − u )或重新启动系统( g p s t o p − r )以使更改生效。 g p c o n f i g − − f i l e = > 对于配置参数,显示在 G r e e n p l u m 数据库系统中的所有 S e g m e n t ( M a s t e r 和 S e g m e n t )上的 p o s t g r e s q l . c o n f 文件中的值。如果实例中的参数值存在差异,则工具会显示一个消息。必须与 − s 选项一起指定。 g p c o n f i g − − f i l e − c o m p a r e 对于配置参数,将当前 G r e e n p l u m 数据库值与主机( M a s t e r 和 S e g m e n t )上 p o s t g r e s q l . c o n f 文件中的值进行比较。 g p c o n f i g − − s k i p v a l i d a t i o n 覆盖 g p c o n f i g 的系统验证检查,并允许用户对任何服务器配置参数进行操作,包括隐藏参数和 g p c o n f i g 无法更改的受限参数。当与 − l 选项(列表)一起使用时,它显示受限参数的列表。警告:使用此选项设置配置参数时要格外小心。 g p c o n f i g − − v e r b o s e 在 g p c o n f i g 命令执行期间显示额外的日志信息。 g p c o n f i g − − d e b u g 设置日志输出级别为调试级别。 g p c o n f i g − ? ∣ − h ∣ − − h e l p 显示在线帮助。 g p s t a r t 命令参数作用 g p s t a r t − a = > 快速启动 ∣ g p s t a r t − d = > 指定数据目录(默认值: MASTER_DATA_DIRECTORY) gpstate -e => 显示具有镜像状态问题的片段 gpstate -f => 显示备用主机详细信息 gpstate -i => 显示GRIPLUM数据库版本 gpstate -m => 显示镜像实例同步状态 gpstate -p => 显示使用端口 gpstate -Q => 快速检查主机状态 gpstate -s => 显示集群详细信息 gpstate -v => 显示详细信息 gpconfig 命令 参数 作用 gpconfig -c => --change param_name 通过在postgresql.conf 文件的底部添加新的设置来改变配置参数的设置。 gpconfig -v => --value value 用于由-c选项指定的配置参数的值。默认情况下,此值将应用于所有Segment及其镜像、Master和后备Master。 gpconfig -m => --mastervalue master_value 用于由-c 选项指定的配置参数的Master值。如果指定,则该值仅适用于Master和后备Master。该选项只能与-v一起使用。 gpconfig -masteronly =>当被指定时,gpconfig 将仅编辑Master的postgresql.conf文件。 gpconfig -r => --remove param_name 通过注释掉postgresql.conf文件中的项删除配置参数。 gpconfig -l => --list 列出所有被gpconfig工具支持的配置参数。 gpconfig -s => --show param_name 显示在Greenplum数据库系统中所有实例(Master和Segment)上使用的配置参数的值。如果实例中参数值存在差异,则工具将显示错误消息。使用-s=>选项运行gpconfig将直接从数据库中读取参数值,而不是从postgresql.conf文件中读取。如果用户使用gpconfig 在所有Segment中设置配置参数,然后运行gpconfig -s来验证更改,用户仍可能会看到以前的(旧)值。用户必须重新加载配置文件(gpstop -u)或重新启动系统(gpstop -r)以使更改生效。 gpconfig --file => 对于配置参数,显示在Greenplum数据库系统中的所有Segment(Master和Segment)上的postgresql.conf文件中的值。如果实例中的参数值存在差异,则工具会显示一个消息。必须与-s选项一起指定。 gpconfig --file-compare 对于配置参数,将当前Greenplum数据库值与主机(Master和Segment)上postgresql.conf文件中的值进行比较。 gpconfig --skipvalidation 覆盖gpconfig的系统验证检查,并允许用户对任何服务器配置参数进行操作,包括隐藏参数和gpconfig无法更改的受限参数。当与-l选项(列表)一起使用时,它显示受限参数的列表。 警告: 使用此选项设置配置参数时要格外小心。 gpconfig --verbose 在gpconfig命令执行期间显示额外的日志信息。 gpconfig --debug 设置日志输出级别为调试级别。 gpconfig -? | -h | --help 显示在线帮助。 gpstart 命令 参数 作用 gpstart -a => 快速启动| gpstart -d => 指定数据目录(默认值: MASTERDATADIRECTORYgpstatee=>显示具有镜像状态问题的片段gpstatef=>显示备用主机详细信息gpstatei=>显示GRIPLUM数据库版本gpstatem=>显示镜像实例同步状态gpstatep=>显示使用端口gpstateQ=>快速检查主机状态gpstates=>显示集群详细信息gpstatev=>显示详细信息gpconfig命令参数作用gpconfigc=>changeparamname通过在postgresql.conf文件的底部添加新的设置来改变配置参数的设置。gpconfigv=>valuevalue用于由c选项指定的配置参数的值。默认情况下,此值将应用于所有Segment及其镜像、Master和后备Mastergpconfigm=>mastervaluemastervalue用于由c选项指定的配置参数的Master值。如果指定,则该值仅适用于Master和后备Master。该选项只能与v一起使用。gpconfigmasteronly=>当被指定时,gpconfig将仅编辑Masterpostgresql.conf文件。gpconfigr=>removeparamname通过注释掉postgresql.conf文件中的项删除配置参数。gpconfigl=>list列出所有被gpconfig工具支持的配置参数。gpconfigs=>showparamname显示在Greenplum数据库系统中所有实例(MasterSegment)上使用的配置参数的值。如果实例中参数值存在差异,则工具将显示错误消息。使用s=>选项运行gpconfig将直接从数据库中读取参数值,而不是从postgresql.conf文件中读取。如果用户使用gpconfig在所有Segment中设置配置参数,然后运行gpconfigs来验证更改,用户仍可能会看到以前的(旧)值。用户必须重新加载配置文件(gpstopu)或重新启动系统(gpstopr)以使更改生效。gpconfigfile=>对于配置参数,显示在Greenplum数据库系统中的所有SegmentMasterSegment)上的postgresql.conf文件中的值。如果实例中的参数值存在差异,则工具会显示一个消息。必须与s选项一起指定。gpconfigfilecompare对于配置参数,将当前Greenplum数据库值与主机(MasterSegment)上postgresql.conf文件中的值进行比较。gpconfigskipvalidation覆盖gpconfig的系统验证检查,并允许用户对任何服务器配置参数进行操作,包括隐藏参数和gpconfig无法更改的受限参数。当与l选项(列表)一起使用时,它显示受限参数的列表。警告:使用此选项设置配置参数时要格外小心。gpconfigverbosegpconfig命令执行期间显示额外的日志信息。gpconfigdebug设置日志输出级别为调试级别。gpconfig?hhelp显示在线帮助。gpstart命令参数作用gpstarta=>快速启动gpstartd=>指定数据目录(默认值:MASTER_DATA_DIRECTORY)
gpstart -q => 在安静模式下运行。命令输出不显示在屏幕,但仍然写入日志文件。
gpstart -m => 以维护模式连接到Master进行目录维护。例如:$ PGOPTIONS=‘-c gp_session_role=utility’ psql postgres
gpstart -R => 管理员连接
gpstart -v => 显示详细启动信息
gpstop
命令 参数 作用
gpstop -a => 快速停止
gpstop -d => 指定数据目录(默认值: M A S T E R D A T A D I R E C T O R Y ) g p s t o p − m = > 维护模式 g p s t o p − q = > 在安静模式下运行。命令输出不显示在屏幕,但仍然写入日志文件。 g p s t o p − r = > 停止所有实例,然后重启系统 g p s t o p − u = > 重新加载配置文件 p o s t g r e s q l . c o n f 和 p g h b a . c o n f g p s t o p − v = > 显示详细启动信息 g p s t o p − M f a s t = > 快速关闭。正在进行的任何事务都被中断。然后滚回去。 g p s t o p − M i m m e d i a t e = > 立即关闭。正在进行的任何事务都被中止。不推荐这种关闭模式,并且在某些情况下可能导致数据库损坏需要手动恢复。 g p s t o p − M s m a r t = > 智能关闭。如果存在活动连接,则此命令在警告时失败。这是默认的关机模式。 g p s t o p − − h o s t h o s t n a m e = > 停用 s e g m e n t s 数据节点,不能与 − m 、 − r 、 − u 、 − y 同时使用集群恢复命令参数作用 g p r e c o v e r s e g − a = > 快速恢复 g p r e c o v e r s e g − i = > 指定恢复文件 g p r e c o v e r s e g − d = > 指定数据目录 g p r e c o v e r s e g − l = > 指定日志文件 g p r e c o v e r s e g − r = > 平衡数据 g p r e c o v e r s e g − s = > 指定配置空间文件 g p r e c o v e r s e g − o = > 指定恢复配置文件 g p r e c o v e r s e g − p = > 指定额外的备用机 g p r e c o v e r s e g − S = > 指定输出配置空间文件激活备库流程命令参数作用 g p a c t i v a t e s t a n d b y − d 路径 ∣ 使用数据目录绝对路径,默认: MASTER_DATA_DIRECTORY) gpstop -m => 维护模式 gpstop -q => 在安静模式下运行。命令输出不显示在屏幕,但仍然写入日志文件。 gpstop -r => 停止所有实例,然后重启系统 gpstop -u => 重新加载配置文件 postgresql.conf 和 pg_hba.conf gpstop -v => 显示详细启动信息 gpstop -M fast => 快速关闭。正在进行的任何事务都被中断。然后滚回去。 gpstop -M immediate => 立即关闭。正在进行的任何事务都被中止。不推荐这种关闭模式,并且在某些情况下可能导致数据库损坏需要手动恢复。 gpstop -M smart => 智能关闭。如果存在活动连接,则此命令在警告时失败。这是默认的关机模式。 gpstop --host hostname => 停用segments数据节点,不能与-m、-r、-u、-y同时使用 集群恢复 命令 参数 作用 gprecoverseg -a => 快速恢复 gprecoverseg -i => 指定恢复文件 gprecoverseg -d => 指定数据目录 gprecoverseg -l => 指定日志文件 gprecoverseg -r => 平衡数据 gprecoverseg -s => 指定配置空间文件 gprecoverseg -o => 指定恢复配置文件 gprecoverseg -p => 指定额外的备用机 gprecoverseg -S => 指定输出配置空间文件 激活备库流程 命令 参数 作用 gpactivatestandby -d 路径 | 使用数据目录绝对路径,默认: MASTERDATADIRECTORYgpstopm=>维护模式gpstopq=>在安静模式下运行。命令输出不显示在屏幕,但仍然写入日志文件。gpstopr=>停止所有实例,然后重启系统gpstopu=>重新加载配置文件postgresql.confpghba.confgpstopv=>显示详细启动信息gpstopMfast=>快速关闭。正在进行的任何事务都被中断。然后滚回去。gpstopMimmediate=>立即关闭。正在进行的任何事务都被中止。不推荐这种关闭模式,并且在某些情况下可能导致数据库损坏需要手动恢复。gpstopMsmart=>智能关闭。如果存在活动连接,则此命令在警告时失败。这是默认的关机模式。gpstophosthostname=>停用segments数据节点,不能与mruy同时使用集群恢复命令参数作用gprecoversega=>快速恢复gprecoversegi=>指定恢复文件gprecoversegd=>指定数据目录gprecoversegl=>指定日志文件gprecoversegr=>平衡数据gprecoversegs=>指定配置空间文件gprecoversego=>指定恢复配置文件gprecoversegp=>指定额外的备用机gprecoversegS=>指定输出配置空间文件激活备库流程命令参数作用gpactivatestandbyd路径使用数据目录绝对路径,默认:MASTER_DATA_DIRECTORY
gpactivatestandby -f | 强制激活备份主机
gpactivatestandby -v | 显示此版本信息
始化备Master
命令 参数 作用
gpinitstandby -s 备库名称 => 指定新备库
gpinitstandby -D => debug 模式
gpinitstandby -r => 移除备用机
参考文档
https://gp-docs-cn.github.io/docs/utility_guide/admin_utilities/gprecoverseg.html
https://gpcc.docs.pivotal.io/430/topics/overview.html

7. 维护

  • Greenplum数据库中使用的MVCC事务并发模型会产生很多的历史数据。如需删除需要用VACUUM命令来回收。
    VACUUM命令还会收集表级的统计信息,因此还是有必要去清理追加优化表。
    清理逻辑 在每一个Segment上,会创建一个新的Segment文件 把可见行从当前Segment复制到该文件中。当Segment文件被拷贝完时,将会安排删除原始的Segment文件并且让新 的Segment文件变得可用。
  • 如果一个Segment文件中隐藏行和所有行的比率低于一个阈值(默认是10),该Segment文件不会被紧缩。

8. 参考

  • Greenplum网站 https://cn.greenplum.org/
  • Greenplum 中文文档 http://docs-cn.greenplum.org/v6/homenav.html
  • greenplum数据库类型说明
  • greenplum开源版本(注: 企业版和开源版功能是差不多,不过前者,就是服务更多,功能更全。)
    • 其官方手册 https://greenplum.org/documentation/
    • 其下载介质地址 https://github.com/greenplum-db/gpdb/releases
  • greenplum商业版本(注: 下载介质必须要付费,官方手册可以在线或离线看)
    • 其官方手册 http://gpdb.docs.pivotal.io/570/main/index.html)
    • 其下载介质地址 https://network.pivotal.io/products/pivotal-gpdb/
  • 使用Jmeter测试教程
  • Greenplum常用问题

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

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

相关文章

K最近邻算法:简单高效的分类和回归方法(三)

文章目录 🍀引言🍀训练集和测试集🍀sklearn中封装好的train_test_split🍀超参数 🍀引言 本节以KNN算法为主,简单介绍一下训练集和测试集、超参数 🍀训练集和测试集 训练集和测试集是机器学习和深…

个人对智能家居平台选择的思考

本人之前开发过不少MicroPython程序,其中涉及到自动化以及局域网控制思路,也可以作为智能家居的实现方式。而NodeMCUESPHome的方案具有方便添加硬件、容易更新程序和容量占用小的优势,本人也查看过相关教程后感觉部署ESPHome和编译固件的步骤…

科学与信息化杂志科学与信息化杂志社科学与信息化编辑部2023年第14期目录

科学视野 现代技术角度下对光纤通信传输技术的思考 崔文佳1-3 浅谈非道路移动机械污染防治难点与对策 刘华4-6 基层公路养护档案管理 高富丽7-9《科学与信息化》投稿:cnqikantg126.com 奉贤区第二次全国污染源普查及防治对策建议 卫伟10-12 数字化赋能在国土空间治理…

工厂方法模式-java实现

介绍 工厂方法模式,通过把工厂抽象为一个接口,这样当我们新增具体产品的时候,就只需要实现一个新的具体工厂类即可。一个具体工厂类,对应着一个产品。 请注意:在工厂方法模式中,一个具体工厂类只对应生产…

vue3+vite配置多入口文件

1.修改vite.config.ts 文件: 2.在src目录底下建相应的html文件和对应的ts入口文件和vue文件,如下图: npm run dev运行后本地访问: http://127.0.0.1:5173/home_index.htmlnpm run build打包后的结构如图:

物联网的定义、原理、示例、未来

什么是物联网? 物联网 (IoT) 是指由嵌入传感器、软件和网络连接的物理设备、车辆、电器和其他物理对象组成的网络,允许它们收集和共享数据。这些设备(也称为“智能对象”)的范围可以从简单的“智能家居”设备(如智能恒温器)到可穿戴设备(如智能手表和支持RFID的服…

Anaconda Prompt使用pip安装PyQt5-tools后无法打开Spyder或闪退

艹!MLGBZD! 真TMD折腾人! 出现原因: 首次安装完Anaconda3-2023.07-1-Windows-x86_64.exe后首次打开Spyder,此时是没有问题的,然后打开Anaconda Prompt,查看有哪些包,pip list 这时候开始首次安…

k8s之Pod控制器

目录 一、Pod控制器及其功用二、pod控制器的多种类型2.1 pod容器中的有状态和无状态的区别 三、Deployment 控制器四、SatefulSet 控制器4.1 StatefulSet由以下几个部分组成4.2 为什么要有headless?4.3 为什么要有volumeClaimTemplate?4.4 滚动更新4.5 扩…

Rocketmq Filter 消息过滤(TAGS、SQL92)原理详解 源码解析

1. 背景 1.1 Rocketmq 支持的过滤方式 Rocketmq 作为金融级的业务消息中间件,拥有强大的消息过滤能力。其支持多种消息过滤方式: 表达式过滤:通过设置过滤表达式的方式进行过滤 TAG:根据消息的 tag 进行过滤。SQL92&#xff1a…

【每日一题】—— B. Maximum Rounding(Codeforces Round 891 (Div. 3))

🌏博客主页:PH_modest的博客主页 🚩当前专栏:每日一题 💌其他专栏: 🔴 每日反刍 🟡 C跬步积累 🟢 C语言跬步积累 🌈座右铭:广积粮,缓称…

UNIX网络编程——UDP协议,CS架构

目录 一.socket创建通信的套接字 二.IPv4地址结构 三.通用地址结构 四. 两种地址结构的使用场合 五.sendto发送数据 六.bind固定地址信息​编辑 七.recvfrom接受UDP的消息​编辑 一.socket创建通信的套接字 二.IPv4地址结构 三.通用地址结构 四. 两种地址结构的使用场合…

MySQL— 基础语法大全及操作演示!!

MySQL—— 基础 一、MySQL概述1.1 、数据库相关概念1.2 、MySQL 客户端连接1.3 、数据模型 二、SQL2.1、SQL通用语法2.2、SQL分类2.3、DDL2.4、DML2.5、DQL2.6、DCL 三、函数四、约束五、多表查询六、事务 一、MySQL概述 1.1 、数据库相关概念 数据库、数据库管理系统、SQL&a…

sql server 删除指定字符串

replace方法 update #test set FIVCODEreplace(FIVCODE,440,) WHERE SOURCEFENTRYID140728

嵌入式软件测试-测试类型

使用质量属性来定义测试类型,即回归到测试类型的本质。 如果测试负载在系统允许的负载范围内,那测试的是系统的功能,此时的测试属于功能性测试;若在此基础上再加大测试时间,那就是稳定性测试了,此时关注的…

有哪些常用的设计素材网站?

素材网站可以是设计师和创意人员的灵感来源。这些网站收集了各种类型的平面设计图片,包括标志、海报、网站设计、包装设计、插图等。在本文中,我将推荐15个平面设计图素材网站,以帮助您找到新的想法和灵感。 1.即时设计资源社区 即时设计资…

8月8日上课内容 研究nginx组件rewrite

location 匹配uri location 匹配的规则和优先级。(重点,面试会问,必须理解和掌握) nginx常用的变量,这个要求掌握 rewrite:重定向功能。有需要掌握,有需要理解的。 location匹配:…

【RabbitMQ】golang客户端教程5——使用topic交换器

topic交换器(主题交换器) 发送到topic交换器的消息不能具有随意的routing_key——它必须是单词列表,以点分隔。这些词可以是任何东西,但通常它们指定与消息相关的某些功能。一些有效的routing_key示例:“stock.usd.ny…

角角の Qt学习笔记(一)

目录 一、解决在创建新项目时遇到的几个问题 二、信号和槽(非自定义) 三、调用 UI 中的元素(比如按钮) 一、解决在创建新项目时遇到的几个问题 在新建项目时,我选择的构建系统为CMake。然后勾选了Generate form&…

程序员月薪3w、4w难吗?该如何突破?

先说结论,如果你能成为互联网大厂的程序员,那么恭喜你,你的月薪大概率能达到3w、4w,甚至更高,此外一些非互联网大厂的程序员,比如金融、汽车制造等,月薪突破3w、4w的概率也非常高,但…

分享一个计算器

先看效果&#xff1a; 再看代码&#xff08;查看更多&#xff09;&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>计算器</title><style>* {box-sizing: border-box;}body…