云服务器内容精选
-
范围分区 范围分区(Range Partition)根据为每个分区建立的分区键的值范围将数据映射到分区。范围分区是生产系统中最常见的分区类型,通常在以时间维度(Date、Time Stamp)描述数据场景中使用。范围分区有两种语法格式,示例如下: VALUES LESS THAN的语法格式 对于从句是VALUE LESS THAN的语法格式,范围分区策略的分区键最多支持16列。 单列分区键示例如下: gaussdb=# CREATE TABLE range_sales_single_key ( product_id INT4 NOT NULL, customer_id INT4 NOT NULL, time DATE, channel_id CHAR(1), type_id INT4, quantity_sold NUMERIC(3), amount_sold NUMERIC(10,2) ) PARTITION BY RANGE (time) ( PARTITION date_202001 VALUES LESS THAN ('2020-02-01'), PARTITION date_202002 VALUES LESS THAN ('2020-03-01'), PARTITION date_202003 VALUES LESS THAN ('2020-04-01'), PARTITION date_202004 VALUES LESS THAN ('2020-05-01') ); --清理示例 gaussdb=# DROP TABLE range_sales_single_key; 其中date_202002表示2020年2月的分区,将包含分区键值从2020年2月1日到2020年2月29日的数据。 每个分区都有一个VALUES LESS子句,用于指定分区的非包含上限。大于或等于该分区键的任何值都将添加到下一个分区。除第一个分区外,所有分区都具有由前一个分区的VALUES LESS子句指定的隐式下限。可以为最高分区定义MAXVALUE关键字,MAXVALUE表示一个虚拟无限值,其排序高于分区键的任何其他可能值,包括空值。 多列分区键示例如下: gaussdb=# CREATE TABLE range_sales ( c1 INT4 NOT NULL, c2 INT4 NOT NULL, c3 CHAR(1) ) PARTITION BY RANGE (c1,c2) ( PARTITION p1 VALUES LESS THAN (10,10), PARTITION p2 VALUES LESS THAN (10,20), PARTITION p3 VALUES LESS THAN (20,10) ); gaussdb=# INSERT INTO range_sales VALUES(9,5,'a'); gaussdb=# INSERT INTO range_sales VALUES(9,20,'a'); gaussdb=# INSERT INTO range_sales VALUES(9,21,'a'); gaussdb=# INSERT INTO range_sales VALUES(10,5,'a'); gaussdb=# INSERT INTO range_sales VALUES(10,15,'a'); gaussdb=# INSERT INTO range_sales VALUES(10,20,'a'); gaussdb=# INSERT INTO range_sales VALUES(10,21,'a'); gaussdb=# INSERT INTO range_sales VALUES(11,5,'a'); gaussdb=# INSERT INTO range_sales VALUES(11,20,'a'); gaussdb=# INSERT INTO range_sales VALUES(11,21,'a'); gaussdb=# SELECT * FROM range_sales PARTITION (p1); c1 | c2 | c3 ----+----+---- 9 | 5 | a 9 | 20 | a 9 | 21 | a 10 | 5 | a (4 rows) gaussdb=# SELECT * FROM range_sales PARTITION (p2); c1 | c2 | c3 ----+----+---- 10 | 15 | a (1 row) gaussdb=# SELECT * FROM range_sales PARTITION (p3); c1 | c2 | c3 ----+----+---- 10 | 20 | a 10 | 21 | a 11 | 5 | a 11 | 20 | a 11 | 21 | a (5 rows) --清理示例 gaussdb=# DROP TABLE range_sales; 多列分区的分区规则如下: 从第一列开始比较。 如果插入的值当前列小于分区当前列边界值,则直接插入。 如果插入的当前列等于分区当前列的边界值,则比较插入值的下一列与分区下一列边界值的大小。 如果插入的当前列大于分区当前列的边界值,则换下一个分区进行比较。 START END语法格式 对于从句是START END语法格式,范围分区策略的分区键最多支持1列。 示例如下: -- 创建表空间 gaussdb=# CREATE TABLESPACE startend_tbs1 LOCATION '/home/omm/startend_tbs1'; gaussdb=# CREATE TABLESPACE startend_tbs2 LOCATION '/home/omm/startend_tbs2'; gaussdb=# CREATE TABLESPACE startend_tbs3 LOCATION '/home/omm/startend_tbs3'; gaussdb=# CREATE TABLESPACE startend_tbs4 LOCATION '/home/omm/startend_tbs4'; -- 创建临时schema gaussdb=# CREATE SCHEMA tpcds; gaussdb=# SET CURRENT_SCHEMA TO tpcds; -- 创建分区表,分区键是integer类型 gaussdb=# CREATE TABLE tpcds.startend_pt (c1 INT, c2 INT) TABLESPACE startend_tbs1 PARTITION BY RANGE (c2) ( PARTITION p1 START(1) END(1000) EVERY(200) TABLESPACE startend_tbs2, PARTITION p2 END(2000), PARTITION p3 START(2000) END(2500) TABLESPACE startend_tbs3, PARTITION p4 START(2500), PARTITION p5 START(3000) END(5000) EVERY(1000) TABLESPACE startend_tbs4 ) ENABLE ROW MOVEMENT; -- 查看分区表信息 gaussdb=# SELECT relname, boundaries, spcname FROM pg_partition p JOIN pg_tablespace t ON p.reltablespace=t.oid and p.parentid='tpcds.startend_pt'::regclass ORDER BY 1; relname | boundaries | spcname -------------+------------+--------------- p1_0 | {1} | startend_tbs2 p1_1 | {201} | startend_tbs2 p1_2 | {401} | startend_tbs2 p1_3 | {601} | startend_tbs2 p1_4 | {801} | startend_tbs2 p1_5 | {1000} | startend_tbs2 p2 | {2000} | startend_tbs1 p3 | {2500} | startend_tbs3 p4 | {3000} | startend_tbs1 p5_1 | {4000} | startend_tbs4 p5_2 | {5000} | startend_tbs4 startend_pt | | startend_tbs1 (12 rows) --清理示例 gaussdb=# DROP TABLE tpcds.startend_pt; DROP TABLE gaussdb=# DROP SCHEMA tpcds; DROP SCHEMA 父主题: 分区策略
-
GES系统策略 表1 GES系统策略 策略名称 描述 GES FullAccess 图引擎服务管理员权限,拥有该权限的用户拥有图引擎服务的全部权限,包括创建、删除、访问、升级等操作。 说明: 拥有该权限的用户需要同时拥有Tenant Guest、Server Administrator、VPC Administrator权限。 如果需要绑定/解绑EIP,则还需要拥有Security Administrator角色用于创建委托。Security Administrator角色权限较大,可以使用如下自定义策略替代:"iam:permissions:listRolesForAgencyOnD",iam:permissions:listRolesForAgency","iam:roles:listRoles","iam:permissions:listRolesForAgencyOnProject","iam:agencies:listAgencies","iam:roles:createRole","iam:permissions:grantRoleToAgencyOnDomain","iam:agencies:getAgency","iam:agencies:createAgency","iam:roles:updateRole","iam:permissions:grantRoleToAgency","iam:permissions:grantRoleToAgencyOnProject"。 资源操作依赖OBS,需要拥有OBS OperateAccess策略。(OBS是全局服务,对应的OBS策略需要在全局服务下查找)。 “企业项目”中配置GES FullAccess时,需要额外在 IAM 权限中配置如下策略权限: ecs:availabilityZones:list,请参考可用区管理。 ecs:cloudServerNics:update,请参考网卡管理。 GES Development 图引擎服务使用权限,拥有该权限的用户可以执行除了创建图、删除图、变更规格、扩副本以外所有操作。 说明: 如果需要绑定/解绑EIP,则还需要拥有Security Administrator角色用于创建委托。Security Administrator角色权限较大,可以使用如下自定义策略替代:"iam:permissions:listRolesForAgencyOnD",iam:permissions:listRolesForAgency","iam:roles:listRoles","iam:permissions:listRolesForAgencyOnProject","iam:agencies:listAgencies","iam:roles:createRole","iam:permissions:grantRoleToAgencyOnDomain","iam:agencies:getAgency","iam:agencies:createAgency","iam:roles:updateRole","iam:permissions:grantRoleToAgency","iam:permissions:grantRoleToAgencyOnProject"。 资源操作依赖OBS,需要拥有OBS OperateAccess策略。(OBS是全局服务,对应的OBS策略需要在全局服务下查找)。 GES ReadOnlyAccess 图引擎服务资源只读权限,拥有该权限的用户只能做一些资源查看类的操作如查看图列表、查看元数据和查看备份等。 说明: 资源操作依赖OBS,需要拥有OBS OperateAccess策略。(OBS是全局服务,对应的OBS策略需要在全局服务下查找) 由于缓存的存在,对用户和用户组授予OBS相关的角色后,大概需要等待13分钟角色才能生效;授予策略后,大概需要等待5分钟策略才能生效。 表2 GES常用操作与系统策略的关系 操作 GES FullAccess GES Development GES ReadOnlyAccess 对应资源 查询图列表 √ √ √ - 查看图详情 √ √ √ graphName 创建图 √ x x graphName 访问图 √ √ x graphName 关闭图 √ √ x graphName 启动图 √ √ x graphName 删除图 √ x x graphName 增量导入图 √ √ x graphName 导出图 √ √ x graphName 清空图 √ √ x graphName 升级图 √ √ x graphName 变更规格 √ x x graphName 扩副本图 √ x x graphName 重启图 √ √ x graphName 绑定EIP √ √ x graphName 解绑EIP √ √ x graphName 查看所有备份列表 √ √ √ - 查看某个图的备份列表 √ √ √ - 新增备份 √ √ x backupName 删除备份 √ √ x backupName 查询元数据列表 √ √ √ - 查询元数据 √ √ √ metadataName 校验元数据 √ √ x - 新增元数据 √ √ x metadataName 删除元数据 √ √ x metadataName 查询任务状态 √ √ √ - 查询任务列表 √ √ √ - 图细粒度权限配置 √ √ x - 用户组配置 √ √ x - 导入IAM用户 √ √ x - 查看用户详情 √ √ √ - 父主题: 策略权限
-
范围分区 范围分区(Range Partition)根据为每个分区建立的分区键的值范围将数据映射到分区。范围分区是生产系统中最常见的分区类型,通常在以时间维度(Date、Time Stamp)描述数据场景中使用。范围分区有两种语法格式,示例如下: VALUES LESS THAN的语法格式 对于从句是VALUE LESS THAN的语法格式,范围分区策略的分区键最多支持16列。 单列分区键示例如下: gaussdb=# CREATE TABLE range_sales ( product_id INT4 NOT NULL, customer_id INT4 NOT NULL, time DATE, channel_id CHAR(1), type_id INT4, quantity_sold NUMERIC(3), amount_sold NUMERIC(10,2) ) PARTITION BY RANGE (time) ( PARTITION date_202001 VALUES LESS THAN ('2020-02-01'), PARTITION date_202002 VALUES LESS THAN ('2020-03-01'), PARTITION date_202003 VALUES LESS THAN ('2020-04-01'), PARTITION date_202004 VALUES LESS THAN ('2020-05-01') ); --清理示例 gaussdb=# DROP TABLE range_sales; 其中date_202002表示2020年2月的分区,将包含分区键值从2020年2月1日到2020年2月29日的数据。 每个分区都有一个VALUES LESS子句,用于指定分区的非包含上限。大于或等于该分区键的任何值都将添加到下一个分区。除第一个分区外,所有分区都具有由前一个分区的VALUES LESS子句指定的隐式下限。可以为最高分区定义MAXVALUE关键字,MAXVALUE表示一个虚拟无限值,其排序高于分区键的任何其他可能值,包括空值。 多列分区键示例如下: gaussdb=# CREATE TABLE range_sales_with_multiple_keys ( c1 INT4 NOT NULL, c2 INT4 NOT NULL, c3 CHAR(1) ) PARTITION BY RANGE (c1,c2) ( PARTITION p1 VALUES LESS THAN (10,10), PARTITION p2 VALUES LESS THAN (10,20), PARTITION p3 VALUES LESS THAN (20,10) ); gaussdb=# INSERT INTO range_sales_with_multiple_keys VALUES(9,5,'a'); gaussdb=# INSERT INTO range_sales_with_multiple_keys VALUES(9,20,'a'); gaussdb=# INSERT INTO range_sales_with_multiple_keys VALUES(9,21,'a'); gaussdb=# INSERT INTO range_sales_with_multiple_keys VALUES(10,5,'a'); gaussdb=# INSERT INTO range_sales_with_multiple_keys VALUES(10,15,'a'); gaussdb=# INSERT INTO range_sales_with_multiple_keys VALUES(10,20,'a'); gaussdb=# INSERT INTO range_sales_with_multiple_keys VALUES(10,21,'a'); gaussdb=# INSERT INTO range_sales_with_multiple_keys VALUES(11,5,'a'); gaussdb=# INSERT INTO range_sales_with_multiple_keys VALUES(11,20,'a'); gaussdb=# INSERT INTO range_sales_with_multiple_keys VALUES(11,21,'a'); gaussdb=# SELECT * FROM range_sales_with_multiple_keys PARTITION (p1); c1 | c2 | c3 ----+----+---- 9 | 5 | a 9 | 20 | a 9 | 21 | a 10 | 5 | a (4 rows) gaussdb=# SELECT * FROM range_sales_with_multiple_keys PARTITION (p2); c1 | c2 | c3 ----+----+---- 10 | 15 | a (1 row) gaussdb=# SELECT * FROM range_sales_with_multiple_keys PARTITION (p3); c1 | c2 | c3 ----+----+---- 10 | 20 | a 10 | 21 | a 11 | 5 | a 11 | 20 | a 11 | 21 | a (5 rows) --清理示例 gaussdb=# DROP TABLE range_sales_with_multiple_keys; 多列分区的分区规则如下: 从第一列开始比较。 如果插入的值当前列小于分区当前列边界值,则直接插入。 如果插入的当前列等于分区当前列的边界值,则比较插入值的下一列与分区下一列边界值的大小。 如果插入的当前列大于分区当前列的边界值,则换下一个分区进行比较。 START END语法格式 对于从句是START END语法格式,范围分区策略的分区键最多支持1列。 示例如下: -- 创建表空间 gaussdb=# CREATE TABLESPACE startend_tbs1 LOCATION '/home/omm/startend_tbs1'; gaussdb=# CREATE TABLESPACE startend_tbs2 LOCATION '/home/omm/startend_tbs2'; gaussdb=# CREATE TABLESPACE startend_tbs3 LOCATION '/home/omm/startend_tbs3'; gaussdb=# CREATE TABLESPACE startend_tbs4 LOCATION '/home/omm/startend_tbs4'; -- 创建临时schema gaussdb=# CREATE SCHEMA tpcds; gaussdb=# SET CURRENT_SCHEMA TO tpcds; -- 创建分区表,分区键是integer类型 gaussdb=# CREATE TABLE tpcds.startend_pt (c1 INT, c2 INT) TABLESPACE startend_tbs1 PARTITION BY RANGE (c2) ( PARTITION p1 START(1) END(1000) EVERY(200) TABLESPACE startend_tbs2, PARTITION p2 END(2000), PARTITION p3 START(2000) END(2500) TABLESPACE startend_tbs3, PARTITION p4 START(2500), PARTITION p5 START(3000) END(5000) EVERY(1000) TABLESPACE startend_tbs4 ) ENABLE ROW MOVEMENT; -- 查看分区表信息 gaussdb=# SELECT relname, boundaries, spcname FROM pg_partition p JOIN pg_tablespace t ON p.reltablespace=t.oid and p.parentid='tpcds.startend_pt'::regclass ORDER BY 1; relname | boundaries | spcname -------------+------------+--------------- p1_0 | {1} | startend_tbs2 p1_1 | {201} | startend_tbs2 p1_2 | {401} | startend_tbs2 p1_3 | {601} | startend_tbs2 p1_4 | {801} | startend_tbs2 p1_5 | {1000} | startend_tbs2 p2 | {2000} | startend_tbs1 p3 | {2500} | startend_tbs3 p4 | {3000} | startend_tbs1 p5_1 | {4000} | startend_tbs4 p5_2 | {5000} | startend_tbs4 startend_pt | | startend_tbs1 (12 rows) -- 清理示例 gaussdb=# DROP TABLE tpcds.startend_pt; DROP TABLE gaussdb=# DROP SCHEMA tpcds; DROP SCHEMA 父主题: 分区策略
-
配置参数说明 表1 配置参数说明 参数 说明 负载通道 是否使用负载通道作为第三方接口的鉴权服务。 选择“使用”时,配置鉴权服务的负载通道。 选择“不使用”时,配置鉴权服务的访问地址。 后端URL 请求方法 支持GET、POST、PUT、HEAD请求方法。 请求协议 HTTP或HTTPS,传输重要或敏感数据时推荐使用HTTPS。 负载通道(可选) 仅在“使用”负载通道时,需要设置。选择已创建的负载通道名称,如果没有可选的负载通道,您也可以单击“新建负载通道”创建。 后端服务地址(可选) 仅在不使用负载通道时,需要设置。 填写鉴权服务的访问地址,格式:“主机:端口”。主机为鉴权服务的访问IP地址/ 域名 ,未指定端口时,HTTP协议默认使用80端口,HTTPS协议默认使用443端口。 说明: 目前仅支持IPv4地址。 路径 鉴权服务的路径,即服务的url。 后端超时(ms) 鉴权服务请求的超时时间。超时时间不超过后端响应超时时间上限,超时时间上限可在API网关控制台的“配置参数”中查看。 自定义host头域 仅在使用负载通道时配置。 在请求被发送到负载通道中的云服务器前,允许您自定义请求的host头域,默认将使用请求中原始的host头域。 防暴力拦截阈值 当源IP访问在5分钟内进行第三方认证失败的次数达到此处配置的阈值时,将触发源IP请求拦截,在这5分钟后解除请求拦截。 例如,5分钟内,源IP访问在第三分钟进行第三方认证失败的次数达到此处配置的阈值,触发源IP请求拦截,再过2分钟解除请求拦截。 身份来源 将从API原始请求中获取此处配置的参数进行第三方鉴权接口鉴权(最大支持10个header参数和10个query参数)。身份来源信息为空时,携带API原始请求的请求参数(header参数和query参数)调用第三方鉴权接口进行鉴权。 宽松模式 开关开启后,当鉴权服务不可用(与鉴权服务建立连接失败或者鉴权服务返回5xx)时,API网关仍然接受客户端请求。 允许携带原始请求体 开关开启后,将携带API原始请求体调用鉴权接口鉴权。 请求体大小(字节) 仅在开启“允许携带原始请求体”时配置。 请求体大小不能超过实例允许的最大请求体大小。实例的最大请求体大小可在API网关控制台“配置参数”中查看。 允许携带原始请求路径 开关开启后,将API原始请求路径拼接到鉴权接口路径之后调用鉴权接口鉴权。 直接返回鉴权响应 开关开启后,鉴权失败时,将直接返回鉴权服务的响应。 允许携带的响应头部 鉴权成功时,原始请求将从鉴权服务返回的响应头中获取此处配置的头部,传到业务后端。 最大支持配置10个头部。 简易鉴权模式 开关开启后,鉴权服务返回状态码“2xx”时,表示认证通过。 鉴权结果匹配 仅在“简易鉴权模式”关闭后可配置。 根据鉴权服务返回的响应头中的参数名和参数值进行校验,响应头中存在此处配置的参数名,并且参数值相等则认证通过。 黑白名单配置 开关开启后,原始API请求匹配黑/白名单规则将进行/不进行第三方认证鉴权。 规则类型 白名单规则 如果原始API请求匹配白名单规则,将不进行第三方认证鉴权。 黑名单规则 如果原始API请求匹配黑名单规则,将进行第三方认证鉴权。 定义参数 定义用于规则的参数。 说明: 建议不要设置敏感信息,以防泄露。 参数位置:用于规则匹配的参数位置。 path:API请求的URI,系统默认配置。 method:API请求方法,系统默认配置。 header:请求头的key值。 query:QueryString的key值。 system:系统参数。 参数:用于判断与规则中的参数值是否匹配。 定义规则 定义用于规则的判断条件。 单击“添加规则”,编辑规则名称和规则条件。在“条件表达式”弹窗中,选择“定义参数”中的参数名和判断条件,以及输入参数值。 说明: 建议不要设置敏感信息,以防泄露。 =为等于 !=为不等于 pattern为正则表达式 enum为枚举值,多个参数值之间用英文逗号分隔
-
脚本配置示例 { "auth_request": { "method": "GET", "protocol": "HTTPS", "url_domain": "192.168.10.10", "timeout": 5000, "path": "/", "vpc_channel_enabled": false, "vpc_channel_info": null }, "custom_forbid_limit": 100, "carry_body": { "enabled": true, "max_body_size": 1000 }, "auth_downgrade_enabled": true, "carry_path_enabled": true, "return_resp_body_enabled": false, "carry_resp_headers": [], "simple_auth_mode_enabled": true, "match_auth": null, "rule_enabled": false, "rule_type": "allow" }
-
GES请求条件 您可以在创建自定义策略时,通过添加“请求条件”(Condition元素)来控制策略何时生效。请求条件包括条件键和运算符,条件键表示策略语句的 Condition 元素,分为全局级条件键和服务级条件键。全局级条件键(前缀为g:)适用于所有操作,服务级条件键(前缀为服务缩写,如ges)仅适用于对应服务的操作。运算符与条件键一起使用,构成完整的条件判断语句。 GES通过IAM预置了一组条件键,例如,您可以先使用hw:SourceIp条件键检查请求者的 IP 地址,然后再允许执行操作。下表显示了适用于GES服务特定的条件键。 表1 GES请求条件 GES条件键 运算符 描述 g:CurrentTime Date and time 接收到鉴权请求的时间。 说明: 以 ISO 8601 格式表示,例如:2012-11-11T23:59:59Z。 g:MFAPresent Boolean 用户登录时是否使用了多因素认证。 g:UserId String 当前登录的用户id。 g:UserName String 当前登录的用户名。 g:ProjectName String 当前登录的Project。 g:DomainName String 当前登录的Domain。 父主题: 策略权限
-
范围分区 范围分区(Range Partition)根据为每个分区建立分区键的值范围将数据映射到分区。范围分区是生产系统中最常见的分区类型,通常在以时间维度(Date、Time Stamp)描述数据场景中使用。范围分区有两种语法格式,示例如下: VALUES LESS THAN的语法格式 对于从句是VALUE LESS THAN的语法格式,范围分区策略的分区键最多支持16列。 单列分区键示例如下: gaussdb=# CREATE TABLE range_sales ( product_id INT4 NOT NULL, customer_id INT4 NOT NULL, time DATE, channel_id CHAR(1), type_id INT4, quantity_sold NUMERIC(3), amount_sold NUMERIC(10,2) ) PARTITION BY RANGE (time) ( PARTITION date_202001 VALUES LESS THAN ('2020-02-01'), PARTITION date_202002 VALUES LESS THAN ('2020-03-01'), PARTITION date_202003 VALUES LESS THAN ('2020-04-01'), PARTITION date_202004 VALUES LESS THAN ('2020-05-01') ); gaussdb=# DROP TABLE range_sales; 其中date_202002表示2020年2月的分区,将包含分区键值从2020年2月1日到2020年2月29日的数据。 每个分区都有一个VALUES LESS子句,用于指定分区的非包含上限。大于或等于该分区键的任何值都将添加到下一个分区。除第一个分区外,所有分区都具有由前一个分区的VALUES LESS子句指定的隐式下限。可以为最高分区定义MAXVALUE关键字,MAXVALUE表示一个虚拟无限值,其排序高于分区键的任何其他可能值,包括空值。 多列分区键示例如下: gaussdb=# CREATE TABLE range_sales_with_multiple_keys ( c1 INT4 NOT NULL, c2 INT4 NOT NULL, c3 CHAR(1) ) PARTITION BY RANGE (c1,c2) ( PARTITION p1 VALUES LESS THAN (10,10), PARTITION p2 VALUES LESS THAN (10,20), PARTITION p3 VALUES LESS THAN (20,10) ); gaussdb=# INSERT INTO range_sales_with_multiple_keys VALUES(9,5,'a'); gaussdb=# INSERT INTO range_sales_with_multiple_keys VALUES(9,20,'a'); gaussdb=# INSERT INTO range_sales_with_multiple_keys VALUES(9,21,'a'); gaussdb=# INSERT INTO range_sales_with_multiple_keys VALUES(10,5,'a'); gaussdb=# INSERT INTO range_sales_with_multiple_keys VALUES(10,15,'a'); gaussdb=# INSERT INTO range_sales_with_multiple_keys VALUES(10,20,'a'); gaussdb=# INSERT INTO range_sales_with_multiple_keys VALUES(10,21,'a'); gaussdb=# INSERT INTO range_sales_with_multiple_keys VALUES(11,5,'a'); gaussdb=# INSERT INTO range_sales_with_multiple_keys VALUES(11,20,'a'); gaussdb=# INSERT INTO range_sales_with_multiple_keys VALUES(11,21,'a'); gaussdb=# SELECT * FROM range_sales_with_multiple_keys PARTITION (p1); c1 | c2 | c3 ----+----+---- 9 | 5 | a 9 | 20 | a 9 | 21 | a 10 | 5 | a (4 rows) gaussdb=# SELECT * FROM range_sales_with_multiple_keys PARTITION (p2); c1 | c2 | c3 ----+----+---- 10 | 15 | a (1 row) gaussdb=# SELECT * FROM range_sales_with_multiple_keys PARTITION (p3); c1 | c2 | c3 ----+----+---- 10 | 20 | a 10 | 21 | a 11 | 5 | a 11 | 20 | a 11 | 21 | a (5 rows) gaussdb=# DROP TABLE range_sales_with_multiple_keys; 多列分区的分区规则如下: 从第一列开始比较。 如果插入的当前列小于分区当前列边界值,则直接插入。 如果插入的当前列等于分区当前列的边界值,则比较插入值的下一列与分区下一列边界值的大小。 如果插入的当前列大于分区当前列的边界值,则换下一个分区进行比较。 START END语法格式 对于从句是START END语法格式,范围分区策略的分区键最多支持1列。 示例如下: -- 创建表空间。 gaussdb=# CREATE TABLESPACE startend_tbs1 LOCATION '/home/omm/startend_tbs1'; gaussdb=# CREATE TABLESPACE startend_tbs2 LOCATION '/home/omm/startend_tbs2'; gaussdb=# CREATE TABLESPACE startend_tbs3 LOCATION '/home/omm/startend_tbs3'; gaussdb=# CREATE TABLESPACE startend_tbs4 LOCATION '/home/omm/startend_tbs4'; -- 创建临时schema。 gaussdb=# CREATE SCHEMA tpcds; gaussdb=# SET CURRENT_SCHEMA TO tpcds; -- 创建分区表,分区键是integer类型。 gaussdb=# CREATE TABLE tpcds.startend_pt (c1 INT, c2 INT) TABLESPACE startend_tbs1 PARTITION BY RANGE (c2) ( PARTITION p1 START(1) END(1000) EVERY(200) TABLESPACE startend_tbs2, PARTITION p2 END(2000), PARTITION p3 START(2000) END(2500) TABLESPACE startend_tbs3, PARTITION p4 START(2500), PARTITION p5 START(3000) END(5000) EVERY(1000) TABLESPACE startend_tbs4 ) ENABLE ROW MOVEMENT; -- 查看分区表信息。 gaussdb=# SELECT relname, boundaries, spcname FROM pg_partition p JOIN pg_tablespace t ON p.reltablespace=t.oid and p.parentid='tpcds.startend_pt'::regclass ORDER BY 1; relname | boundaries | spcname -------------+------------+--------------- p1_0 | {1} | startend_tbs2 p1_1 | {201} | startend_tbs2 p1_2 | {401} | startend_tbs2 p1_3 | {601} | startend_tbs2 p1_4 | {801} | startend_tbs2 p1_5 | {1000} | startend_tbs2 p2 | {2000} | startend_tbs1 p3 | {2500} | startend_tbs3 p4 | {3000} | startend_tbs1 p5_1 | {4000} | startend_tbs4 p5_2 | {5000} | startend_tbs4 startend_pt | | startend_tbs1 (12 rows) 父主题: 分区策略
-
范围分区 范围分区(Range Partition)根据为每个分区建立分区键的值范围将数据映射到分区。范围分区是生产系统中最常见的分区类型,通常在以时间维度(Date、Time Stamp)描述数据场景中使用。范围分区有两种语法格式,示例如下: VALUES LESS THAN的语法格式 对于从句是VALUE LESS THAN的语法格式,范围分区策略的分区键最多支持16列。 单列分区键示例如下: gaussdb=# CREATE TABLE range_sales_single_key ( product_id INT4 NOT NULL, customer_id INT4 NOT NULL, time DATE, channel_id CHAR(1), type_id INT4, quantity_sold NUMERIC(3), amount_sold NUMERIC(10,2) ) PARTITION BY RANGE (time) ( PARTITION date_202001 VALUES LESS THAN ('2020-02-01'), PARTITION date_202002 VALUES LESS THAN ('2020-03-01'), PARTITION date_202003 VALUES LESS THAN ('2020-04-01'), PARTITION date_202004 VALUES LESS THAN ('2020-05-01') ); gaussdb=# DROP TABLE range_sales_single_key; 其中date_202002表示2020年2月的分区,将包含分区键值从2020年2月1日到2020年2月29日的数据。 每个分区都有一个VALUES LESS子句,用于指定分区的非包含上限。大于或等于该分区键的任何值都将添加到下一个分区。除第一个分区外,所有分区都具有由前一个分区的VALUES LESS子句指定的隐式下限。可以为最高分区定义MAXVALUE关键字,MAXVALUE表示一个虚拟无限值,其排序高于分区键的任何其他可能值,包括空值。 多列分区键示例如下: gaussdb=# CREATE TABLE range_sales ( c1 INT4 NOT NULL, c2 INT4 NOT NULL, c3 CHAR(1) ) PARTITION BY RANGE (c1,c2) ( PARTITION p1 VALUES LESS THAN (10,10), PARTITION p2 VALUES LESS THAN (10,20), PARTITION p3 VALUES LESS THAN (20,10) ); INSERT INTO range_sales VALUES(9,5,'a'); INSERT INTO range_sales VALUES(9,20,'a'); INSERT INTO range_sales VALUES(9,21,'a'); INSERT INTO range_sales VALUES(10,5,'a'); INSERT INTO range_sales VALUES(10,15,'a'); INSERT INTO range_sales VALUES(10,20,'a'); INSERT INTO range_sales VALUES(10,21,'a'); INSERT INTO range_sales VALUES(11,5,'a'); INSERT INTO range_sales VALUES(11,20,'a'); INSERT INTO range_sales VALUES(11,21,'a'); gaussdb=# SELECT * FROM range_sales PARTITION (p1); c1 | c2 | c3 ----+----+---- 9 | 5 | a 9 | 20 | a 9 | 21 | a 10 | 5 | a (4 rows) gaussdb=# SELECT * FROM range_sales PARTITION (p2); c1 | c2 | c3 ----+----+---- 10 | 15 | a (1 row) gaussdb=# SELECT * FROM range_sales PARTITION (p3); c1 | c2 | c3 ----+----+---- 10 | 20 | a 10 | 21 | a 11 | 5 | a 11 | 20 | a 11 | 21 | a (5 rows) gaussdb=# DROP TABLE range_sales; 多列分区的分区规则如下: 从第一列开始比较。 如果插入的当前列小于分区当前列边界值,则直接插入。 如果插入的当前列等于分区当前列的边界值,则比较插入值的下一列与分区下一列边界值的大小。 如果插入的当前列大于分区当前列的边界值,则换下一个分区进行比较。 START END语法格式 对于从句是START END语法格式,范围分区策略的分区键最多支持1列。 示例如下: gaussdb=# -- 创建表空间 CREATE TABLESPACE startend_tbs1 LOCATION '/home/omm/startend_tbs1'; CREATE TABLESPACE startend_tbs2 LOCATION '/home/omm/startend_tbs2'; CREATE TABLESPACE startend_tbs3 LOCATION '/home/omm/startend_tbs3'; CREATE TABLESPACE startend_tbs4 LOCATION '/home/omm/startend_tbs4'; -- 创建临时schema CREATE SCHEMA tpcds; SET CURRENT_SCHEMA TO tpcds; -- 创建分区表,分区键是integer类型 CREATE TABLE tpcds.startend_pt (c1 INT, c2 INT) TABLESPACE startend_tbs1 PARTITION BY RANGE (c2) ( PARTITION p1 START(1) END(1000) EVERY(200) TABLESPACE startend_tbs2, PARTITION p2 END(2000), PARTITION p3 START(2000) END(2500) TABLESPACE startend_tbs3, PARTITION p4 START(2500), PARTITION p5 START(3000) END(5000) EVERY(1000) TABLESPACE startend_tbs4 ) ENABLE ROW MOVEMENT; -- 查看分区表信息 gaussdb=# SELECT relname, boundaries, spcname FROM pg_partition p JOIN pg_tablespace t ON p.reltablespace=t.oid and p.parentid='tpcds.startend_pt'::regclass ORDER BY 1; relname | boundaries | spcname -------------+------------+--------------- p1_0 | {1} | startend_tbs2 p1_1 | {201} | startend_tbs2 p1_2 | {401} | startend_tbs2 p1_3 | {601} | startend_tbs2 p1_4 | {801} | startend_tbs2 p1_5 | {1000} | startend_tbs2 p2 | {2000} | startend_tbs1 p3 | {2500} | startend_tbs3 p4 | {3000} | startend_tbs1 p5_1 | {4000} | startend_tbs4 p5_2 | {5000} | startend_tbs4 startend_pt | | startend_tbs1 (12 rows) --清理示例 gaussdb=# DROP TABLE tpcds.startend_pt; 父主题: 分区策略
-
配置数据保护类型 参照操作步骤进入“策略基线”界面。 选择“使用”页签。 单击“配置数据保护类型”进入“配置数据保护类型”界面。 内置数据保护类型:如果取消勾选,在基线策略表格该类型不再显示,且默认配置的各项策略要求将清空,下次启用需自定义该保护类型的策略要求 一般数据保护:没有通过敏感数据识别分级分类的数据使用一般数据保护。 分级数据保护类型:通过敏感数据识别分级分类的数据可使用分级数据保护,DSC有内置的敏感数据级别L1-L4,去勾选策略基线列表将不展示。 图3 内置数据保护类型 自定义数据保护类型:新增的自定义数据保护类型将显示到策略基线表中。 单击下拉框选择自定义级别,如果没有可选择的自定义级别,请参照新建分级进行新建。 图4 自定义数据保护类型 单击“确定”,在策略基线表中查看数据保护类型,如图5所示。 图5 数据资产保护类型
-
配置措施 参照操作步骤进入“策略基线”界面。 选择“使用”页签。 单击“配置措施”进入“配置措施”界面。 单击取消不需要的措施,取消勾选的措施将不会在策略基线表中显示。 内置措施:DSC针对数据不同周期依据华为云数据安全治理经验内置相应的措施,鼠标移动到措施名称可以查看内置措施的说明。 自定义措施:新增的自定义措施将显示在基线策略表中。 单击“新增”,进入“新增自定义保护措施”界面。 填写“措施名称”和“措施说明”单击“确定”返回“配置措施”界面可查看新增的措施。 单击“操作”列的“编辑”可修改该措施,单击“删除”删除不需要的措施。 图1 自定义措施 单击“确定”进入策略基线表查看配置措施,如图2所示。 图2 策略基线列表
-
查看策略内容 在左侧导航栏选择“用户组”,单击需授权的用户组“操作”列下的“授权”。 给用户组选择策略时,单击策略前面的,可以查看策略的详细内容,以系统策略“IAM ReadOnlyAccess”为例。 图1 IAM ReadOnlyAccess策略内容 { "Version": "1.1", "Statement": [ { "Action": [ "iam:*:get*", "iam:*:list*", "iam:*:check*" ], "Effect": "Allow" } ] }
-
云数据库 GeminiDB授权项说明 表1 实例管理 权限 对应API接口 授权项(Action) IAM项目(Project) 企业项目(Enterprise Project) 创建数据库实例 POST /v3/{project_id}/instances nosql:instance:create √ √ 删除数据库实例 DELETE /v3/{project_id}/instances/{instance_id} nosql:instance:delete √ √ 查询数据库实例列表 GET /v3/{project_id}/instances?id={id}&name={name}&mode={mode}&datastore_type={datastore_type}&vpc_id={vpc_id}&subnet_id={subnet_id}&offset={offset}&limit={limit} nosql:instance:list √ √ 扩容实例存储容量 POST /v3/{project_id}/instances/{instance_id}/extend-volume nosql:instance:modifyStorageSize √ √ 扩容集群实例的节点数量 POST /v3/{project_id}/instances/{instance_id}/enlarge-node nosql:instance:extendNode √ √ 缩容集群实例的节点数量 POST /v3/{project_id}/instances/{instance_id}/reduce-node nosql:instance:reduceNode √ √ 变更实例规格 PUT /v3/{project_id}/instances/{instance_id}/resize nosql:instance:modifySpecification √ √ 修改实例管理员密码 PUT /v3/{project_id}/instances/{instance_id}/password nosql:instance:modifyPasswd √ √ 修改实例名称 PUT /v3/{project_id}/instances/{instance_id}/name nosql:instance:rename √ √ 变更实例安全组 PUT /v3/{project_id}/instances/{instance_id}/security-group nosql:instance:modifySecurityGroup √ √ 数据库补丁升级 POST /v3/{project_id}/instances/{instance_id}/db-upgrade nosql:instance:upgradeDatabaseVersion √ √ 批量数据库补丁升级 /v3/{projectId}/instances/db-upgrade nosql:instance:batchUpgradeDatabaseVersion √ √ 创建冷数据存储 POST /v3/{project_id}/instances/{instance_id}/cold-volume nosql:instance:modifyStorageSize √ √ 扩容冷数据存储 PUT /v3/{project_id}/instances/{instance_id}/cold-volume nosql:instance:modifyStorageSize √ √ 绑定/解绑弹性公网IP POST /v3/{project_id}/instances/{instance_id}/nodes/{node_id}/public-ip nosql:instance:bindPublicIp √ √ 切换SSL开关 POST /v3/{project_id}/instances/{instance_id}/ssl-option nosql:instance:switchSSL √ √ 重启数据库实例 POST /v3/{project_id}/instances/{instance_id}/restart nosql:instance:restart √ √ 设置磁盘自动扩容策略 PUT /v3/{project_id}/instances/disk-auto-expansion nosql:instance:modifyStorageSize √ √ 修改高危命令 PUT /v3/{projectId}/instances/{instanceId}/high-risk-commands nosql:instances:modifyHighRiskCommands √ √ 设置实例可维护时间段 PUT /v3/{project_id}/instances/{instance_id}/maintenance-window nosql:instance:modifyMaintenanceWindow √ √ 获取GeminiDB Redis的免密配置 Get /v3/{project_id}/instances/{instance_id}/passwordless-config nosql:instance:getPasswordlessConfig √ √ 支持修改GeminiDB Redis的免密配置 PUT /v3/{project_id}/instances/{instance_id}/passwordless-config nosql:instance:setPasswordlessConfig √ √ 表2 备份与恢复 权限 对应API接口 授权项(Action) IAM项目(Project) 企业项目(Enterprise Project) 查询自动备份策略 GET /v3.1/{project_id}/instances/{instance_id}/backups/policy nosql:backup:list √ √ 设置自动备份策略 PUT /v3/{project_id}/instances/{instance_id}/backups/policy nosql:instance:modifyBackupPolicy √ √ 查询可恢复的实例列表 GET /v3/{project_id}/backups/{backup_id}/restorable-instances nosql:instance:list √ √ 查询实例可恢复的时间段 GET /v3/{project_id}/instances/{instance_id}/backups/restorable-time-periods nosql:backup:list √ √ 创建手动备份 POST /v3/{project_id}/instances/{instance_id}/backups nosql:backup:create √ √ 删除手动备份 DELETE /v3/{project_id}/backups/{backup_id} nosql:backup:delete √ √ 恢复到已有实例 POST /v3/{project_id}/instances/{instance_id}/recovery nosql:backup:refreshInstanceFromBacku √ √ 表3 参数模板管理 权限 对应API接口 授权项(Action) IAM项目(Project) 企业项目(Enterprise Project) 获取参数模板列表 GET /v3/{project_id}/configurations nosql:param:list √ √ 创建参数模板 POST /v3/{project_id}/configurations nosql:param:create √ √ 修改参数模板的参数 PUT /v3.1/{project_id}/instances/{instance_id}/configurations nosql:param:modify √ √ 应用参数模板 PUT /v3.1/{project_id}/configurations/{config_id}/apply nosql:instance:modifyParameter √ √ 修改指定实例的参数 PUT /v3/{project_id}/instances/{instance_id}/configurations nosql:instance:modifyParameter √ √ 获取指定实例的参数 GET /v3/{project_id}/instances/{instance_id}/configurations nosql:param:list √ √ 获取指定参数模板的参数 GET /v3/{project_id}/configurations/{config_id} nosql:param:list √ √ 删除参数模板 DELETE /v3/{project_id}/configurations/{config_id} nosql:param:delete √ √ 查询参数模板可应用的实例列表 GET /v3/{project_id}/configurations/{config_id}/applicable-instances nosql:instance:list √ √ 查询实例参数的修改历史 GET /v3/{project_id}/instances/{instance_id}/configuration-histories nosql:param:list √ √ 查询参数模板应用历史 GET /v3/{project_id}/configurations/{config_id}/applied-histories nosql:param:list √ √ 表4 标签管理 权限 对应API接口 授权项(Action) IAM项目(Project) 企业项目(Enterprise Project) 查询资源实例 POST /v3/{project_id}/instances/resource_instances/action nosql:instance:list nosql:tag:list √ √ 批量添加或删除资源标签 POST /v3/{project_id}/instances/{instance_id}/tags/action nosql:instance:tag √ √ 查询资源标签 GET /v3/{project_id}/instances/{instance_id}/tags nosql:instance:list nosql:tag:list √ √ 表5 日志管理 权限 对应API接口 授权项(Action) IAM项目(Project) 企业项目(Enterprise Project) 查询数据库慢日志 GET /v3/{project_id}/instances/{instance_id}/slowlog?start_date={start_date}&end_date={end_date} nosql:instance:list √ √ 表6 配额管理 权限 对应API接口 授权项(Action) IAM项目(Project) 企业项目(Enterprise Project) 查询配额 GET /v3/{project_id}/quotas nosql:instance:list √ √ 表7 容灾管理 权限 对应API接口 授权项(Action) IAM项目(Project) 企业项目(Enterprise Project) 查询实例可搭建双活关系的Region GET /v3/{project_id}/instances/{instance_id}/disaster-recovery/regions nosql:instance:list √ √ 表8 任务管理 权限 对应API接口 授权项(Action) IAM项目(Project) 企业项目(Enterprise Project) 查询实例可维护时间段 GET /v3/{project_id}/instances/{instance_id}/ops-window nosql:instance:maintenanceWindow √ √ 取消定时任务 DELETE /v3/{project_id}/scheduled-jobs/{job_id} nosql:instance:cancleScheduleJob √ √ 查询定时任务列表 GET /v3/{projectId}/scheduled-jobs nosql:task:list √ √ “√”表示支持,“x”表示暂不支持。 父主题: 权限策略和授权项
-
操作步骤 进入路由策略列表页面。 在路由策略列表中,单击目标路由策略名称。 进入路由策略详情页面。 单击页面左上角的“添加策略节点”。 弹出“添加策略节点”页面。 根据界面提示,配置策略节点的基本信息,如表1所示。 表1 添加策略节点-参数说明 参数名称 参数说明 取值样例 节点号 必选参数。 一个路由策略由一个或多个策略节点构成,当使用路由策略过滤路由信息时,节点号取值小的策略节点先执行。 请根据需要填写相应的节点号,取值范围为0~65535。 20 匹配模式 必选参数。 路由策略的匹配模式,取值如下: 允许:当匹配上策略节点中的所有过滤条件,如果该策略节点的匹配模式是允许,则这条路由被允许通过。 拒绝:当匹配上策略节点中的所有过滤条件,如果该策略节点的匹配模式是拒绝,则这条路由被拒绝通过。 须知: 默认所有未与任何一个路由策略节点匹配的路由,均为未通过路由策略的过滤。因此在一个路由策略中创建了一个或多个拒绝模式的路由策略节点后,需要创建一个路由策略节点来允许所有其他路由通过。 允许 匹配条件 必选参数。 设置路由的过滤条件,匹配上的路由,根据匹配原则,被允许通过或拒绝。当前路由策略支持以下匹配条件: 路由类型 静态路由:用户手动配置的路由。 在ER场景下,位于ER路由表中的自定义路由和“虚拟私有云(VPC)”连接对应的传播路由属于静态路由。 BGP路由:通过BGP协议学习的路由。 在ER场景下,以云专线DC为例,DC的虚拟网关和ER在云上通信使用BGP协议,那么在ER路由表中,“虚拟网关(VGW)”连接学习来的传播路由,属于BGP路由。 “对等连接(Peering)”、“VPN网关(VPN)”以及“全域接入网关(DGW)”类型的连接同理。 IP地址前缀列表:是一种包含一组路由信息过滤规则的过滤器,用户可以在规则中定义IP地址前缀和掩码长度范围,用于匹配路由信息的目的网段地址或下一跳地址。更多详细信息,请参见IP地址前缀列表概述。 AS_Path列表:是一组针对BGP路由的AS_Path属性进行过滤的规则。在BGP的路由信息中,包含有AS_Path属性,AS_Path属性按矢量顺序记录了BGP路由从本地到目的地址所要经过的所有AS编号,因此基于AS_Path属性定义一些过滤规则,就可以实现对BGP路由信息的过滤。更多详细信息,请参见AS_Path列表概述。 路由类型:动态路由 IP地址前缀列表:prefixFilter-ab AS_Path列表:asPathFilter-ab 策略值 可选参数。 当路由策略的匹配模式选择“允许”时,您可以根据需要设置路由的策略值。当前路由策略支持两个策略值,通过“添加策略值”按钮,可同时添加两个策略值。 PrefVal: 华为规定的路由特有属性,代表路由的优先级。PrefVal值越大,路由优先级越高。 通过在路由策略中设置PrefVal值,可以修改路由的PrefVal值。 PrefVal值为整数。 企业路由器中不同类型连接的默认值如下: 虚拟网关(VGW):100 对等连接(Peering):60 VPN网关(VPN):80 全域接入网关(DGW):100 须知: 修改路由的PrefVal值,会影响不同类型连接路由的选路策略。如果您修改不当,可能会对业务造成影响,请您提交工单联系华为云客服,评估修改方案。 AS_Path:在BGP的路由信息中,包含有AS_Path属性,AS_Path属性按矢量顺序记录了BGP路由从本地到目的地址所要经过的所有AS编号。 通过在路由策略中设置AS_Path,可以为路由执行以下动作: 追加:在AS_Path的左侧位置中追加策略中设置的值。 替换:替换路由原有的AS_Path为路由策略中设置的值。 删除:删除路由原有AS_Path中的指定值。 AS_Path值的填写要求如下: 格式为x或x.y的整型数字,其中x的范围为1-65535, y的范围为0-65535。 一次最多可填写10个值。 值不允许重复。 prefVal:20 AS_Path:2000 10.2 3.7 500 一个策略节点信息设置完成后,单击“添加策略节点”,可继续添加策略节点。 所有策略节点的基本信息设置完成后,单击“确定”。 返回策略节点列表页面,可查看已添加的策略节点。
-
更新SSL证书 进入证书列表页面,找到待更新证书,在“操作”列单击“编辑”,修改证书信息即可。 更新SSL证书不影响API的调用。 如果待更新证书已绑定独立域名,那么所有访问这个域名的客户端都会看到更新后的证书。 如果更新的SSL证书已绑定独立域名且更新的内容新增CA证书,那么独立域名侧默认关闭“支持客户端认证”即关闭HTTPS双向认证;如果更新的SSL证书已绑定独立域名且更新的内容无CA证书,那么独立域名侧默认关闭“支持客户端认证”即未开启HTTPS双向认证。
-
转换证书为PEM格式 格式类型 转换方式(通过OpenSSL工具进行转换) CER/CRT 将“cert.crt”证书文件直接重命名为“cert.pem”。 PFX 提取私钥命令,以“cert.pfx”转换为“key.pem”为例。 openssl pkcs12 -in cert.pfx -nocerts -out key.pem 提取证书命令,以“cert.pfx”转换为“cert.pem”为例。 openssl pkcs12 -in cert.pfx -nokeys -out cert.pem P7B 证书转换,以“cert.p7b”转换为“cert.cer”为例。 openssl pkcs7 -print_certs -in cert.p7b -out cert.cer 将“cert.cer”证书文件直接重命名为“cert.pem”。 DER 提取私钥命令,以“privatekey.der”转换为“privatekey.pem”为例。 openssl rsa -inform DER -outform PEM -in privatekey.der -out privatekey.pem 提取证书命令,以“cert.cer”转换为“cert.pem”为例。 openssl x509 -inform der -in cert.cer -out cert.pem
更多精彩内容
CDN加速
GaussDB
文字转换成语音
免费的服务器
如何创建网站
域名网站购买
私有云桌面
云主机哪个好
域名怎么备案
手机云电脑
SSL证书申请
云点播服务器
免费OCR是什么
电脑云桌面
域名备案怎么弄
语音转文字
文字图片识别
云桌面是什么
网址安全检测
网站建设搭建
国外CDN加速
SSL免费证书申请
短信批量发送
图片OCR识别
云数据库MySQL
个人域名购买
录音转文字
扫描图片识别文字
OCR图片识别
行驶证识别
虚拟电话号码
电话呼叫中心软件
怎么制作一个网站
Email注册网站
华为VNC
图像文字识别
企业网站制作
个人网站搭建
华为云计算
免费租用云托管
云桌面云服务器
ocr文字识别免费版
HTTPS证书申请
图片文字识别转换
国外域名注册商
使用免费虚拟主机
云电脑主机多少钱
鲲鹏云手机
短信验证码平台
OCR图片文字识别
SSL证书是什么
申请企业邮箱步骤
免费的企业用邮箱
云免流搭建教程
域名价格