华为云用户手册

  • 在计算节点侧查看作业计算过程 用户登录进入计算节点页面。 在左侧导航树上单击“作业管理”,选择作业类型,打开作业列表页面。 查找待获取执行结果和作业报告的作业,单击操作栏的“历史作业”。 图3 历史作业 在历史作业列表中,查找待查看计算过程的作业,单击作业名称展开,在操作栏单击“计算过程”。 图4 在计算节点侧查看作业计算过程 计算过程页面可以点击任务节点,查看开始和结束时间等信息。在计算过程页面下方详情列表打开任务详情,可以查看更详细的计算过程信息。 图5 作业计算过程信息详情
  • 准备本地横向联邦数据资源 上传数据集文件(作业参与方) 上传数据集文件到计算节点挂载路径下,供计算节点执行的脚本读取。如果是主机挂载,上传到宿主机的挂载路径下。如果是OBS挂载,使用华为云提供的 对象存储服务 ,上传到当前计算节点使用的对象桶中。 图5 对象桶名称 此处以主机挂载为例: 创建一个主机挂载的计算节点Agent1,挂载路径为/tmp/tics1/。 使用文件上传工具上传包含数据集iris1.csv的dataset文件夹到宿主机/tmp/tics1/目录下。 iris1.csv内容如下: sepal_length,sepal_width,petal_length,petal_width,class5.1,3.5,1.4,0.3,Iris-setosa5.7,3.8,1.7,0.3,Iris-setosa5.1,3.8,1.5,0.3,Iris-setosa5.4,3.4,1.7,0.2,Iris-setosa5.1,3.7,1.5,0.4,Iris-setosa4.6,3.6,1,0.2,Iris-setosa5.1,3.3,1.7,0.5,Iris-setosa4.8,3.4,1.9,0.2,Iris-setosa5,3,1.6,0.2,Iris-setosa5,3.4,1.6,0.4,Iris-setosa5.2,3.5,1.5,0.2,Iris-setosa5.2,3.4,1.4,0.2,Iris-setosa4.7,3.2,1.6,0.2,Iris-setosa4.8,3.1,1.6,0.2,Iris-setosa5.4,3.4,1.5,0.4,Iris-setosa5.2,4.1,1.5,0.1,Iris-setosa5.5,4.2,1.4,0.2,Iris-setosa4.9,3.1,1.5,0.1,Iris-setosa5,3.2,1.2,0.2,Iris-setosa5.5,3.5,1.3,0.2,Iris-setosa4.9,3.1,1.5,0.1,Iris-setosa4.4,3,1.3,0.2,Iris-setosa5.1,3.4,1.5,0.2,Iris-setosa5,3.5,1.3,0.3,Iris-setosa4.5,2.3,1.3,0.3,Iris-setosa4.4,3.2,1.3,0.2,Iris-setosa5,3.5,1.6,0.6,Iris-setosa5.1,3.8,1.9,0.4,Iris-setosa4.8,3,1.4,0.3,Iris-setosa5.1,3.8,1.6,0.2,Iris-setosa4.6,3.2,1.4,0.2,Iris-setosa5.3,3.7,1.5,0.2,Iris-setosa5,3.3,1.4,0.2,Iris-setosa6.8,2.8,4.8,1.4,Iris-versicolor6.7,3,5,1.7,Iris-versicolor6,2.9,4.5,1.5,Iris-versicolor5.7,2.6,3.5,1,Iris-versicolor5.5,2.4,3.8,1.1,Iris-versicolor5.5,2.4,3.7,1,Iris-versicolor5.8,2.7,3.9,1.2,Iris-versicolor6,2.7,5.1,1.6,Iris-versicolor5.4,3,4.5,1.5,Iris-versicolor6,3.4,4.5,1.6,Iris-versicolor6.7,3.1,4.7,1.5,Iris-versicolor6.3,2.3,4.4,1.3,Iris-versicolor5.6,3,4.1,1.3,Iris-versicolor5.5,2.5,4,1.3,Iris-versicolor5.5,2.6,4.4,1.2,Iris-versicolor6.1,3,4.6,1.4,Iris-versicolor5.8,2.6,4,1.2,Iris-versicolor5,2.3,3.3,1,Iris-versicolor5.6,2.7,4.2,1.3,Iris-versicolor5.7,3,4.2,1.2,Iris-versicolor5.7,2.9,4.2,1.3,Iris-versicolor6.2,2.9,4.3,1.3,Iris-versicolor5.1,2.5,3,1.1,Iris-versicolor5.7,2.8,4.1,1.3,Iris-versicolor6.3,3.3,6,2.5,Iris-virginica5.8,2.7,5.1,1.9,Iris-virginica7.1,3,5.9,2.1,Iris-virginica6.3,2.9,5.6,1.8,Iris-virginica6.5,3,5.8,2.2,Iris-virginica7.6,3,6.6,2.1,Iris-virginica4.9,2.5,4.5,1.7,Iris-virginica7.3,2.9,6.3,1.8,Iris-virginica6.7,2.5,5.8,1.8,Iris-virginica7.2,3.6,6.1,2.5,Iris-virginica6.5,3.2,5.1,2,Iris-virginica6.4,2.7,5.3,1.9,Iris-virginica6.8,3,5.5,2.1,Iris-virginica5.7,2.5,5,2,Iris-virginica5.8,2.8,5.1,2.4,Iris-virginica6.4,3.2,5.3,2.3,Iris-virginica6.5,3,5.5,1.8,Iris-virginica7.7,3.8,6.7,2.2,Iris-virginica7.7,2.6,6.9,2.3,Iris-virginica6,2.2,5,1.5,Iris-virginica6.9,3.2,5.7,2.3,Iris-virginica5.6,2.8,4.9,2,Iris-virginica7.7,2.8,6.7,2,Iris-virginica6.3,2.7,4.9,1.8,Iris-virginica6.7,3.3,5.7,2.1,Iris-virginica7.2,3.2,6,1.8,Iris-virginica 为了使容器内的计算节点程序有权限能够读取到文件,使用命令chown -R 1000:1000 /tmp/tics1/修改挂载目录下的文件的属主和组为1000:1000。 在第二台主机上创建计算节点Agent2,挂载路径为/tmp/tics2/。上传包含数据集iris2.csv的dataset文件夹到宿主机目录下,修改属主。 iris2.csv的内容如下: sepal_length,sepal_width,petal_length,petal_width,class5.1,3.5,1.4,0.2,Iris-setosa4.9,3,1.4,0.2,Iris-setosa4.7,3.2,1.3,0.2,Iris-setosa4.6,3.1,1.5,0.2,Iris-setosa5,3.6,1.4,0.2,Iris-setosa5.4,3.9,1.7,0.4,Iris-setosa4.6,3.4,1.4,0.3,Iris-setosa5,3.4,1.5,0.2,Iris-setosa4.4,2.9,1.4,0.2,Iris-setosa4.9,3.1,1.5,0.1,Iris-setosa5.4,3.7,1.5,0.2,Iris-setosa4.8,3.4,1.6,0.2,Iris-setosa4.8,3,1.4,0.1,Iris-setosa4.3,3,1.1,0.1,Iris-setosa5.8,4,1.2,0.2,Iris-setosa5.7,4.4,1.5,0.4,Iris-setosa5.4,3.9,1.3,0.4,Iris-setosa7,3.2,4.7,1.4,Iris-versicolor6.4,3.2,4.5,1.5,Iris-versicolor6.9,3.1,4.9,1.5,Iris-versicolor5.5,2.3,4,1.3,Iris-versicolor6.5,2.8,4.6,1.5,Iris-versicolor5.7,2.8,4.5,1.3,Iris-versicolor6.3,3.3,4.7,1.6,Iris-versicolor4.9,2.4,3.3,1,Iris-versicolor6.6,2.9,4.6,1.3,Iris-versicolor5.2,2.7,3.9,1.4,Iris-versicolor5,2,3.5,1,Iris-versicolor5.9,3,4.2,1.5,Iris-versicolor6,2.2,4,1,Iris-versicolor6.1,2.9,4.7,1.4,Iris-versicolor5.6,2.9,3.6,1.3,Iris-versicolor6.7,3.1,4.4,1.4,Iris-versicolor5.6,3,4.5,1.5,Iris-versicolor5.8,2.7,4.1,1,Iris-versicolor6.2,2.2,4.5,1.5,Iris-versicolor5.6,2.5,3.9,1.1,Iris-versicolor5.9,3.2,4.8,1.8,Iris-versicolor6.1,2.8,4,1.3,Iris-versicolor6.3,2.5,4.9,1.5,Iris-versicolor6.1,2.8,4.7,1.2,Iris-versicolor6.4,2.9,4.3,1.3,Iris-versicolor6.6,3,4.4,1.4,Iris-versicolor6.8,2.8,4.8,1.4,Iris-versicolor6.2,2.8,4.8,1.8,Iris-virginica6.1,3,4.9,1.8,Iris-virginica6.4,2.8,5.6,2.1,Iris-virginica7.2,3,5.8,1.6,Iris-virginica7.4,2.8,6.1,1.9,Iris-virginica7.9,3.8,6.4,2,Iris-virginica6.4,2.8,5.6,2.2,Iris-virginica6.3,2.8,5.1,1.5,Iris-virginica6.1,2.6,5.6,1.4,Iris-virginica7.7,3,6.1,2.3,Iris-virginica6.3,3.4,5.6,2.4,Iris-virginica6.4,3.1,5.5,1.8,Iris-virginica6,3,4.8,1.8,Iris-virginica6.9,3.1,5.4,2.1,Iris-virginica6.7,3.1,5.6,2.4,Iris-virginica6.9,3.1,5.1,2.3,Iris-virginica5.8,2.7,5.1,1.9,Iris-virginica6.8,3.2,5.9,2.3,Iris-virginica6.7,3.3,5.7,2.5,Iris-virginica6.7,3,5.2,2.3,Iris-virginica6.3,2.5,5,1.9,Iris-virginica6.5,3,5.2,2,Iris-virginica6.2,3.4,5.4,2.3,Iris-virginica5.9,3,5.1,1.8,Iris-virginica 准备模型文件/初始权重(作业发起方) 作业发起方需要提供模型、初始权重(非必须),上传到Agent1的挂载目录下并使用命令chown -R 1000:1000 /tmp/tics1/修改挂载目录下的文件的属主和组。 使用python代码创建模型文件,保存为二进制文件model.h5,以鸢尾花为例,生成如下的模型: import tensorflow as tfimport keras model = keras.Sequential([ keras.layers.Dense(4, activation=tf.nn.relu, input_shape=(4,)), keras.layers.Dense(6, activation=tf.nn.relu), keras.layers.Dense(3, activation='softmax')]) model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])model.save("d:/model.h5") 初始权重的格式是浮点数数组,与模型对应。使用联邦学习训练出来的结果result_1可以作为初始权重,样例如下: -0.23300957679748535,0.7804553508758545,0.0064492723904550076,0.5866460800170898,0.676144003868103,-0.7883696556091309,0.5472091436386108,-0.20961782336235046,0.58524489402771,-0.5079598426818848,-0.47474920749664307,-0.3519996106624603,-0.10822880268096924,-0.5457949042320251,-0.28117161989212036,-0.7369481325149536,-0.04728877171874046,0.003856887575238943,0.051739662885665894,0.033792052417993546,-0.31878742575645447,0.7511205673217773,0.3158722519874573,-0.7290999293327332,0.7187696695327759,0.09846954792737961,-0.06735057383775711,0.7165604829788208,-0.730293869972229,0.4473201036453247,-0.27151209115982056,-0.6971480846405029,0.7360773086547852,0.819558322429657,0.4984433054924011,0.05300116539001465,-0.6597640514373779,0.7849202156066895,0.6896201372146606,0.11731931567192078,-0.5380218029022217,0.18895208835601807,-0.18693888187408447,0.357051283121109,0.05440644919872284,0.042556408792734146,-0.04341210797429085,0.0,-0.04367709159851074,-0.031455427408218384,0.24731603264808655,-0.062861368060112,-0.4265706539154053,0.32981523871421814,-0.021271884441375732,0.15228557586669922,0.1818728893995285,0.4162319302558899,-0.22432318329811096,0.7156463861465454,-0.13709741830825806,0.7237883806228638,-0.5489991903305054,0.47034209966659546,-0.04692812263965607,0.7690137028694153,0.40263476967811584,-0.4405142068862915,0.016018997877836227,-0.04845477640628815,0.037553105503320694 编写训练脚本(作业发起方) 作业发起方还需要编写联邦学习训练脚本,其中需要用户自行实现读取数据、训练模型、评估模型、获取评估指标的逻辑。计算节点会将数据集配置文件中的path属性作为参数传递给训练脚本。 JobParam属性如下: class JobParam: """训练脚本参数 """ # 作业id job_id = '' # 当前轮数 round = 0 # 迭代次数 epoch = 0 # 模型文件路径 model_file = '' # 数据集路径 dataset_path = '' # 是否仅做评估 eval_only = False # 权重文件 weights_file = '' # 输出路径 output = '' # 其他参数json字符串 param = '' 鸢尾花的训练脚本iris_train.py样例如下: # -*- coding: utf-8 -*-import getoptimport sysimport kerasimport horizontal.horizontallearning as hldef train(): # 解析命令行输入 jobParam = JobParam() jobParam.parse_from_command_line() job_type = 'evaluation' if jobParam.eval_only else 'training' print(f"Starting round {jobParam.round} {job_type}") # 加载模型,设置初始权重参数 model = keras.models.load_model(jobParam.model_file) hl.set_model_weights(model, jobParam.weights_file) # 加载数据、训练、评估 -- 用户自己实现 print(f"Load data {jobParam.dataset_path}") train_x, test_x, train_y, test_y, class_dict = load_data(jobParam.dataset_path) if not jobParam.eval_only: b_size = 1 model.fit(train_x, train_y, batch_size=b_size, epochs=jobParam.epoch, shuffle=True, verbose=1) print(f"Training job [{jobParam.job_id}] finished") eval = model.evaluate(test_x, test_y, verbose=0) print("Evaluation on test data: loss = %0.6f accuracy = %0.2f%% \n" % (eval[0], eval[1] * 100)) # 结果以json格式保存 -- 用户读取评估指标 result = {} result['loss'] = eval[0] result['accuracy'] = eval[1] # 生成结果文件 hl.save_train_result(jobParam, model, result)# 读取 CS V数据集,并拆分为训练集和测试集# 该函数的传入参数为CSV_FILE_PATH: csv文件路径def load_data(CSV_FILE_PATH): import pandas as pd from sklearn.model_selection import train_test_split from sklearn.preprocessing import LabelBinarizer # 读取目录数据集,读取目录下所有CSV文件 if os.path.isdir(CSV_FILE_PATH): print(f'read file folder [{CSV_FILE_PATH}]') all_csv_path = glob.glob(os.path.join(CSV_FILE_PATH, '*.csv')) all_csv_path.sort() csv_list = [] for csv_path in all_csv_path: csv_list.append(pd.read_csv(csv_path)) IRIS = pd.concat(csv_list) # 读取CSV文件 else: IRIS = pd.read_csv(CSV_FILE_PATH) target_var = 'class' # 目标变量 # 数据集的特征 features = list(IRIS.columns) features.remove(target_var) # 目标变量的类别 Class = IRIS[target_var].unique() # 目标变量的类别字典 Class_dict = dict(zip(Class, range(len(Class)))) # 增加一列target, 将目标变量进行编码 IRIS['target'] = IRIS[target_var].apply(lambda x: Class_dict[x]) # 对目标变量进行0-1编码(One-hot Encoding) lb = LabelBinarizer() lb.fit(list(Class_dict.values())) transformed_labels = lb.transform(IRIS['target']) y_bin_labels = [] # 对多分类进行0-1编码的变量 for i in range(transformed_labels.shape[1]): y_bin_labels.append('y' + str(i)) IRIS['y' + str(i)] = transformed_labels[:, i] # 将数据集分为训练集和测试集 train_x, test_x, train_y, test_y = train_test_split(IRIS[features], IRIS[y_bin_labels], train_size=0.7, test_size=0.3, random_state=0) return train_x, test_x, train_y, test_y, Class_dictclass JobParam: """训练脚本参数 """ # required parameters job_id = '' round = 0 epoch = 0 model_file = '' dataset_path = '' eval_only = False # optional parameters weights_file = '' output = '' param = '' def parse_from_command_line(self): """从命令行中解析作业参数 """ opts, args = getopt.getopt(sys.argv[1:], 'hn:w:', ['round=', 'epoch=', 'model_file=', 'eval_only', 'dataset_path=', 'weights_file=', 'output=', 'param=', 'job_id=']) for key, value in opts: if key in ['--round']: self.round = int(value) if key in ['--epoch']: self.epoch = int(value) if key in ['--model_file']: self.model_file = value if key in ['--eval_only']: self.eval_only = True if key in ['--dataset_path']: self.dataset_path = value if key in ['--weights_file']: self.weights_file = value if key in ['--output']: self.output = value if key in ['--param']: self.param = value if key in ['--job_id']: self.job_id = valueif __name__ == '__main__': train()
  • 隐匿查询作业(可选) 隐匿查询,也称隐私信息检索,是指查询方隐藏被查询对象关键词或客户id信息,数据服务方提供匹配的查询结果却无法获知具体对应哪个查询对象。数据不出门且能计算,杜绝数据缓存的可能性。 例如查询方希望查询身份证id为“张三”的人信贷公式数据,发起了一个类似于SELECT salary * 16 + age*10 FROM t WHERE id = ‘张三’的单数据集查询。t表存储在数据提供方计算节点中。查询方不希望有人知道自己查询的是“张三”这个人,也不希望知道查出的这条信贷公式结果具体值。 具体操作步骤如下: 联盟管理员登录 TICS 控制台。 作业发起方进入自己所属的计算节点,编写完作业之后,点击作业配置项。在弹出窗口点击隐匿查询开关。点击保存,提交审批。 图1 隐匿查询开关 隐匿查询过滤条件出现多个字段时,需要使用.pir或.PIR标识隐匿查询字段。 图2 pir或.PIR标识隐匿查询字段 合作方进入自己所属的计算节点,进入审批管理页面,点击审批详情,查看查询方的sql请求的id为“????”,无法获取查询具体查询数据。 图3 审批详情 仅限单表查询,不支持多表查询。 Sql中必须包含where条件。不支持join操作,即使是单方内的join操作。 where条件后必须包含隐匿查询字段,隐匿查询字段只能是非敏感唯一标识,且字段数值类型只能是字符串或整数。 where条件后出现多个字段时必须使用.pir或.PIR标识隐匿查询字段。 where条件后不支持or语句,多个条件必须使用and进行拼接。 隐匿查询字段只能用于where id='xxx'或where id in ('xxx' 'xxx')或where id in (select xx from table)语句。 隐匿查询条件为in+子查询时,子查询中数据集只能是发起方数据集。 父主题: 联邦数据分析作业
  • 审批模式作业 TICS基于安全隐私策略的数据安全防护会自动拒绝不合法的SQL语句执行,但当安全规则限制过强的时候,可能会影响正常业务的执行。 对此TICS 提供作业审批功能。配置生效后,所有的计算任务执行时,均会生成审批报告,提交到数据提供方侧,由提供方确认关联数据集的用途和风险。关联参与方都同意后,才能执行SQL作业。 具体操作步骤如下: 作业发起方进入自己所属的计算节点,编写完作业之后,单击“提交审批”。在页面下方可查看审批方和审批进度。 图1 提交审批 审批中或者审批通过后, 如果进行了修改SQL和保存操作,那么就需要重新提交审批。 提交完成后,在页面下方可查看审批方和审批进度。 图2 审批进度 数据提供方进入数据集所在计算节点,单击页面左侧的“审批管理”,查找待处理的审批项。点击“查看详情”。 图3 审批管理 详情页可以看到审批报告,报告内容包括作业发起方、会在该计算节点连接器上执行的SQL语句、各字段作用描述、各字段加密类型、是否在结果中可见(即明文显示)等。 图4 详情 处于保护作业发起方的业务机密性, 这里会屏蔽所有和该审批者无关的字段信息,例如ID字段的描述中,会屏蔽该字段具体和哪个字段做Join。 审批报告中的“字段是否在结果中可见”直接决定了该字段数值是否会明文显示,请根据字段业务类型慎重判断是否可见。 数据提供方确认风险后,在详情页填写审批意见,单击“同意”。 作业发起者执行作业,执行完成后,可在页面下方查看执行结果。 图5 执行作业 父主题: 联邦数据分析作业
  • 计算节点侧查看执行结果、作业报告 用户登录进入计算节点页面。 在左侧导航树上单击“作业管理”,选择作业类型,打开作业列表页面。 查找待获取执行结果和作业报告的作业,单击操作栏的“历史作业”。 图3 历史作业 在历史作业列表中,单击操作栏的“执行结果”或者“作业报告”。在弹出的页面查看执行结果和作业报告。 图4 查看执行结果、作业报告 隐私计算建模训练完成后,可根据每轮迭代的参数变化评估出各参与方提供进行建模的数据集对最终模型的价值,给出量化的模型贡献度信息。 图5 模型贡献度信息 上述模型贡献度信息目前仅在作业类型为纵向联邦作业,选择算法为逻辑回归LR的作业报告中展示。
  • 什么是 SMN 主题 什么是SMN 消息通知 服务(Simple Message Notification,SMN)是可靠的、可扩展的、海量的消息处理服务。它可以依据用户的需求主动推送通知消息,最终用户可以通过短信、电子邮件、应用等方式接收。 对DRS而言 SMN为其他服务均可使用的通用服务,仅需在SMN界面统一配置,如果在其他服务使用时已完成创建和订阅,DRS可以直接选择相应的订阅主题。 如果用户未创建和订阅SMN主题,需要先创建主题,作为发送消息和订阅通知的信道,为发布者和订阅者提供一个可以相互交流的通道。然后添加订阅并请求订阅,这样,订阅用户的华为帐号冻结时才能够将告警信息通过主题发送给订阅这个主题的订阅者。完成创建和添加订阅后,后续的告警通知即可通过SMN服务发送到用户配置的订阅终端。 父主题: 产品咨询
  • DRS任务的双AZ和单AZ有什么区别 目前,DRS实时同步任务在创建任务时支持选择任务类型为“双AZ”或“单AZ”。 双AZ任务:一主一备的经典高可用架构,提高了DRS任务的可靠性。双AZ任务创建后,DRS会同时创建一主一备两个子任务,当主AZ任务发生异常,DRS会自动启动备AZ任务继续进行同步,提高同步任务的可靠性。适用于业务数据量较大,需要长期同步,并对中断时间有严格要求的场景。 单AZ任务:采用单个节点部署架构,每个任务只创建一个节点,性价比较高。适用于业务数据量较小,短期同步,并对中断时间无严格要求的场景。 目前仅部分链路支持任务类型的选择,详细说明可参考双AZ任务倒换。 父主题: 产品咨询
  • DRS任务支持修改对象吗 实时迁移任务:已创建成功但是未确认启动的编辑状态时,可以修改迁移对象,任务启动后,不支持进行修改。 备份迁移任务:仅支持在创建时编辑备份迁移任务。对于已经启动的备份迁移任务,不支持修改。 实时同步任务:已创建成功但是未确认启动的编辑状态时,可以修改同步对象。同步任务在增量阶段,且为表级同步时,可以进行再次编辑对象的操作,库级同步或其他同步阶段不可以进行再编辑,详细操作可参考编辑同步对象。 数据订阅任务:已创建成功但是未确认启动的编辑状态时,可以修改选择对象,任务启动后,不支持进行修改。 实时灾备任务:为实例级灾备,不支持对象选择。 父主题: 产品咨询
  • 源或者目标数据库哪些操作,会影响DRS任务状态 以华为云RDS for MySQL为例,以下操作可能会影响DRS任务状态。 实例备份:一般情况下,实例备份对DRS任务无影响。 单机转主备:正常情况下对DRS任务无影响。 实例重启:重启数据库实例将导致短暂中断,在此期间,实例将不可用,DRS连接短暂中断。这种情况下,DRS会进行自动重试。若重试仍无法恢复,待实例状态正常后,可手动单击任务“操作”列上的“续传”继续任务。 主备倒换:实例主备切换期间,可能会造成几秒或几分钟的服务闪断,这种情况下,DRS会进行自动重试。若重试仍无法恢复,待实例状态正常后,可手动单击任务“操作”列上的“续传”继续任务。 规格变更:规格变更后,将会重启数据库,重启数据库实例将导致短暂中断,在此期间,实例将不可用,DRS连接短暂中断。这种情况下,DRS会进行自动重试。若重试仍无法恢复,待实例状态正常后,可手动单击任务“操作”列上的“续传”继续任务。 实例升级:升级数据库内核小版本会重启实例,重启数据库实例将导致短暂中断,在此期间,实例将不可用,DRS连接短暂中断。这种情况下,DRS会进行自动重试。若重试仍无法恢复,待实例状态正常后,可手动单击任务“操作”列上的“续传”继续任务。 实例异常:这种情况下,DRS会进行自动重试。若重试仍无法恢复,待实例状态正常后,可手动单击任务“操作”列上的“续传”继续任务。 限制连接会话数:DRS任务连接源和目标端需要一定数量的会话数,详细可参考DRS对源数据库和目标数据库有什么影响。当连接数不足时,会导致DRS任务失败,用户可在调整数据库连接数后,单击任务“操作”列上的“续传”继续任务。 网络抖动:针对网络抖动造成的连接失败,DRS会自动进行重试,若重试仍无法恢复,待网络正常后,可手动单击任务“操作”列上的“续传”继续任务。 帐号密码修改:修改数据库帐号密码可能会导致DRS连接失败,详细可参考源库或目标库修改密码后如何操作。 帐号权限修改:修改数据库帐号权限可能会导致DRS权限不足,迁移数据失败。用户可重新为迁移帐号赋权后,单击任务“操作”列上的“续传”继续任务。 源库日志清理:当源库日志(例如MySQL的binlog)被清理时,DRS无法从源库获取到和当前同步位点接续的日志,可能导致任务失败(例如全量或增量阶段失败报错,关键词“binlog is not existed”)。用户可参考重置同步任务内容进行重置,或重新创建任务开始同步。 数据库参数修改:DRS在启动任务前会对源数据库和目标数据库参数进行预检查,在预检查完成后到任务结束前,一般情况下不建议对数据库参数进行修改,避免因参数修改导致的任务失败。如果参数修改导致任务失败,用户可尝试在恢复参数后,单击任务“操作”列上的“续传”继续任务。 父主题: 产品咨询
  • DRS对象选择时的全部迁移、表级迁移、库级迁移有什么区别 目前DRS实时迁移和实时同步任务支持对象选择,实时灾备是按照实例维度进行灾备,不支持选择指定库或表。 实时迁移任务支持“全部迁移”、“表级迁移”或者“库级迁移”。 实时同步任务支持“表级同步”或者“库级同步”。 全部迁移:仅迁移任务支持选择,选择后源数据库中的所有对象全部迁移至目标数据库,对象迁移到目标数据库实例后,对象名将会保持与源数据库实例对象名一致且无法修改。 表级迁移或同步:以表为单位的迁移或同步,库中新增表不会自动加入迁移或同步关系中。如果同步任务,可以通过再次编辑同步对象,将新的表追加到同步关系中;迁移任务启动后不支持编辑迁移对象。 库级迁移或同步:以库为单位的迁移或同步,不可单独选择表,且已选库中新增的表会自动加入迁移或同步关系之中。 父主题: 通用操作
  • 源端MySQL发生主备倒换,DRS任务会丢数据吗 如果源端MySQL已开启了GTID模式,在发生主备倒换时,DRS会记录binlog位点信息,在主备倒换后接续位点继续进行任务,不会丢数据。 源端MySQL可通过修改数据库配置文件方式将GTID开启,重启数据库后生效。 参考命令如下: gtid_mode = onlog_slave_updates = trueenforce_gtid_consistency = on 父主题: 通用操作
  • Oracle到 GaussDB 字符集兼容性说明 Oracle到GaussDB同步时,当源库和目标库字符集不兼容时,可能会导致数据乱码或者同步失败的场景,可参考表1进行设置。 表1 字符集兼容性 源库/目标库 UTF8 GBK GB2312 GB18030 US7ASCII √ √ √ √ UTF8 √ × × × AL32UTF8 √ × × × ZHS16GBK √ √ × √ WE8ISO8859P1 √ × × × WE8ISO8859P2 √ × × × WE8ISO8859P4 √ × × × WE8ISO8859P5 √ × × × WE8ISO8859P7 √ × × × WE8ISO8859P9 √ × × × WE8ISO8859P13 √ × × × WE8ISO8859P15 √ × × × WE8MSWIN1252 √ × × × 父主题: 实时同步
  • MySQL迁移、同步、灾备任务怎么迁移帐号,是否支持修改密码 MySQL实时迁移:支持在创建任务时选择是否进行帐号迁移,详细说明可参考迁移用户。当源和目标库是同一个大版本且为整实例迁移时,增量迁移支持DCL语句,不支持通过更新mysql.user表进行的帐号变更。 MySQL实时同步:不支持同步帐号。 MySQL实时灾备:不支持对系统库下自定义对象有操作权限的帐号灾备;不支持进行灾备对象选择。灾备阶段支持DCL语句,不支持通过更新mysql.user表进行的帐号变更。 父主题: 产品咨询
  • 影响因素 源库的读取吞吐能力 读取吞吐能力越高,迁移速度越快,耗时越少。影响吞吐的因素包括但不限于服务器规格、负载、磁盘IO性能、数据库限流等。 目标库的写入吞吐能力 写入吞吐能力越高,迁移速度越快,耗时越少。影响吞吐的因素包括但不限于服务器规格、负载、磁盘IO性能、数据库限流等。 可用的网络吞吐量 可用的网络吞吐越高,迁移速度越快,耗时越少。影响网络吞吐量的因素包括但不限于可用带宽、防火墙、网络设备限流设置等。 网络质量和网络延迟 网络延迟越小(影响因素包括但不限于源库目标库和DRS实例地理位置的远近程度),迁移速度越快,耗时越少。网络质量差(比如丢包率高)会降低迁移速度。 DRS实例规格 DRS实例规格越大,迁移速度越快,耗时越少。 源数据的模型和分布 此类因素包括是否有主键、是否分区表、是否堆表、平均单行数据量大小、表的数量、索引数量等。 目标库是否已有数据 目标库已有数据可能导致迁移时数据冲突,导致性能下降。 目标库是否有触发器 目标库有触发器可能导致迁移时写入性能下降。 目标库备份和日志等相关设置 如无必要可在迁移期间关闭目标库备份和事务日志,可提升迁移性能。 源库增量数据产生速度 源库增量数据产生速度越快,增量数据追平的耗时越长。 DRS任务数 不考虑其他因素导致的性能瓶颈,通过按表拆分成多个DRS任务,可提升总体迁移性能。
  • 多表归一场景注意事项 DRS支持多表对一的数据聚合场景,最佳实践是推荐只选择同步加列DDL,其他大部分DDL同步都可能会因目标表修改而导致其他任务失败或数据不一致的情况发生,常见情况有:同步truncate导致目标数据全部被清空;同步创建索引导致目标表被锁定;同步rename导致其他任务找不到目标表而失败;同步改列导致其他任务因数据类型不兼容而失败。 多表归一高风险操作: DROP、TRUNCATE、RENAME等高危DDL未过滤,导致目标表DROP、TRUNCATE、RENAME。 随意执行DDL,导致同步任务中断未提前识别业务数据冲突,出现同步后数据不一致。 多对一的表不支持Online DDL工具。Online DDL通常会使用临时表和执行rename操作,多对一任务如果未过滤rename会导致目标数据丢失。 多表归一DDL操作技巧: 增加列ADD COLUMN: 配置DRS任务时过滤ADD COLUMN:先在目标库目标表增加列,再在每个多对一任务的源库源表分别增加列。同步任务会自动兼容源表列少于目标表的场景,因此任务不受影响。顺序相反则会导致任务中断。 配置DRS任务时未过滤ADD COLUMN:DRS会自动识别只执行一次DDL,不会导致任务失败。 修改列MODIFY COLUMN: 配置DRS任务时过滤MODIFY COLUMN:需要确保所有源表已经完成同步无时延并且无业务写入,先在目标库目标表修改列,再在每个多对一任务的源库源表分别修改列。 配置DRS任务时未过滤MODIFY COLUMN:DRS会自动识别只执行一次DDL,不会导致任务失败。 删除列DROP COLUMN: 配置DRS任务时过滤DROP COLUMN:先在每个源库源表删除列,多对一任务的所有源表删除列后,再在目标库表删除列。同步任务会自动兼容源表列少于目标表的场景,因此任务不受影响。顺序相反则会导致任务中断。 配置DRS任务时未过滤DROP COLUMN:DRS会自动识别只执行一次DDL,不会导致任务失败。 DROP、TRUNCATE类操作: 高危操作建议配置DRS任务时过滤掉,手工执行。如果未选择过滤,多对一任务一张源表的DROP、TRUNCATE操作会同步到目标表执行DROP、TRUNCATE操作,比如多对一任务DROP掉其中一个表,在目标库就把多对一的表DROP掉了,DROP索引、DROP约束是类似的。
  • 数据订阅与MySQL到Kafka同步的区别 对比项 MySQL到Kafka同步 数据订阅 支持的源数据库 华为云RDS for MySQL 本地自建MySQL数据库 ECS自建MySQL数据库 其他云MySQL数据库 华为云RDS for MySQL 支持网络 支持公网网络、VPC网络、VPN、专线网络。 仅支持VPC网络,因未开放全网段路由,所以VPC内容器形态网络暂不支持。 数据格式 Avro、JSON和JSON-C SDK 数据类型 全量+增量数据。 仅增量数据。 同步对象 表数据、表结构。 数据更新和结构更新。 稳定性 有任务告警、监控,任务异常自动重试。 无任务告警、监控,任务异常手动重试 性能 支持多规格,可根据不同性能要求选择。 不支持规格选择,性能为极小规格的性能。 商用状态 已经商用,收费。 公测阶段,免费。 由于订阅任务当前存在较多订阅对象和操作约束,推荐使用性能、稳定性更高的MySQL到Kafka同步链路进行数据订阅。 父主题: 产品咨询
  • 使用场景 MySQL为源的迁移或同步任务,在增量阶段使用第三方拷表方式实现的Online DDL工具(如PT-OSC、GH-OST)在源库执行DDL,会先创建临时表,通过临时表做DDL,针对这个情况,使用DRS进行迁移或同步时,可分为以下三种场景: 对于库级和实例级迁移、同步任务,由于Online DDL使用的临时表在同步列表中,DRS会自动同步DDL操作,因此不需要特殊处理。 对于表级迁移或同步任务,如果创建DRS任务时,迁移或同步对象列表中已经提前添加了第三方Online DDL涉及的临时表的场景,DRS也会自动同步DDL操作,不需要特殊处理。 对于表级迁移或同步任务,如果创建DRS任务时,只选中表的数据,由于Online DDL使用的临时表不在选中的列表中,因此不会被DRS同步。可以参考以下使用限制和操作步骤,通过手动在目标库执行DDL的方式,避免源库Online DDL操作导致的源库和目标库表结构不一致,引起的DRS任务失败。
  • 操作步骤 查看DRS任务状态,确认任务状态为增量中且增量时延在10秒以内。 确认需要执行的DDL操作,不同操作在源库和目标库执行的顺序不同。 加列:先在目标库执行,执行成功后在源库执行。 删列:先在源库执行,执行成功后在目标库执行。 增加、修改、删除列默认值:跟操作顺序无关。 修改列类型:先在目标库执行,执行成功后在源库执行。 修改字符集:先在目标库执行,执行成功后在源库执行。 修改列名:先在源库执行,执行成功后等待DRS任务因列不存在失败,然后在目标库执行,续传DRS任务。 加分区:先在目标库执行,执行成功后在源库执行。 删分区:先在源库执行,执行成功后在目标库执行。 加索引:跟操作顺序无关。 删索引:跟操作顺序无关。 加约束(主键、唯一键、check等):先在源库执行,执行成功后在目标库执行。 删约束(主键、唯一键、check等):先在目标库执行,执行成功后在源库执行。 增加字段长度:先在目标库执行,执行成功后在源库执行。 减少字段长度:先在源库执行,执行成功后在目标库执行。 如果一条DDL中包含多个操作的,所有操作除去跟操作顺序无关的操作外(比如修改默认值),剩余操作的要求顺序一样,则按要求顺序操作;否则需要拆成多条DDL操作。如加列的同时修改默认值,先在目标库执行,执行成功后在源库执行。 表1 总结 DDL操作 操作顺序 加列,修改列类型,修改字符集,加分区,删约束,增加字段长度 先在目标库执行,执行成功后在源库执行。 删列,删分区,加约束,减少字段长度 先在源库执行,执行成功后在目标库执行。 增加、修改、删除列默认值,加索引,删索引 跟操作顺序无关。 修改列名 先在源库执行,执行成功后等待DRS任务因列不存在失败,然后在目标库执行,续传DRS任务。 根据2顺序中完成DDL操作后,查看DRS任务状态是否正常。
  • 数据复制服务 是否支持关系型数据库的HA实例迁移 数据复制服务的高可用性保障机制,可以支持关系型数据库的单实例和HA实例的迁移。针对HA实例的迁移,DRS的自动重连技术在连接短暂中断后连接可以得到修复,断点续传技术,根据数据库内部连续性标志可以确保实时同步的连续性和一致性。 源数据库的HA设计,满足浮动IP连接效果,且倒换时RPO=0,则DRS完全支持数据库的HA实例迁移,无需人工介入。 源数据库的HA设计,不能满足浮动IP连接且倒换时RPO=0时,存在以下几种情况: 使用浮动IP,但不能保证倒换时RPO=0时,可以连接,但DRS会识别出数据断层(如果有主备倒换出现数据丢失的话)并提示任务失败,此时只能根据新的数据情况,使用重置功能重新迁移。 使用固定IP,且倒换时RPO=0时,支持迁移(只有在实例正常运行的情况下支持迁移,否则不支持)。 使用固定IP,且不能保证切换时RPO=0时, 可以连接,但DRS会识别出数据断层并提示任务失败,此时只能根据新的数据情况,使用重置功能重新迁移。 出云迁移且目标端数据库为HA实例时,DRS可以保证源的数据完整的迁移到目标数据库,但由于目标数据库本身的倒换不能保证RPO=0,则目标数据库可能会出现数据断层的情况。 父主题: 产品咨询
  • RTO增大处理建议 在“实时灾备管理”页面,选择指定的灾备任务,单击任务名称进入“基本信息”页签。 在“基本信息”页签,单击“灾备监控”页签,查看时延监控的RTO的变化情况。 如果RTO逐渐降低或者只是短时间内增加,则无需关注。 如果RTO持续增加,可在灾备数据库执行以下语句,查看是否有执行时间比较长的sql或者正在执行的DDL。 show processlist 如果灾备数据库异常,需要联系数据库运维工程师解决。
  • RTO增大常见原因 RTO是增量同步期间DRS实例上的事务传输到灾备目标库且回放成功的时间差,RTO值较大说明DRS上需要回放到目标实例的事务有积压。一般有以下几种原因: 灾备任务初始化完成不久,启动灾备任务到当前时间累积的增量数据需要回放。 业务数据库对无主键表进行了批量操作,DRS灾备实例正在同步变更数据较大的无主键表。为了确保无主键表数据一致性,对所有执行操作都进行位点记录,因此效率相比有主键表低。同时,如果目标表无索引,数据更新效率会更低。 业务数据库执行了DDL操作,DRS灾备实例需要等待DDL在灾备目标实例执行完成后,再执行数据回放。 业务数据库对热点表进行频繁操作。DRS灾备实例会对热点表的事务进行合并后再进行回放,减少频繁对目标库操作。 灾备数据库访问异常导致增量数据无法回放成功。
  • MySQL迁移中Definer强制转化后如何维持原业务用户权限体系 Definer的使用主要应用在视图、存储过程、触发器、事件等对象里,Definer并不会限制对象被调用的权限,但会限制对象访问数据库的权限。本场景下,用户在MySQL迁移过程中选择了“所有Definer迁移到该用户下”,则源库用户体系下其他用户帐号在完成用户迁移后,如果用户迁移和权限授权都执行成功,则无需授权便可继续使用原业务(使用DRS用户迁移功能可以实现用户、权限、密码迁移),否则如果想在原来的用户权限体系下延用原业务,则需要进行授权后才具有Definer相关数据库对象的访问使用权限,从而保证原业务正常。 本章节主要介绍如何通过数据库命令行对用户帐号进行授权的方法。 确保新用户(Definer统一使用指定帐号)具备足够的权限执行视图、存储过程等相关SQL。 通过MySQL官方客户端或者其它工具登录目标数据库。 通过如下命令查看需要授权的用户user当前权限详情。 show grants for 'user'@'host'; 为了保证原业务不报错,使用如下命令给用户user授予涉及的数据库对象缺失的操作权限。 grant select,insert,update,delete on db_name.* to 'user'@'host'; 一般情况下,访问数据库的权限包括:SELECT、CREATE、DROP、DELETE、INSERT、UPDATE、INDEX、EVENT、CREATE VIEW、CREATE ROUTINE、TRIGGER、EXECUTE。您需要根据具体的数据库对象查看缺少哪些权限,再进行授权操作。 对于存储过程和函数,必须保证用户user对其有拥有EXECUTE权限,授权SQL命令如下: grant execute on db_name.function_name to 'user'@'host'; 使用授权后的用户帐号访问目标库对象,无异常报错表示授权成功。需要注意:在java项目工程中调用存储过程、函数如果出现 Java.sql.SQLException: User does not have access to metadata required to determine stored procedure parameter types. If rights can not be granted, configure connection with "noAccessToProcedureBodies=true" to have driver generate parameters that represent INOUT strings irregardless of actual parametertypes,则需要单独执行用户user对mysql.proc库的授权: grant select on mysql.proc to 'user'@'host'; 父主题: 实时迁移
  • Oracle等异构数据库迁移到MySQL后的数据库排序规则为什么是utf8mb4_bin 由于不同的数据库支持的字符集有差异,Oracle等数据库迁移到MySQL后,会转换成支持字符相对全面的UTF8MB4字符集。此字符集对应的默认排序字符集为utf8_general_ci,是大小写不敏感的,即认为"abc"和"ABC"是相同数据。为了避免Oracle等大小写敏感的数据库到MySQL迁移失败(主键冲突等),或者迁移后对业务有影响(查询结果和Oracle有区别),请参考以下建议。 1. 使用DRS做目标端为MySQL的异构迁移/同步时,DRS自动将数据库(仅涉及迁移的库)字符集排序为utf8mb4_bin默认字符集,可以后续确保同库内新增表、列与迁移表、列的排序规格一致,从而避免因表、列的排序规则不一致时进行关联查询,执行计划中因索引数据排序不同而无法利用索引的情况。 2. 可在实例级设置参数collation_server = utf8mb4_bin,该设定可以确保全实例默认字符集(有别于建议1,建议1是仅迁移的库,这里是全局)一致,均为utf8mb4_bin,需要用户根据业务情况决策是否应用于全实例。 父主题: 实时迁移
  • 如何设置最小化权限且独立的使用DRS的Oracle帐号 源数据库为Oracle的全量迁移至少需要CREATE SESSION, SELECT ANY TRANSACTION, SELECT ANY TABLE, SELECT ANY DICTIONARY权限(当目标库为PostgreSQL时,还需要SELECT ANY SEQUENCE权限),源数据库为Oracle的增量迁移还需要日志解析权限。本小节主要介绍如何使用DRS设置最小化权限且独立的Oracle帐号的具体操作。 全量迁移模式。 创建一个用户用于迁移,此处以User1为例。 参考命令:CREATE USER User1 IDENTIFIED BY pwd 其中User1为用户名,pwd为密码。 使用sys用户或者具有DBA权限的用户执行以下语句对User1用户赋予需要的权限。 参考命令:GRANT CREATE SESSION, SELECT ANY TRANSACTION, SELECT ANY TABLE, SELECT ANY DICTIONARY TO User1 全量+增量迁移模式。 创建一个用户用于迁移,此处以User1为例。 参考命令:CREATE USER User1 IDENTIFIED BY pwd 使用sys用户或者具有DBA权限的用户执行以下语句对User1用户赋予需要的权限。 参考命令:GRANT CREATE SESSION, SELECT ANY TRANSACTION, SELECT ANY TABLE, SELECT ANY DICTIONARY TO User1 使用sys用户或者具有DBA权限的用户执行以下语句对User1用户赋予日志解析权限。 Oracle版本小于12C。 参考命令:GRANT EXECUTE_CATA LOG _ROLE TO User1 Oracle版本大于等于12C。 参考命令:GRANT EXECUTE_CATALOG_ROLE TO User1 参考命令:GRANT LOGMINING TO User1 父主题: 权限管理
  • 目标库读写设置是实例级还是库级 配置迁移任务时,目标数据库实例可以选择设置为“只读”或者“读写”状态。 只读:目标数据库整个实例将转化为只读、不可写入的状态,迁移任务结束后恢复可读写状态,此选项可有效的确保数据迁移的完整性和成功率,推荐此选项。 读写:目标数据库可以读写,但需要避免操作或接入应用后会更改迁移中的数据(注意:无业务的程序常常也有微量的数据操作),进而形成数据冲突、任务故障、且无法修复续传,充分了解要点后可选择此选项。 只读保护优点是避免用户对正在迁移的数据库或表进行DDL或DML误操作,造成数据不一致,可提高迁移完整性和数据一致性。 任务启动后,DRS不支持修改目标数据库状态。 待所有设置该目标库为“只读”状态的迁移任务结束后,可恢复读写。 父主题: 通用操作
  • DRS出现数据膨胀怎么办 DRS在全量迁移阶段,为了保证迁移性能和传输的稳定性,采用了行级并行的迁移方式。当源端数据紧凑情况下,通过DRS迁移到云上RDS for MySQL后,可能会出现数据膨胀现象,使得磁盘空间使用远大于源端。针对这种情况,客户可选择在目标库中执行以下命令,进行优化整理从而缩小空间。 optimize table table_name 由于命令optimize会进行锁表操作,所以进行优化时要避开表数据操作时间,避免影响正常业务的进行。 父主题: 产品咨询
  • DRS需要源数据库停止业务吗 DRS任务分为全量、增量、全量+增量三种模式,不同链路支持的模式不同。 全量模式:该模式为数据库一次性迁移,适用于可中断业务的数据库迁移场景,全量迁移将非系统数据库的全部数据库对象和数据一次性迁移至目标端数据库。 增量模式:该模式通过解析日志等技术,将源端产生的增量数据持续迁移至目标端数据库。 全量+增量模式:该模式为数据库持续性迁移,适用于对业务中断敏感的场景,通过全量迁移过程完成目标端数据库的初始化后,增量迁移阶段通过解析日志等技术,将源端持续迁移至目标端数据库,保持数据一致。 增量模式、全量+增量模式的任务不会自动结束,会持续将源端产生的增量数据迁移至目标端数据库,需用户判断并手动结束任务,可参考如何判断数据迁移任务可以停止。 用户在创建任务时,可根据情况选择不同模式,DRS不需要源数据库停止业务,但需注意全量和增量不同阶段对数据库产生的影响,可参考DRS对源数据库和目标数据库有什么影响。 父主题: 产品咨询
  • 源库Oracle为RAC集群时,为什么建议使用SCAN IP连接 源库Oracle为RAC集群时,建议使用SCAN IP+ SERVICE_NAMES方式创建任务,因为SCAN IP具有更强的容错性,更好的负载能力,更快的同步体验。 如果需要使用SCAN IP,需要保证SCAN IP与源库的所有VIP互通,否则无法通过测试连接检查。 若不使用SCAN IP,可以使用某一节点的VIP,其他节点异常不影响同步。 关于SCAN IP的说明,可参考Oracle官网文档。 父主题: 实时同步
  • 如何判断数据迁移任务可以停止 您可参考以下方法,确认任务是否可以结束。结束之前您需要确认完成以下几点: 请您确认至少在业务低峰期有过一次完整的数据对比。 完成业务割接。 先中断业务(如果业务负载非常轻,也可以尝试不中断业务)。 在源数据库端执行如下语句(此处以MySQL为例),并观察在1-5分钟内若无任何新会话执行SQL ,则可认为业务已经完全停止。 show processlist; 上述语句查询到的进程列表中,包括DRS迁移实例的连接,您需要确认除DRS迁移实例的连接外无任何新会话执行SQL,即可认为业务已经完全停止。 同步时延为0,并稳定保持一段时间;同时,您可以使用数据级对比功能,进行割接前的最后一次数据级对比,耗时可参考之前的对比记录。 如果时间允许,则选择全部对比。 如果时间不允许,则推荐对比活跃表,关键业务表,第二步对比多次存在差异的表等。 确定系统割接时机,业务系统指向目标数据库,业务对外恢复使用。 结束迁移任务,该操作仅删除了迁移实例,迁移任务仍显示在任务列表中,您可以进行查看或删除。 父主题: 实时迁移
  • 数据复制服务是否采用了压缩技术 压缩技术是提升性能和解决数据膨胀的关键技术,DRS在数据传输和增量数据存储两大环节采用了压缩技术。 数据传输压缩:在网络带宽不理想的环境中,进行数据同步与传输,DRS可以开启压缩开关,以减少数据传输对带宽的占用量。 增量数据存储压缩:增量数据转储成逻辑文件后,将会出现膨胀现象,DRS针对该场景做了存储压缩技术,使得本地逻辑文件缓存在DRS时占用磁盘空间大大降低。 父主题: 产品咨询
共100000条