华为云用户手册

  • 复合分区与单分区 复合分区。 第一级称为Partition,即分区。用户可以指定某一维度列作为分区列(当前只支持整型和时间类型的列),并指定每个分区的取值范围。 第二级称为Distribution,即分桶。用户可以指定一个或多个维度列以及桶数对数据进行HASH分布或者不指定分桶列设置成Random Distribution对数据进行随机分布。 此场景推荐使用复合分区。 有时间维度或类似带有有序值的维度,可以以这类维度列作为分区列。分区粒度可以根据导入频次、分区数据量等进行评估。 历史数据删除需求:如有删除历史数据的需求(比如仅保留最近N天的数据)。使用复合分区,可以通过删除历史分区来达到目的。也可以通过在指定分区内发送DELET语句进行数据删除。 解决数据倾斜问题:每个分区可以单独指定分桶数量。如按天分区,当每天的数据量差异很大时,可以通过指定分区的分桶数,合理划分不同分区的数据,分桶列建议选择区分度大的列。 单分区。 用户也可以不使用复合分区,即使用单分区。则数据只做Hash分布。
  • 关于Random Distribution的设置以及使用场景 如果OLAP表没有更新类型的字段,将表的数据分桶模式设置为RANDOM,则可以避免严重的数据倾斜(数据在导入表对应的分区的时候,单次导入作业每个batch的数据将随机选择一个tablet进行写入)。 当表的分桶模式被设置为RANDOM时,因为没有分桶列,无法根据分桶列的值仅对几个分桶查询,对表进行查询的时候将对命中分区的全部分桶同时扫描,该设置适合对表数据整体的聚合查询分析而不适合高并发的点查询。 如果OLAP表的是Random Distribution的数据分布,那么在数据导入的时候可以设置单分片导入模式(将load_to_single_tablet设置为true),那么在大数据量的导入的时候,一个任务在将数据写入对应的分区时将只写入一个分片,这样将能提高数据导入的并发度和吞吐量,减少数据导入和Compaction导致的写放大问题,保障集群的稳定性。
  • 关于Partition和Bucket的数量和数据量的建议 一个表的Tablet总数量等于 (Partition num*Bucket num)。 一个表的Tablet数量,在不考虑扩容的情况下,推荐略多于整个集群的磁盘数量。 单个Tablet的数据量理论上没有上下界,但建议在1G-10G的范围内。如果单个Tablet数据量过小,则数据的聚合效果不佳,且元数据管理压力大。如果数据量过大,则不利于副本的迁移、补齐,且会增加Schema Change或者Rollup操作失败重试的代价(这些操作失败重试的粒度是Tablet)。 当Tablet的数据量原则和数量原则冲突时,建议优先考虑数据量原则。 在建表时,每个分区的Bucket数量统一指定。但是在动态增加分区时(ADD PARTITION),可以单独指定新分区的Bucket数量。可以利用这个功能方便的应对数据缩小或膨胀。 一个Partition的Bucket数量一旦指定,不可更改。所以在确定Bucket数量时,需要预先考虑集群扩容的情况。比如当前只有3台host,每台host有1块盘。如果Bucket的数量只设置为3或更小,那么后期即使再增加机器,也不能提高并发度。 举一些例子:假设在有10台BE,每台BE一块磁盘的情况下。如果一个表总大小为500MB,则可以考虑4-8个分片。5GB:8-16个分片。50GB:32个分片。500GB:建议分区,每个分区大小在50GB左右,每个分区16-32个分片。5TB:建议分区,每个分区大小在50GB 左右,每个分区16-32个分片。
  • 基本原理 下图展示了Stream load的主要流程,省略了一些导入细节。 ^ + | | | | 1A. User submit load to FE | | | +--v-----------+ | | FE | 5. Return result to user | +--+-----------+ | | | | 2. Redirect to BE | | | +--v-----------+ +---+Coordinator BE| 1B. User submit load to BE +-+-----+----+-+ | | | +-----+ | +-----+ | | | 3. Distrbute data | | | +-v-+ +-v-+ +-v-+ |BE | |BE | |BE | +---+ +---+ +---+ Stream load中,Doris会选定一个节点作为Coordinator节点。该节点负责接数据并分发数据到其他数据节点。您可以通过HTTP协议提交导入命令。如果提交到FE,则FE会通过HTTP redirect指令将请求转发给某一个BE。用户也可以直接提交导入命令给某一指定BE。导入的最终结果由Coordinator BE返回给用户。
  • JDBC通过ssl方式连接doris(验证证书) 在应用层进行代码重试和负载均衡时,代码重试需要应用自己多个配置doris前端节点地址。比如发现一个连接异常退出,就自动在其他连接上进行重试。 前提条件:集群必须开启HTTPS。 下载证书请在集群详情页面下载。 在已安装mysql客户端的ecs服务器上先执行以下命令,导入服务器证书。 your_certificate_path:自定义证书存放路径。 your_truststore_name:自定义truststore名称。 your_truststore_password:自定义 truststore密码。 keytool -importcert -alias MySQLCACert -file your_certificate_path -keystore your_truststore_name -storepass your_truststore_password 运行该命令的过程中,需要手动输入yes,如下所示: 图1 运行图 执行以下代码样例。 以下java代码中your_truststore_path为truststore文件路径,your_truststore_password为上述命令设置的truststore密码。 public class Main { private static String URL = "jdbc:mysql:loadbalance://" + "[FE1_host]:[FE1_port],[FE2_host]:[FE2_port],[FE3_host]:[FE3_port]/[your_database]?" + "loadBalanceConnectionGroup=first&ha.enableJMX=true"; static Connection getNewConnection() throws SQLException, ClassNotFoundException { Class.forName("com.mysql.cj.jdbc.Driver"); System.setProperty("javax.net.ssl.trustStore","your_truststore_path"); System.setProperty("javax.net.ssl.trustStorePassword","your_truststore_password"); String user = "your_username"; String password = "your_password"; Properties props = new Properties(); props.setProperty("user", user); props.setProperty("password", password); props.setProperty("useSSL", "true"); props.setProperty("requireSSL", "true"); props.setProperty("verifyServerCertificate", "true"); props.setProperty("sslMode", "VERIFY_CA"); return DriverManager.getConnection(URL, props); } public static void main(String[] args) throws Exception { Connection c = getNewConnection(); try { System.out.println("begin print"); String query = "your sqlString"; c.setAutoCommit(false); Statement s = c.createStatement(); ResultSet resultSet = s.executeQuery(query); while(resultSet.next()) { int id = resultSet.getInt(1); System.out.println("id is: "+id); } System.out.println("end print"); Thread.sleep(Math.round(100 * Math.random())); c.close(); } catch (Exception e) { e.printStackTrace(); } } } 父主题: 通过JDBC方式连接Doris
  • 大宽表与Star Schema 业务方建表时, 为了和前端业务适配, 往往不对维度信息和指标信息加以区分, 而将Schema定义成大宽表,这种操作对于数据库其实不是那么友好,我们更建议用户采用星型模型。 Schema中字段数比较多, 聚合模型中可能key列比较多, 导入过程中需要排序的列会增加。 维度信息更新会反应到整张表中,而更新的频率直接影响查询的效率。 使用过程中,建议用户尽量使用Star Schema区分维度表和指标表。频繁更新的维度表也可以放在MySQL外部表中。而如果只有少量更新, 可以直接放在Doris中。在Doris中存储维度表时,可对维度表设置更多的副本,提升Join的性能。
  • 数据模型选择 Doris数据模型上目前分为三类:AGGREGATE KEY,UNIQUE KEY,DUPLICATE KEY。三种模型中数据都是按KEY进行排序。 Aggregate模型。 Aggregate模型可以通过预聚合,极大地降低聚合查询时所需扫描的数据量和查询的计算量,非常适合有固定模式的报表类查询场景。但是该模型对count( * ) 查询很不友好。同时因为固定了Value列上的聚合方式,在进行其他类型的聚合查询时,需要考虑语意正确性。 Aggregate Key相同时,新旧记录进行聚合,目前支持的聚合函数有SUM,MIN,MAX,REPLACE。 CREATE TABLE site_visit ( siteid INT, city SMALLINT, username VARCHAR(32), pv BIGINT SUM DEFAULT '0' ) AGGREGATE KEY(siteid, city, username) DISTRIBUTED BY HASH(siteid) BUCKETS 10; Unique模型。 Unique模型针对需要唯一主键约束的场景,Unique key相同时,新记录覆盖旧记录,可以保证主键唯一性约束。适用于有更新需求的分析业务。目前Unique key实现上和Aggregate key的 REPLACE聚合方法一样,二者本质上相同。但是无法利用ROLLUP等预聚合带来的查询优势(因为本质是REPLACE,没有SUM这种聚合方式)。 CREATE TABLE sales_order ( orderid BIGINT, status TINYINT, username VARCHAR(32), amount BIGINT DEFAULT '0' ) UNIQUE KEY(orderid) DISTRIBUTED BY HASH(orderid) BUCKETS 10; Duplicate模型。 Duplicate模型相同的行不会合并,适合任意维度的Ad-hoc查询。虽然无法利用预聚合的特性,但是不受聚合模型的约束,可以发挥列存模型的优势(列裁剪、向量执行等)。 CREATE TABLE session_data ( visitorid SMALLINT, sessionid BIGINT, visittime DATETIME, city CHAR(20), province CHAR(20), ip varchar(32), brower CHAR(20), url VARCHAR(1024) ) DUPLICATE KEY(visitorid, sessionid) DISTRIBUTED BY HASH(sessionid, visitorid) BUCKETS 10;
  • 表格存储 里面的数据是否可以迁移? CloudTable使用 对象存储服务 存储集群数据的备份和快照,实现安全、高可靠和低成本的存储需求,了解更多请参见对象存储服务。如果需要查看账号下建立的桶,参考OBS服务《控制台指南》管理桶章节。 CloudTable使用 云数据迁移 可以将云上云下或第三方云上的多种数据源的数据迁移到CloudTable集群的HBase表中。详细步骤参见使用CMD迁移数据到CloudTable 父主题: 数据读写类
  • 如何调整数据均衡的灵敏度? BE定期(每隔一分钟)会向FE汇报一次磁盘使用情况。FE记录这些统计值,并根据这些统计值,限制不同的操作请求。 在FE中分别设置了 高水位(High Watermark)和危险水位(Flood Stage) 两级阈值。危险水位高于高水位。当磁盘使用率高于高水位时,Doris会限制某些操作的执行(如副本均衡等)。而如果高于危险水位,则会禁止某些操作的执行(如导入)。 同时,在BE上也设置了 危险水位(Flood Stage)。考虑到FE并不能完全及时的检测到BE上的磁盘使用情况,以及无法控制某些 BE 自身运行的操作(如 Compaction)。因此BE上的危险水位用于 BE 主动拒绝和停止某些操作,达到自我保护的目的。请参见磁盘空间管理。
  • 设置回收站时间 回收站原理:删除的数据不会直接从磁盘上删除,而是先放入回收站,等待超时时间满足后,再从磁盘上直接删除。 设置回收站时间需要考虑的因素。 回收站时间过长,会累积垃圾文件,占用磁盘空间。 回收站时间过长,调用admin clean trash;命令后,容易导致数据不均衡,触发二次数据均衡,再次产生垃圾文件。 回收站时间过短,容易误删、异常原因导致被删除的tablet无法被恢复。建议根据实际业务,观察回收站占用的磁盘空间的平均值,并根据占用磁盘空间和所需的防误删时间窗口,设置合理时间值。 curl -X POST http://{be_ip}:{be_http_port}/api/update_config?trash_file_expire_time_sec={value}\&persist=true be_host:节点地址。 be_webserver_port:节点端口。 trash_file_expire_time_sec:回收站清理的间隔,72个小时,当磁盘空间不足时,trash下的文件保存期可不遵守这个参数,默认值259200。
  • 如何查看回收站数据 登录CloudTable控制台。 创建Doris集群。 连接Doris集群。 查看回收站数据。 show trash; 图1 回收站数据 恢复回收站数据。 curl -X POST http://{be_host}:{be_webserver_port} /api/restore_tablet?tablet_id={tablet_id}\&schema_hash={schema_hash} be_host:节点地址。 be_webserver_port:节点端口。
  • 通过CCE模板管理页面安装Sermant Injector 第一次启动Sermant Injector实例之前,需申请Sermant Injector https证书。 登录已安装kubectl命令的CCE节点,请参考Linux弹性云服务器登录方式概述选择相应方式登录CCE节点。 执行以下命令申请Sermant Injector https证书: wget -O- https://cse-bucket-cn-east-3.obs.cn-east-3.myhuaweicloud.com/javaagent/certificate.sh | sh 该步骤会把证书挂载到cse命名空间中,如果不存在cse命名空间,则会自动创建。 该步骤会向k8s集群申请名为sermant-injector.cse.svc的CertificateSigningRequest,如果之前存在,则会被覆盖。 该步骤会在cse命名空间中创建名为sermant-injector-secret的Secret,如果之前存在,则会被覆盖。 使用Sermant Injector时,如果提示证书失效等证书相关的错误,请重新申请证书并重新安装Sermant Injector实例。 上传Sermant Injector模板。 下载模板。Sermant Injector模板版本及下载地址如下表所示: 版本 发行时间 获取路径 1.0.9 2023.06.30 sermant-injector-1.0.9.tgz 上传模板,请参考上传模板。 安装Sermant Injector,请参考创建模板实例。 安装时,按需修改配置文件,配置说明如下: agent: image: # 选填配置,Sermant Agent镜像版本,默认为最新版本。 version: ${agent.version} cse: config: # 必填配置,微服务引擎配置中心地址,获取方式请参考获取微服务引擎配置中心地址。 endpoints: https://localhost:30110 registry: # 必填配置,注册中心类型,当前支持SERVICE_COMB/NACOS type: SERVICE_COMB # 必填配置,微服务引擎注册中心地址,获取方式请参考获取微服务引擎服务注册发现地址。 endpoints: https://localhost:30100 image: # 选填配置,镜像拉取策略:Always(总是拉取)/IfNotPresent(本地有则使用本地镜像,不拉取)/Never(只使用本地镜像,从不拉取) pullPolicy: IfNotPresent # 必填配置,CCE所在的region,具体请参考地区和终端节点。 region: ${region} injector: image: # 选填配置,injector镜像版本,默认为最新版本。 version: ${injector.version} # 选填配置,拉取镜像的密钥。 pullSecrets: default-secret # 选填配置,injector实例数,若CCE集群只有一个节点,则需配置为1。 replicas: 2 webhooks: # 必填配置,K8s集群证书,请在已安装kubectl命令的CCE节点中使用以下命令获取 # kubectl config view --raw --minify --flatten -o jsonpath='{.clusters[].cluster.certificate-authority-data}' caBundle: null 目前Sermant Injector只支持安装到cse命名空间中,如果安装时,无法在页面上找到cse命名空间,请刷新页面。 父主题: 安装Sermant Injector
  • 背景信息 CCE容器部署的Spring Cloud应用可通过Sermant Injector插件自动挂载Sermant Agent,通过Sermant Agent接入未开启安全认证的微服务引擎。同Spring Cloud Huawei接入方式相比,Sermant Agent方式无需修改代码即可接入并使用应用注册发现等功能,但是不支持使用微服务治理功能。关于Sermant Agent,请参考Sermant-agent使用手册。 请根据您的实际业务需要选择使用Sermant Agent、Spring Cloud Huawei接入方式中的一种将Spring Cloud应用接入微服务引擎,但不可同时使用,以免导致冲突。
  • 使用条件 已创建Kubernetes类型的环境,请参考创建环境。 环境中已绑定1.15以上版本的CCE集群,请参考绑定CCE集群。 CCE集群节点已安装kubectl,安装kubectl命令请参考通过kubectl连接集群中相关操作。 环境中已纳管2.4.0及以上版本的未开启安全认证的微服务引擎专享版,请参考纳管资源。 Sermant Agent及Sermant Injector版本要求1.0.3及以上。
  • 开启安全认证 登录微服务引擎控制台。 在左侧导航栏选择“ServiceComb引擎专享版”。 单击待操作的引擎。 在“网络配置 & 安全”区域,单击“开启安全认证”。 如果引擎版本低于1.2.0,执行5。 如果引擎版本为1.2.0及以上版本,执行6。 升级引擎至1.2.0或以上版本。 单击“升级”。 选择“升级后版本”,查看版本说明,根据需要决定是否升级到该版本后,单击“确定”。 在刚升级成功的ServiceComb引擎的“网络配置 & 安全”区域,单击“开启安全认证”。 在“系统管理”页面开启安全认证。 首次开启安全认证,单击“去开启安全认证”。 需先创建root账号。输入root账号的“密码”和“确认密码”,单击“立即创建”。 再次开启安全认证,输入引擎中已关联了admin角色的账号名称及其密码。 (可选)参考角色管理,根据业务需要,创建角色。 (可选)参考账号管理,根据业务需要,创建账号。 在“系统管理”页面单击“设置安全认证”,根据实际业务需要设置安全配置。 选择开启“控制台安全认证”,请执行11。 开启控制台安全认证后,进入微服务引擎控制台界面,需要使用账号、密码登录。登录账号用户只能查看、配置有权限的服务。 选择开启“编程接口安全认证”,请执行10。 开启编程接口安全认证,会自动同步开启“控制台安全认证”。 开启编程接口安全认证后,需要在微服务的配置文件中添加对应用户的账号密码,否则服务无法注册到引擎。 关闭编程接口安全认证,微服务的配置文件中无需配置账号密码即可将服务注册到引擎,效率性能更高,建议用于VPC内访问时使用。 配置SDK,对于已部署但未配置安全认证参数的微服务组件,请参考配置微服务安全认证的账号名和密码 先为组件配置微服务安全认证的账号名和密码,再升级组件。 单击“确定”。 等待ServiceComb引擎更新完成,引擎状态由“配置中”变为“可用”,开启安全认证成功。
  • 环境要求 Web SDK运行环境要求,如表1所示。 表1 环境要求 环境项 使用限制 开发工具 Microsoft Visual Studio Code、WebStorm或其他Web IDE开发工具。 语言 Javascript或Typescript。 编译环境 建议Node 17+。 浏览器 浏览器使用限制,请参见表2。 由于浏览器的安全策略限制,仅支持通过“https:// 域名 ”方式访问,否则无法获取麦克风权限。 表2 浏览器适配详情 操作系统类型 浏览器类型 浏览器版本 Windows Chrome浏览器 91+ Edge浏览器 80+ Android 微信内嵌浏览器(TBS内核) - 微信内嵌浏览器(XWEB内核) - 企业微信内嵌浏览器 - 移动版Chrome浏览器 91+ iOS 微信内嵌浏览器 iOS 14.3+ 微信6.5+版本 移动版Safari浏览器 -
  • 操作步骤 在“欢迎入驻成为华为云合作伙伴”页面填写商业信息,单击“下一步”。 若贵公司已经是华为云合作伙伴,您无需再次注册,您可以关联该公司,成为华为云合作伙伴。 填写联系人信息,单击“下一步”。 填写敏感关系申报信息,单击“下一步”。 签署协议,请认真阅读以下协议内容并在方框内勾选确认,单击“提交认证”并确定入驻申请信息提交成功。 系统提示您成功入驻华为云合作伙伴。 您可以选择与华为云的合作方向,包括以下几种: 探索伙伴发展路径:您可以通过伙伴发展路径构建您的方案和能力,如: 软件伙伴发展路径 服务伙伴发展路径 学习与赋能伙伴发展路径 总经销商合作伙伴发展路径 加入伙伴计划:您可以通过伙伴计划营销推广您的产品与服务,如: 解决方案提供商计划 分销计划 云商店计划 合作伙伴能力计划 如果自动入驻未成功,系统将触发人工审核: 华为云会尽快审核您的入驻申请信息。 若您的入驻申请信息审核未通过,请根据审核未通过原因进行修改并重新提交认证。 成功入驻华为云合作伙伴体系后不支持退出HCPN。
  • 产品价目表字段说明如下: 字段 说明 示例值 产品ID 云服务产品的唯一标识。 OFFI514702727422058496 产品名称 云服务产品的名称。 通用计算型_S6_1核1G_linux 按需 资源规格编码 云服务产品的资源规格编码。 s6.small.1.linux 资源规格描述 云服务产品的资源规格描述。 用于描述云服务所需资源的特征信息,一组属性和属性值域的集合,同一个资源类型的资源规格所包含的属性相同,但属性取值不同。 CPU核数:1核;内存值:1024MB;系统盘值:40GB;镜像类型:Linux;虚拟机类型:0 资源类型编码 云服务产品所属的资源类型编码。 hws.resource.type.vm 资源类型名称 云服务产品所属的资源类型名称。 云主机 计费模式 指消费云服务产品产生的计费模式,包括: ON_DEMAND:按需计费 ONE_TIME:一次性计费 PERIOD:包年/包月计费 ON_DEMAND 周期类型 指云服务包年/包月产品的使用周期类型,包括: YEAR:年 MONTH:月 WEEK:周 DAY:天 HOUR:小时 MONTH 状态 指云服务产品的销售状态,包括: ONSALE:在售 SUSPENDED:停售 RETIREMENT:退市 ONSALE 云服务区编码 云服务区域的独立编码,请参见地区和终端节点对应云服务的“区域”列的值。如果有多个,中间用“|”隔开。 la-south-2 区域 独立提供公有云服务资源、并服务于一个较大地理范围的云服务区域。 如果有多个,中间用“|”隔开,顺序和“云服务区编码”顺序一致。 AP-Singapore 产品类别 指云服务的产品类别,包括: COMMON:华为云通用云服务 HARDWARE:华为云硬件产品 SOFTWARE:华为云软件产品 COMMON 云服务类型编码 产品的云服务类型编码。如果有多个,中间用“|”隔开。 hws.service.type.ec2 云服务类型名称 产品的云服务类型名称。如果有多个,中间用“|”隔开,和“云服务类型编码”顺序一致。 弹性云服务器 产品归属类型编码 产品匹配的伙伴商务折扣归属的云服务类型编码。 hws.service.type.ec2 产品归属类型名称 产品匹配的伙伴商务折扣归属的云服务类型名称。如果有多个,中间用“|”隔开,和“产品归属类型编码”顺序一致。 弹性云服务器 线性产品 指云服务产品是否是线性产品,线性产品即包含一系列规格属性如卷大小或带宽大小等的产品。 Y:是线性产品 N:不是线性产品 N 线性属性编码 云服务线性产品的属性编码。 linearDisk 线性属性名称 云服务线性产品的属性名称。 磁盘大小 线性度量单位ID 云服务线性产品的度量单位ID。 17 线性度量单位名称 云服务产品的线性度量单位名称,和“线性度量单位ID”保持一致。 GB 可售卖周期 云服务产品的可售卖周期,如果有多个,中间用“|”隔开,和周期类型组合使用。 例如,周期类型为MONTH,则产品的可售卖周期为1个月至9个月。 1|2|3|4|5|6|7|8|9 定价 计划ID 云服务产品实施某个定价计划时,该计划的唯一标识。 PLAN506398831931318273 之前的定价计划ID 云服务产品之前所使用的定价计划唯一标识。 PLAN472256170757029889 使用量类型编码 云服务按需产品的使用量类型编码。 Duration 使用量类型名称 云服务按需产品的使用量类型名称,与使用量类型编码保持一致。 时长 使用量定价度量单位ID 云服务按需产品的用量定价度量单位ID。 4 使用量定价度量单位名称 云服务按需产品的用量定价度量单位名称,和“使用量定价度量单位ID”保持一致。 小时 使用量定价度量步长 云服务按需产品的用量定价度量步长,和“单价”组合使用。 例如,单价按时长计费,使用量定价步长为1时: 非线性产品,目前为1小时2.8元 线性产品,目前为1GB1小时2.8元 1 周期数 云服务包年/包月产品的周期数,和周期类型及单价组合使用。 例如,单击为按时长计费,周期类型为MONTH,周期数为1时: 非线性产品,目前为1月2.8元 为线性产品,目前为1GB1月2.8元 1 分档起始值 云服务产品的价格进行分档定价时的档位起始值。 1 分档起始度量单位ID 云服务产品的价格进行分档定价时的档位度量单位ID。 仅产品进行分档定价时存在。 10 分档起始度量单位名称 云服务产品分档定价时的分档度量单位名称,仅产品进行分档定价时存在。 和“分档起始度量单位ID”保持一致。 次 分档结束值 云服务产品分档定价时的分档结束值,仅产品进行分档定价时存在。 10 分档结束度量单位ID 云服务产品分档定价时的分档度量单位ID,仅产品进行分档定价时存在。 20 分档结束度量单位名称 云服务产品分档定价时的分档度量单位名称,仅产品进行分档定价时存在。 和“分档结束度量单位ID”保持一致。 分钟 单价 云服务产品计费时的单价,单位:元。 2.8 币种 云服务产品计费时使用的币种,CNY。 CNY 生效时间 云服务产品定价的生效时间。 2020/08/29 09:28:10 GMT+00:00 失效时间 云服务产品定价的失效时间。 2099/01/01 00:00:00 GMT+00:00 分档模式类型 指云服务产品价格的分档模式,包括: SIMPLE:直接根据话单中的用量进行分档批价(对每条话单中的用量分档) ACCUMULATE:根据一定周期内多条话单累积的用量进行分档的模式(对多条话单的累计量分档) SIMPLE 分档类型 指云服务产品的价格按类别进行分档,包括: STEP:将用量按区间进行划分,分别计算每个区间的资费,最后得到一个费用的总和(举例:用户使用带宽流量不超过500MB的费率为0.1元/MB,超过500MB的部分的费率0.08元/MB。如果用户累计使用带宽流量800MB,则总费用为500*0.1+300*0.08=74元)。 TIER:当用量达到某一个区间时,按照其当前所在的区间的费率进行批价。此时不需要考虑前面区间的单费率(举例:用户使用带宽流量不超过500MB的费率为0.1元/MB,超过500MB的部分的费率0.08元/MB。如果用户累计使用带宽流量800MB,则总费用为800*0.08=64元)。 STEP 分档依据类型 指云服务产品价格的分档依据,包括: USAGE_VALUE:根据话单中的使用量进行分档计算 SPEC_VALUE:根据资源规格属性值进行分档 USAGE_VALUE 分档规格属性 指云服务产品价格分档时的规格属性,包括: BANDW IDT H:带宽大小 CAPACITY:存储大小 COUNT:个数/次数 BANDWIDTH 触发计费的动作类型 指客户使用云服务产品时触发计费的动作,包括: RATE:费率动作(默认) ONE_OFF_RATE:一次性动作 RATE
  • 预算控制 为防止客户过度消费,华为云解决方案提供商可以为转售类客户设置月度预算,用于管理客户每月新增消费金额。 月度预算基于客户每月新增官网价消费金额累计,次月客户预算自动恢复。华为云解决方案提供商可在客户详情中查看客户月度预算使用情况。 如果客户消费超出一定的预算比例,华为云解决方案提供商会收到预警通知。伙伴可选择调整客户月度预算,或者对客户采取冻结措施,冻结后客户无法新购、续订、变更资源;已开通资源可能无法正常操作,但仍会产生费用。 如果客户消费超出预算,华为云会自动限制客户购买新的包月、包年、预留实例订单,但不会限制客户开通按需资源。如需限制客户按需资源的开通,需要华为云解决方案提供商对客户采取冻结措施。 客户与伙伴建立关联关系后,账号默认为冻结状态。解决方案提供商需要为客户设置预算并解除账号冻结,客户才能正常消费。 华为云伙伴服务中心名下解决方案提供商关联的客户的月度预算设置、账号冻结解冻等操作由华为云伙伴服务中心操作。
  • 伙伴账单 华为云在北京时间每月5号12:00前会生成上个月伙伴账单、账单明细和发票,伙伴基于该账单与华为云进行结算。 查看账单明细字段说明请参见账单明细说明。还款请参见还款。 转售类客户关联伙伴期间的消费计入伙伴账单,关联伙伴之前的消费仍由客户自己还款。 解决方案提供商的月度账单明细中包含每个客户消费的详细记录,伙伴可以基于账单明细对客户进行批价,生成转售类客户的账单,与转售类客户进行结算,并为转售类客户开具发票。 解决方案提供商与转售类客户的结算规则由解决方案提供商自行定义。
  • 响应参数 状态码: 200 表4 响应Body参数 参数 参数类型 描述 error Error object 响应错误 result FileContentInfo object 文件详情 status String 响应状态 表5 Error 参数 参数类型 描述 code String 错误码 message String 错误信息 表6 FileContentInfo 参数 参数类型 描述 file_name String 文件名 file_path String 文件路径 size Integer 文件大小 encoding String 文件编码 content_sha256 String sha256编码的文件内容 ref String 分支名 blob_id String blob sha commit_id String 提交对应的SHA id last_commit_id String 最后一个提交对应的SHA id content String base64编码的文件内容
  • URI GET /v2/projects/{repo_id}/repository/files/{file_path} 表1 路径参数 参数 是否必选 参数类型 描述 repo_id 是 Integer 仓库短id file_path 是 String Url编码的新文件的完整路径。 表2 Query参数 参数 是否必选 参数类型 描述 ref 是 String commit id,仓库的branch名或tag名
  • 响应示例 状态码: 200 OK { "result" : { "size" : 9, "encoding" : "base64", "ref" : "master", "content" : "NDU0NTQ1NDQ1", "file_name" : "README.md", "file_path" : "README.md", "content_sha256" : "e16f4f6c41a79d120484774a625bea8a3c3dcb655aa7c7e793ac48639dc63944", "blob_id" : "3325fa3142fd66fedc8c3a5218b417f561e0ea2f", "commit_id" : "a772945ec2765e322cc83e0f467f394effa22cf3", "last_commit_id" : "a772945ec2765e322cc83e0f467f394effa22cf3" }, "status" : "success" }
  • 示例2:A向B转账 执行如下命令,A向B转账,金额为10。 ./appdemo transaction -u A -p XXXXXXA -b b22edf18d64f57954640c8f3f6cf67d9401f262daead588ddfe8178xxxx -t 10 -c ./test-sdk-config.yaml -C tongtai -I idchaincode -T transaction -o aa73c757c9026fb623495d7058ca177f6152bcea 其中-b后的参数为接收方的地址。示例中为注册B用户时的返回值,即B用户注册数据的地址信息。 返回值为A账户的地址:2efc4639bc281060ce013dfea33a47b647b6f4a20103a6321c33d67d5xxxx
  • 示例3:查询账户余额 执行如下命令查询A账户的余额,返回值为A账户余额。 ./appdemo querybalance -p XXXXXX -u A -c ./test-sdk-config.yaml -C tongtai -I idchaincode -T transaction -o aa73c757c9026fb623495d7058ca177f6152bcea 执行如下名查询B账户的余额,返回值为B账户余额。 ./appdemo querybalance -p XXXXXX -u B -c ./test-sdk-config.yaml -C tongtai -I idchaincode -T transaction -o aa73c757c9026fb623495d7058ca177f6152bcea
  • 示例1:注册账户 执行如下命令注册B账户,账户金额为100。 ./appdemo register -u B -p XXXXXX -i 100 -c ./test-sdk-config.yaml -C tongtai -I idchaincode -T transaction -o aa73c757c9026fb623495d7058ca177f6152bcea -u:为注册的用户名B、-p:为B用户密码XXXXXX,密码必须包含大写、小写、数字、特殊字符中的至少两种,-c:为sdk配置文件名,-C:为安装链代码的通道名,-I:为安装示例链代码IDChaincode的实际安装链代码名,-T:为安装示例链代码Transaction的实际安装链代码名,-o:为peer节点组织的ID,可在通道管理界面查询。参数下同。 返回值为一串加密地址,示例: b22edf18d64f57954640c8f3f6cf67d9401f262daead588ddfexxxxx 以相同的方法注册A账户,账户金额为200。 ./appdemo register -u A -p XXXXXX -i 200 -c ./test-sdk-config.yaml -C tongtai -I idchaincode -T transaction -o aa73c757c9026fb623495d7058ca177f6152bcea 返回值为一串加密地址,示例: 2efc4639bc281060ce013dfea33a47b647b6f4a20103a6321c33dxxxxxx
  • 示例5:测试同态乘法 执行如下命令测试同态乘法。 ./appdemo homomulti -c ./test-sdk-config.yaml -a 100 -b 5 -C tongtai -T transaction -o aa73c757c9026fb623495d7058ca177f6152bcea 其中-a和-b后的参数为进行同态乘的乘数和被乘数,其中-a后的参数会被加密,-b后的参数是明文。
  • 链代码结构 Java语言的链代码结构如下: package main // 引入必要的包,系统自动操作,只要在maven或gradle中配置即可 import org.hyperledger.fabric.shim.ChaincodeBase; import org.hyperledger.fabric.shim.ChaincodeStub; public class SimpleChaincodeSimple extends ChaincodeBase { @Override public Response init(ChaincodeStub stub) { // 在该方法中实现链代码初始化或升级时的处理逻辑 // 编写时可灵活使用stub中的API } @Override public Response invoke(ChaincodeStub stub) { // 在该方法中实现链代码运行中被调用或查询时的处理逻辑 // 编写时可灵活使用stub中的API } //主函数,需要调用shim.Start()方法 public static void main(String[] args) { new SimpleChaincode().start(args); } }
  • 链代码接口 链代码启动必须通过调用shim包中的start方法。实际开发中, 您需要自行定义一个类,来继承ChaincodeBase。以下为继承时必须重写的方法: public class SimpleChaincodeSimple extends ChaincodeBase { @Override public Response init(ChaincodeStub stub) { } @Override public Response invoke(ChaincodeStub stub) { } } init方法:在链代码实例化或升级时被调用,完成初始化数据的工作。 Invoke方法:更新或查询账本数据状态时被调用, 需要在此方法中实现响应调用或查询的业务逻辑。
  • AK/SK认证 AK/SK签名认证方式仅支持消息体大小12MB以内,12MB以上的请求请使用Token认证。 AK/SK认证就是使用AK/SK对请求进行签名,在请求时将签名信息添加到消息头,从而通过身份认证。 AK(Access Key ID):访问密钥ID。与私有访问密钥关联的唯一标识符;访问密钥ID和私有访问密钥一起使用,对请求进行加密签名。 SK(Secret Access Key):与访问密钥ID结合使用的密钥,对请求进行加密签名,可标识发送方,并防止请求被修改。 使用AK/SK认证时,您可以基于签名算法使用AK/SK对请求进行签名,也可以使用专门的签名SDK对请求进行签名。详细的签名方法和SDK使用方法请参见API签名指南。 签名SDK只提供签名功能,与服务提供的SDK不同,使用时请注意。
共100000条