华为云用户手册

  • 使用须知 对于“包年/包月”模式的数据库实例,您需要进行订单退订才可删除实例,详细操作请参见退订包周期实例。 删除实例后,该实例上的数据以及相关的自动备份将全部被清除,且不可恢复,请谨慎操作。 文档数据库服务默认保留所有手动备份,实例删除后,可用来恢复。 开启操作保护的用户,在进行敏感操作时,通过进行二次认证再次确认您的身份,进一步提高账号安全性,有效保护您安全使用云产品。关于如何开启操作保护,具体请参考《 统一身份认证 服务用户指南》中敏感操作的内容。
  • 选择合适的分片键 背景 分片集群中数据的分片以集合为基础单位,集合中的数据通过分片键被分成多个部分。分片键是在集合中选择的一个合适的字段,数据拆分时以该分片键的值为依据均衡地分布到所有分片中。如果您没有选择到合适的的分片键,可能会降低集群的使用性能,出现执行分片语句时执行过程卡住的问题。 分片键一旦设置后不能再更改。如果未选取到合适的分片键,需要使用正确的分片策略,将数据迁移到新的集合后重新执行分片。 合适的分片键的特点 所有的插入、更新以及删除操作,将会均匀分发到集群中的所有分片中。 key的分布足够离散。 尽量避免scatter-gather查询。 如果所选分片键不具备以上所有特点,将会影响集群的读写扩展性。例如,通过find()操作读取的工作量在分片中非均匀分布,最终会产生查询热分片。同样,如果写工作量(插入、更新和修改)在分片中非均匀分布,最终会产生写热分片,严重限制分片的优势。因此,您需要根据应用读写状态(重读取还是重写入)、经常查询及写入的数据等业务需求,调整您的分片键。 需要注意,对已有数据分片后,如果update请求的filter中未携带片键字段并且选项upsert:true或者multi:false,那么update 请求会报错,并返回“An upsert on a sharded collection must contain the shard key and have the simple collation.” 判断标准 您可以通过表2中的几个维度,判断所选分片键是否能够满足业务需求。 表2 合理分片键的判断依据 判断依据 说明 片键基数 片键基数是指划分数据块的能力。例如,要记录某个学校的学生信息,由于学生的年龄比较集中,如果选择年龄作为分片键,同一个数据段中将存储很多同龄学生的数据,影响集群的性能以及可管理性。由于学生的学号唯一,如果选择学号作为分片键,分片基数较大,有利于数据的均匀分布。 写分布 若用户业务在同一时间段有大量写操作,则希望这些写操作能够均匀分布到各个分片上。如果数据分布策略为范围分片,并以一个单调递增的值作为分片键,此时,大量写入的数据同样是片键字段递增,数据将写入同一个分片。 读分发 若用户业务在同一时间段有大量读操作,则希望这些读操作能够均匀分布到各个分片上,以充分利用各分片节点的计算性能。 定向读 dds mongos查询路由器可以执行定向查询(只查询一个分片)或scatter/gather查询(查询所有分片)。只有查询中存在分片键,dds mongos才能定位到单一分片,因此,您需要选择在业务运行时可用于普遍查询的分片键。如果您选择合成的分片键,将无法在定向查询中使用该片键,所有的查询方式将变成scatter/gather查询,从而限制扩展读数据的能力。
  • 选择合适的数据分布策略 分片集群支持将单个集合的数据分散存储在多个分片上,用户可以根据集合内文档的分片键来分布数据。 目前,主要支持两种数据分布策略,即范围分片(Range based sharding)和Hash分片(Hash based sharding),设置方式请参见4。 下面分别介绍这两种数据分布策略以及各自的优缺点。 范围分片 基于范围进行分片,即集群按照分片键的范围把数据分成不同部分。假设有一个数字分片键,为一条从负无穷到正无穷的直线,每一个片键的值均在直线上进行标记。可以理解为将该直线划分为更短的不重叠的片段,并称之为数据块,每个数据块包含了分片键在一定的范围内的数据。 图1 数据分布示意图 如上图所示,x表示范围分片的片键,x的取值范围为[minKey,maxKey],且为整型。将整个取值范围划分为多个chunk,每个chunk(通常配置为64MB)包含其中一小段的数据。其中,chunk1包含x值在[minKey, -75]中的所有文档,每个chunk的数据都存储在同一个分片上,每个分片可以存储多个chunk,并且chunk存储在分片中的数据会存储在config服务器中,dds mongos也会根据各分片上的chunk的数据自动执行负载均衡。 范围分片能够很好的满足范围查询的需求,例如,查询x的取值在[-60,20]中的文档,仅需dds mongos将请求路由到chunk2。 范围分片的缺点在于,如果分片键有明显递增(或递减)趋势,新插入的文档很大程度上会分布到同一个chunk,从而无法扩展写的能力。例如,使用“_id”作为分片键,集群自动生成id的高位值将是递增的时间戳。 Hash分片 根据用户的分片键值计算出Hash值(长度64bit且为整型),再按照范围分片策略,根据Hash值将文档分布到不同的chunk中。基于Hash分片主要的优势为保证数据在各节点上分布基本均匀,具有“相近”片键的文档很可能不会存储在同一个数据块中,数据的分离性更高。 图2 数据分布示意图 Hash分片与范围分片互补,能将文档随机分散到各个chunk,充分扩展写能力,弥补范围分片的不足。但所有的范围查询要分发到后端所有的分片,才能获取满足条件的文档,查询效率低。
  • 数据库和集合的创建 使用短字段名,以节约存储空间。文档数据库与关系型数据库不同,集合中的每个文档都存储字段名,使用短字段名可以有效的节约存储空间。 有效的控制集合中的文档数量,避免影响查询性能。如果有必要,可以进行定期归档。 每条文档都提供默认的“_id”值,禁止向“_id”中保存自定义值。 固定集合相较其他集合,插入速度快,并且能够自动删除旧数据。用户可以根据业务需要,选择创建固定集合以提高性能。
  • 查询操作 索引 根据业务需求,对经常查询的数据字段创建适当的索引。需注意,索引会占用一些空间,并且插入操作和索引更新会消耗资源。因此,建议每个集合的索引数量不超过5个。 案例:出现数据查询缓慢,如果没有创建索引,建议对经常查询的数据字段创建适当的索引,优化查询速度。 对于包含多个键的查询,建议创建包含这些键的复合索引。复合索引的键值顺序很关键,需遵循索引最左前缀原则,查询应包含最左索引字段,以索引创建顺序为准,与查询字段顺序无关。 给索引添加TTL属性,自动筛选过期文档并删除。创建TTL的索引必须是日期类型。TTL索引是单字段索引,而非复合索引。 需要在集合中某个字段上创建索引,但当集合中大量文档不包含该键值时,建议创建稀疏索引。 创建文本索引时,字段指定text,而不是1或者-1。每个集合只有一个文本索引,但它可以为任意多个字段建立索引。 命令使用 使用findOne方法,在数据库中查询匹配多个项目,将会在自然排序文件集合中返回第一个项目。如果需要返回多个文档,则使用find方法。 如果查询无需返回整个文档,或只是用来判断键值是否存在,可以通过投影$project来限制返回字段,减少网络流量和客户端的内存使用。 除了前缀样式查询,正则表达式查询执行的时间比大多数选择器更久,不建议使用索引。 查询中的某些含“$”的操作符可能会降低使用性能。在业务中尽量不要使用该类操作符:$or、$nin、$not、$ne、$exists。 表1 操作符说明 操作符 说明 $or 有多少个条件就会查询多少次,最后合并结果集,建议替换为$in。 $nin 可能会匹配到大多数的索引,此时,查询优化器会退化为全表扫描。 $not 可能会导致查询优化器无法匹配到具体的索引,退化为全表扫描。 $ne 选择字段值不等于指定值的文档,如果多数为取相反值的文档,将会扫描整个索引。 $exists 对于松散的文档结构,查询必须遍历每一个文档。 更多信息,请参见MongoDB官方文档。 注意事项 操作符$where和$exists中不能使用索引。 如果查询结果需要排序,尽量控制结果集的数量。 涉及多个字段的索引时,尽量将用于精确匹配的字段放在索引的前面。 如果查询条件中的键值顺序和复合索引中的创建顺序不一致,DDS会自动优化为查询跟索引顺序一致。 修改操作 通过操作符对文档进行修改,通常可以获得更好的性能。该方式不需要往返服务器来获取并修改文档数据,在序列化和传输数据上花费更少的时间。 批量插入 批量插入(batchInsert)可以减少数据向服务器的提交次数,提高使用性能。批量提交的数据的BSON Size不超过48MB。 聚合运算 聚合运算中,$match需前置于$group,减少$group操作符要处理的文档数量。
  • 解决方案 控制并发连接数。连接数据库时,需要计算业务一共有多少个客户端, 每个客户端配置的连接池大小是多少,总的连接数不宜超过当前实例能承受的最大连接数的80%。连接太多会导致内存和多线程上下文的开销增加,影响请求处理延时。 建议配置连接池,连接池最大不要超过200。 降低单次请求的内存开销,例如通过创建索引减少集合的扫描、内存排序等。 在连接数合适的情况下内存占⽤持续增⾼,建议升级内存配置,避免可能存在内存溢出和大量清除缓存而导致系统性能急剧下降。 集群实例,请参见变更集群实例的CPU和内存规格。 副本集实例,请参见变更副本集实例的CPU和内存规格。 单节点实例,请参见变更单节点实例的CPU和内存规格。
  • 解决方案 对于集群实例,可能是因为选择和设置的分片不合理导致数据分布不均衡,从而引起磁盘空间使用率高的情况。 此时,可以对数据库集合进行合适的分片,具体操作请参见设置数据分片以充分利用分片性能。 随着业务数据的增加,原来申请的数据库磁盘容量不足。此时建议扩容磁盘空间,确保磁盘空间足够。 集群实例,请参见扩容集群实例的磁盘空间。 副本集实例,请参见扩容副本集实例的磁盘空间。 单节点实例,请参见扩容单节点实例的磁盘空间。 如果原有实例规格的磁盘已是最大的,请先升级规格。 集群实例,请参见变更集群实例的CPU和内存规格。 副本集实例,请参见变更副本集实例的CPU和内存规格。 单节点实例,请参见变更单节点实例的CPU和内存规格。 存在大量过期的数据文件占用磁盘空间,此时需要及时处理过期数据文件。例如:如果整个库不需要了,则可以执行dropDatabase命令进行删除,从而快速释放磁盘空间。 后台数据处理机制原因。 无论写入、更新或删除(包括索引插入和删除)等操作,在后台实际上都会转成写入。实例在使用过程中,删除数据并不会回收磁盘空间,这些未被回收的磁盘空间被称为磁盘碎片。磁盘碎片会被数据库继续使用,当有新数据插入时,会重复利用这些碎片,而不需要新申请磁盘空间。根据底层存储引擎的不同(RocksDB和WiredTiger),又会有不同的具体表现。 RocksDB在删除数据后,将删除操作直接转化为追加写,在积攒了一定数据量的冗余数据后,会自动触发后台compact线程对同一数据的多版本进行归并聚合,从而释放多余的磁盘空间,因此建议等待系统自动回收。当磁盘空间使用率较高,接近只读状态阈值时,请联系华为工程师处理。 WiredTiger在删除数据,进行数据多版本归并聚合后,也会空余出磁盘空间碎片,但wiredTiger并不会将这部分磁盘空间返还给操作系统,而是打上标记预留给当前collection后续的写入,此collection后续的写入会优先使用这部分预留的磁盘空间,如果需要释放这部分磁盘空间,可以尝试通过执行compact命令进行释放(注:此命令会阻塞正常业务,因此默认情况下是禁用状态)。
  • 数据库读写性能提升 常见的排查点: 如果数据库有直接报错信息Timeout,需要检查实例的连接数是否已达到上限。 检查方法:通过查看监控指标,查看当前活动连接数是否已经达到当前实例支持的最大连接数。 解决方案:请参见实例的连接数满导致实例连接失败,如何处理。 检查连接方式是否合理。 检查方法:检查连接实例时,集群实例是否同时连接了多个dds mongos节点,副本集是否同时连接了主节点和备节点。 解决方案:如果是集群实例,连接实例时建议同时连接多个dds mongos节点,这样可以分担负载并提高可用性;如果是副本集实例,建议同时连接主备节点,这样不仅提升了数据读写性能,而且避免了在发生主备节点切换后,从客户端写入数据报错的问题。 分析实例的监控指标是否存在异常。 检查方法:通过查看监控指标,观察CPU使用率、内存使用率等使用情况。 解决方案:如果CPU和内存指标异常,需要检查客户端业务或者实例数据是否过于集中,造成负载过高。客户端业务过于集中,则需要客户端进行架构优化。数据过于集中,则需要对数据进行必要的分片。 检查慢日志是否过多。 检查方法:请参见查看慢日志。 解决方案:请参见慢操作优化。 其他的注意点: 执行查询时,只选择需要返回的字段,不需要的字段不要返回。修改数据时,只修改变化需要修改的字段,不要整个对象直接存储全部修改。从而减少网络和进程处理的负载。 同一个业务场景,能一次查询返回的必须一次查询 ,减少和数据库的交互次数。 单个实例中,数据库的总的个数不要超过200个,总的集合个数不要超过500个。 业务上线前,一定要对数据库进行性能压测,评估业务峰值场景下,对数据库的负载情况。 禁止同时执行大量并发事务,且长时间不提交。 业务正式上线前,所有的查询类别,都应该先执行查询计划检查查询性能。 检查实例规格的性能基线,分析当前的业务需求是否达到上限。 父主题: 性能调优
  • 参数调优 数据库参数是数据库系统运行的关键配置信息,设置不合适的参数值可能会影响业务。本文列举了一些重要参数说明。更多参数的详细说明请参见MongoDB官网。 如需通过控制台界面修改参数值,请参见修改DDS实例参数。 enableMajorityReadConcern 该参数表示读取数据时,是否需要从大多数节点获取一致的数据后才返回结果。 默认值为“false”,表示读取数据时,不需要从大多数节点获取一致数据后返回结果,即从单个节点上读取数据就可以返回结果。 该参数设为true的时候,表示读取数据时,需要从大多数节点获取一致数据后才返回结果。该操作会导致LAS文件过大,进而造成CPU过高和磁盘占用大。 在DDS中,不支持设置majority级别的readConcern。对于需要majorityReadConcern的场景,可以将WriteConcern设置为majority,表示数据写入到大多数节点了,这样也就保证了大多数节点的数据一致了。然后通过读取单个节点的数据,就能保证用户读到的数据已经写入到大多数节点,而这样的数据不会发生回滚,避免了脏读的问题。 MongoDB可以通过writeConcern来定制写策略,通过readConcern来定制读策略。 当指定readConcern级别为majority时,能保证用户读到的数据已经写入到大多数节点,而这样的数据不会发生回滚,避免了脏读的问题。 failIndexKeyTooLong 默认值为“true”。 该参数不支持修改,避免过长索引Key。 net.maxIncomingConnections 该参数表示dds mongos或mongod可接受的最大同时连接数量。该参数依赖于实例的规格,实例规格不同对应其默认值也不同。因此,此参数在用户未设置前显示为“default”,表示该参数随内存规格变化。 security.javascriptEnabled 默认值为“false”。 该参数表示是否允许mongod上执行JavaScript脚本。为了安全考虑,默认值为“false”,表示不允许mongod上执行JavaScript脚本,mapreduce、group等命令也将无法使用。 disableJavaScriptJIT 默认值为“true”。 该参数表示是否禁用JavaScriptJIT编译技术。JavaScriptJIT编译技术实现了即时 (JIT) 编译以提高运行脚本时的性能。 “disableJavaScriptJIT”默认值为“true”,表示禁用JavaScriptJIT编译技术。如果需要启用JavaScriptJIT编译技术,可以将“disableJavaScriptJIT”的值设置为“false”。 operationProfiling.mode 默认值为“slowOp”。 该参数表示数据库分析器的级别。 该参数支持如下取值: 默认值为“slowOp”,表示对于耗时超过慢查询阈值的操作,采集器采集数据。 取值为“off”,表示分析器关闭,不收集任何数据。 取值为“all”,表示采集器采集所有操作的数据。 operationProfiling.slowOpThresholdMs 默认值为“500”,单位为ms。 该参数表示慢查询的时间阈值,单位为毫秒,超过该阈值的操作将被认为是慢操作。 如无特殊需求,建议使用默认值500ms。 maxTransactionLockRequestTimeoutMillis 默认值“5”,取值范围为5~100,单位为ms。 该参数表示事务等待获取锁的时间,超过该时间则事务回滚。 父主题: 性能调优
  • 数据库实例状态 表1 状态和说明 状态 说明 正常 数据库实例运行正常。 异常 数据库实例不可用。 创建中 正在创建数据库实例。 创建失败 数据库实例创建失败。 备份中 正在创建数据库实例备份。 重启中 按照用户请求,或修改需要重启才能生效的数据库参数后,重启实例中。 主备切换中 正在切换副本集实例及集群实例的shard、config的主备节点。 节点扩容中 正在扩容集群实例的shard或dds mongos节点个数。 删除节点中 正在删除添加失败的节点。 存储扩容中 正在扩容实例的磁盘大小。 规格变更中 正在变更实例的CPU和内存规格。 转包周期中 实例的计费方式正在由“按需计费”转为“包年/包月”。 恢复检查中 该实例下的备份正在恢复到新实例。 恢复中 该实例下的备份正在恢复到已有实例。 恢复失败 通过备份恢复到已有实例失败。 切换SSL中 正在开启或关闭SSL通道。 慢日志配置修改中 正在切换慢日志明文显示开关。 修改内网地址中 正在修改节点的内网IP地址。 修改端口号中 正在修改数据库实例的端口。 修改安全组中 正在修改数据库实例的安全组。 冻结 账户余额小于或等于0元,系统对该用户下的实例进行冻结。您需前往费用中心充值成功,欠款核销后,冻结的实例才会解冻。 补丁升级中 正在进行补丁升级。 包周期变更资源检查中 包周期实例在进行变更过程中所持续的状态。
  • 如何配置架构规则方案 架构配置,只有管理员可以配置,可设置模型工程视图类型,以及配置对应视图类型下面的架构图元关系和连线规则。 每种模型图是可以配置架构层级关系,下面以4+1视图下逻辑视图中的逻辑模型为例作简单说明,其它类型的模型图配置方法可参考此处,如图所示。 4+1视图中逻辑视图下的逻辑模型有自己的初始默认规则,用户可以默认使用也可自己单独配置。 新增一个新方案,单击 “新增方案”按钮,出现一条记录,名称为:scheme1,名称可以通过后面编辑再次修改。 单击操作栏“新增层级”。 选择逻辑模型下的System元素为一级节点,一级节点不需要配置关联的父级节点和关系,只需要配置显示是否嵌套,如下所示。 添加第二层级构造型元素时,就需要配置二级元素与一级元素的父子关系连线的类型以及指向关系。 如图所示的Subsystem中的关联父级列;三级及更深层级可以依次参照此方式配置,不再赘述。 配置完后需要保存配置,并设置为启用状态,勾选上图启用状态位置,并保存。 父主题: 架构信息
  • 如何配置自定义元素构造型 当在模型设计过程中,发现现有的模型图元无法满足设计表达的要求,此时需要添加一些新类型的图元放入到工具箱中来使用。用户可以单击“新建构造型”按钮,来创建新的构造型元素,如图所示。 按上图示例,新增一个示例构型元素,如图所示: 元素类型:此处选择的类型决定图元的外观样式和默认属性。 继承构造型:继承选择的目标类型的属性信息。 是否继承扩展属性:是否继承类型选择的元素的扩展属性。 创建成功后显示在自定义构造型列表,操作栏功能如下: “修改构造型”修改名称、描述及元素类型。 “检查属性”,查看继承过来的属性,并新增属性或调整已有属性的顺序。 “关联视图”,关联视图下面的模型图。 单击按钮后,右侧弹出编辑的界面,勾上应用后即可以在对应的模型图画作中应用到新增的自定义构造型元素,否则引用不到。 “删除构造型”,删除该自定义构造型元素。 父主题: 模型管理
  • 如何创建包 在工程根节点下面建包,需要单击工程名称菜单项的“新建包”按钮。 在包目录下面建子包目录节点,则选中包目录节点,在菜单中使用“新建包”功能即可。 选择要增加包的包节点,单击后面的选项按钮,选择“新建包”。 建包需要创建包的角色权限,如果看不到新增包的菜单项,需要申请建包对应的角色权限,权限介绍可参考权限管理,申请对应的角色。 在弹出的窗口中输入新增包的名称后单击“保存”。 父主题: 模型管理
  • 顺序图怎么连线 把图元拖到图中后,开始画连线,注意连线不能直接拖到图上,画连线有两种方式,一种是先在工具箱中选中要使用的连线类型,一种是直接在图元间连线,在弹出的连线类型框中选择要使用的连线类型。 方式一:先选中连线,鼠标放在开始生命线待鼠标变成十字光标左键拉伸移动至目标生命线,待目标生命线变色后松开鼠标左键。 连线成功后生命线会自动生成激活块,手动无法拉伸长度,根据生命线消息线的发送/接收自动调节长度,可通过连线右键设置激活块的向上/向下延伸源端、结束源端/目标端激活块,提升/降低消息线层次。 方式二:鼠标移至生命线直至元素四周出现蓝色三角,左键拉伸连线目标到生命线上,目标生命线变颜色后即可松开,弹出连线类型选择。 自关联消息(Self-Message), 表示方法的自身调用以及一个对象内的一个方法调用另外一个方法。 将开始消息线自身拉出的线连接到自身的虚线上,当虚线变颜色后松开即可。自关联消息线的长度固定,高度不可调整。 父主题: 模型设计
  • 如何实现图与图之间的关联跳转 两种方式,一种是子图方式,一种是关联图方式。 子图方式:在元素下面建子图或者在项目树上把其它模型图拖到该元素下面构成子图,可以实现双击元素图形上的子图角标,快速打开图形; 当前图元在项目树节点下面有子模型图,单击操作可以打开该图元包含的模型图; 如果当前图元在项目树节点下面有多个了模型图,单击该操作右侧界面会弹出多个模型图的列表,单击列表中的模型图名称,可以打开对应的模型图; 通过双击图标上的子图图标也可以直接打开图元的子图; 关联图方式:将元素与图进行手动关联,可以实现双击元素图形上的关联图角标,快速打开关联的图形; 元素关联到当前模型工程其他图,在元素菜单中点“关联图”: 在弹出的窗口中单击加号“选择关联图”,在显示的项目树节点中选择要关联的图,单击“保存”。 设置关联后,会显示该元素关联过的图。可以选择图对应的操作。 依次为:打开关联图,定位关联图,删除关联图; 有关联图的图元右下角会有一个角标,通过双击该图标可以打开关联图; 此处设置时,一个元素可以关联多张图。 父主题: 模型设计
  • 如何创建连线关系 以较常见的用例图说明,其它图的连线和生成图元的操作类同。 快速创建图元:从工具箱中拖动图元移动到图中。 快速连线两种方式: 方式一:直接从图元往图元上连。连线操作技巧:鼠标移到图元上或者选中图元,四边出现小三角图标,单击小三角往另一个图元上拉线,停靠目标图元边上出现绿色小圆圈或者目标图元变色,可松开鼠标,弹出线类型选择框。 方式二:先在工具箱中单击选中使用的线类型(单击选中就行,不要画布上拖),再到画布上单击一个图元后鼠标不松开往另一个目标图元拉出连线,停靠至目标图元内部或者边线上松开(连线上锚点位置变绿圈或者非锚点位置变时连线变色), 建立连接后松开鼠标,连线完后,工具箱中线选中状态消失。 父主题: 模型设计
  • 如何配置关联模型工程 想要引用“关联模型工程”中定义过的模块,首先需要申请与目标工程进行关联,发起申请后,由对应空间的管理员权限的人员在“关联我的”中操作栏通过审核。 空间关联模型工程配置解决用户要跨空间引用模块的问题,需要配置的用户拥有管理员权限,关联有权限的模型空间时可以直接关联上,跨项目关联自己没有权限的模型工程时,需由目标模型空间的管理员审核。 关联模型工程,单击“新增”。 在弹出的窗口“申请关联模型工程”中,搜索出要关联的目标模型工程,支持关联模型工程的分支。 可在项目树上切换到关联空间,如下图所示。 打开关联工程的工程树后,即可把关联工程的中的工程树上的元素拖到当前模型工程中的模型图上。 “关联我的”下面列出的是其它模型工程与当前工程关联的,可以主动解除其它工程与本工程的关联,需要操作人有管理员权限。 父主题: 工程管理
  • 包图 包图元素介绍如下表所示: 表1 包图元素介绍 元素名 图标 含义 Subsystem 作为且有规范、实现和身份的单元的包。 Package 包。 Access 访问依赖关系用一个从客户包指向提供者包的虚箭头表示。 Merge 合并连接器,定义了源包元素与目标包同名元素之间的泛化关系。源包元素的定义被扩展来包含目标包元素定义。当源包元素与目标包内没有同名元素时,目标包元素的定义不受影响。 Import 用虚线箭头从得到访问权限的包指向提供者所在的包。 Dependency 依赖,是一种使用的关系,即一个类的实现需要另一个类的协助。 依赖关系用两个模型元素之间的虚线箭头表示。箭尾处的模型元素(客户)依赖于箭头处的模型元素(服务者)。 包图示例,如下图所示: 父主题: UML建模
  • 组件图 组件图显示了复杂软件系统中的各个组件如何相互关联以及如何使用接口进行通信。它们不用于更简单或更直接的系统,元素介绍如下表所示: 表1 组件图元素介绍 元素名 图标 含义 Class 是对象的集合,展示了对象的结构以及与系统的交互行为。 Interface 接口,可以是单个接口,也可以是抽象的一组接口的组合。 圆形接口与矩形接口意义相同,仅形状不同。 Component 组件,可独立加载、部署和运行的二进制代码,采用轻量级通讯机制、松耦合高内聚的软件架构构建单元,部署时不能跨节点类型部署(计算机百科全书:组件是软件系统中具有相对独立功能、接口由契约指定、和语境有明显依赖关系、可独立部署、可组装的软件实体) Interface Required Interface和Provided Interface之间可以建立Dependency,表明一个组件需要的接口是由另外一个组件提供的。 port 端口 PackagingComponent 包装组件。 Artifact 制品。 Document Artifact 文档制品。 Object 对象。 Package 包。 Aggregation 聚合,是整体与部分的关系,且部分可以离开整体而单独存在。 Composition 组合,是整体与部分的关系,但部分不能离开整体而单独存在。 Realization 实现,是一种类与接口的关系,表示类是接口所有特征和行为的实现。 Dependency 依赖,是一种使用的关系,即一个类的实现需要另一个类的协助。 Usage 使用,是一种使用的关系。表明一个模块在运行的时候,需要使用另外一个模块。 Constraint 是一个语义条件或者限制的表达式。UML 预定义了某些约束,其他可以由建模者自行定义。 Anchor 锚点。 Containment 内嵌,表示嵌在内部的类。 Generalization 泛化,表示类与类、接口与接口之间的继承关系,由子一方指向父对象一方。 Association 关联,是一种拥有的关系,它使一个类知道另一个类的属性和方法。 组件图示例如下所示: 在画暴露接口与请求接口时,可以通过Association关联连线将两种接口合并。 在左侧工具画板中中选择“Provided Interface”,将其拖拽至需要连接的图形上。 拖拽完成松开左键,在弹出的连线选择列表中选择“Association”关联连线。 松开鼠标后即可形成接口合并。 父主题: UML建模
  • 活动图 活动图对用户和系统遵循流程的行为进行建模,它们是流程图或工作流的一种,但是它们使用的形状略有不同,元素介绍如下表所示: 表1 活动图元素介绍 元素名 图标 含义 Action 动作是可执行的原子计算,它导致模型状态的改变和返回值。 Activity 活动是状态机内正在进行的非原子执行。 StructuredActivity 结构化活动是一个活动节点,可以将下级节点作为独立的活动组。 CentralBufferNode 中央缓冲区节点是一个对象节点,用于管理活动图中表示的来自多个源和目标的流。 Datastore 数据存储区定义了永久存储的数据。 ExceptionHandlerNode 异常处理程序元素定义发生异常时要执行的一组操作。 Object 封装了状态和行为的具有良好定义界面和身份的离散实体,即对象实例。 Decision 是状态机中的一个元素,在它当中一个独立的触发可能导致多个可能结果,每个结果有它自己的监护条件。 Merge 状态机中的一个位置,两个或多个可选的控制路径在此汇合或"无分支"。 Send 即发送者对象生成一个信号实例并把它传送到接收者对象以传送信息。 Receive 接收就是处理从发送者传送过来的消息实例。 Partition 分区元素用于逻辑组织活动的元素。 Partition 分区元素用于逻辑组织活动的元素。 Initial 用来指明其默认起始位置的伪状态。 Final 组成状态中的一个特殊状态,当它处于活动时,说明组成状态已经执行完成。 Flow Final Flow Final元素描述了系统的退出,与Activity Final相反,后者代表Activity的完成。 Synch 一个特殊的状态,它可以实现在一个状态机里的两个并发区域之间的控制同步。 Fork Join (Fork)复杂转换中,一个源状态可以转入多个目标状态,使活动状态的数目增加。 (Join)状态机活动图或顺序图中的一个位置,在此处有两个或以上并列线程或状态归结为一个线程或状态。 Fork Join (Fork)复杂转换中,一个源状态可以转入多个目标状态,使活动状态的数目增加。 (Join)状态机活动图或顺序图中的一个位置,在此处有两个或以上并列线程或状态归结为一个线程或状态。 Region 并发区域。 Control Flow (控制流)在交互中,控制的后继轨迹之间的关系。 Object Flow (对象流)各种控制流表示了对象间的关系、对象和产生它(作输出)或使用它(作输入)的操作或转换间的关系。 Constraint 是一个语义条件或者限制的表达式。UML 预定义了某些约束,其他可以由建模者自行定义。 Exception Handler 异常处理。捕获异常根据异常类型查找到对应的异常处理方法,然后执行对应的方法。 Interrupt Flow 中断流是用于定义异常处理程序和可中断活动区域的连接器的两个UML概念的连接。中断流是活动边缘的一种。它通常用于活动图中,以对活动过渡进行建模。 Anchor 锚点。 Containment 内嵌,表示嵌在内部的类。 活动图示例如下所示: 父主题: UML建模
  • Diagram Gate使用 图表门是一种简单的图形方式,用于指示可以将消息传输到交互片段和从交互片段传出的点。可能需要一个片段来接收或传递消息。在内部,有序消息反映了这一要求,并在片段帧的边界上指示了门。任何与此内部消息“同步”的外部消息必须适当地对应。可以出现在交互图(顺序,时序,通信或交互概述),交互事件和组合片段(以指定表达式)上。 Diagram Gate并不是激活块(Activation),顺序图在绘制连线时会自动生成激活块,激活块的使用请参考自定义激活块。 使用示例 拖动工具栏中的Diagram Gate图标到顺序图中,然后根据需要输入名称即可。 父主题: 顺序图
  • 自定义激活块 激活块代表了一段生命周期,激活块内可包含子激活块。激活块的断开代表了其生命周期的终止。 同步消息线(Message)与异步消息线(Async Message)会在其指向的目标上创建一个激活块。如果指向生命线,则在生命线上创建,如果指向某个激活块,则在其内创建一个子激活块。 返回消息线(Reply Message)指向到激活块上,不会额外创建子激活块。如果返回消息指向的是生命线则会创建一个激活块。 工具提供了如下五种方式控制激活块,可以根据需要合并或者断开激活块。 激活块生成 消息线连线到生命线成功后会自动生成激活块。 开始新的消息组 在当前模型图中开始新一轮进程,在单张模型图中描述多个进程场景。 在准备开始新的消息线右键菜单“开始新的消息组”。 打扫卫生结束后开始布置作业新的消息组。 向下延长端激活块 强制指定某个元素在正常进程周期外保持激活状态,表示该元素所属进程与其余进程共存; 向上延展源端激活块 强制某个元素上的激活块向上延展。 结束源端激活块 源端元素在该条消息线之后,结束其上激活块的进程周期,通常用来表示一条异步消息过后该源端元素变为空闲状态。 结束目标端激活块 当前激活块是由其上某条消息线设置了“延长源端激活块”而延展下来的,可以通过该设置结束其延展能力。 父主题: 顺序图
  • 消息线连线规则 顺序图连线逻辑: 元素概念: 消息线(Message):同步消息线(Message),异步消息线(Async Message),返回消息线(Reply Message),自连消息线(Self Message),创建消息线(Create Message),终止消息线(Delete Message)。 激活块(Activation,术语同EA):代表了一段生命周期,激活块内可包含子激活块。激活块的断开代表了其生命周期的终止。 生命线(Lifeline):通用生命线(Lifeline),边界生命线(Boundary Lifeline),实体生命线(Entity Lifeline),控制生命线(Control Lifeline),参与者生命线(Actor Lifeline)。生命线的类型不会影响消息线的连线逻辑。 连线规则: 同步消息线(Message)与异步消息线(Async Message)会在其指向的目标上创建一个激活块(如果指向生命线,则在生命线上创建;如果指向某个激活块,则在其内创建一个子激活块)。 返回消息线(Reply Message)指向到激活块上,不会额外创建子激活块。如果返回消息指向的是生命线则会创建一个激活块。 连线算法: 目标端寻源:一条消息线M1尝试连接到生命线L2上。 从当前消息线M1出发,如果该消息线M1的源端S1在生命线L2上,则S1为M1的目标端(同时也是源端),在S1内创建子激活块并将M1指向它【图1】;否则继续如下流程; 查找源端S1的引入消息线(From Message),如果找不到,则终止寻源过程,目标端寻源失败,在L2上新创建一个激活块并将M1指向它【图2】;如果能找到,则命名为FM1,继续如下流程【图3】; 检测消息线FM1的源端FS1,查看其是否是生命线L2上的激活块,如果是则FS1为M1的目标端,在FS1内创建子激活块并将M1指向它【图4】;如果不是,则重复步骤b【图5】; 当查找到顺序图第一根消息线依旧未找到目标端,则此次寻源过程终止,目标端寻源失败,在L2上新创建一个激活块并将M1指向它【图5】;如果找到则在其内创建子激活块并将M1指向它【图6】。 图6中M1的逆向寻源不会经过2、3两根消息线,因为M1的源端S1的引入消息线是第一条线,直接能找到目标。 逆向寻源过程中,如果寻源过程中遇到异步消息线(Async Message)或者返回消息线(Reply Message),则终止寻源过程;此时如果M1不是返回消息线(Reply Message),则在L2上新创建一个激活块并将M1指向它。 寻源过程中断后或者未找到对应激活块,并且M1是返回消息线:1. 那么如果M1有源端引入线(源端引入连线类型不是返回消息线),则从M1的目标端所在生命线找到其内位置最低的激活点作为寻源目标(图7.1)。2. 如果M1没有源端连线,或者源端连线是返回消息线(Reply Message),则在L2上新创建一个激活块并将M1指向它(图7.2,图7.3)。 源端寻源:一条消息线M1从生命线L1上出发。算法规则与目标端寻源类似,差异在于源端不以当前M1为出发点,而是以M1的上一条消息线LM1为出发点,并且不受异步与返回消息线的限制。 找到当前消息线M1的上一条消息LM1(注意,是位置在其上的第一条消息线),从LM1出发,如果LM1的目标端LT1在生命线L1上,则LT1为M1的源端【图8】;如果不在,则继续如下流程; 用LM1逆向寻源(同目标端逆向算法),如果能找到在生命线L1上的激活块,则该激活块为M1的源端【图9】;如果找不到生命线L1上的激活块,在生命线L1上新创建一个激活块并将M1从它引出【图10】。 逆向寻源过程中,如果某个消息线是返回消息线(Reply Message),则其源端不参与寻源判断,直接略过它继续向前寻源。 父主题: 顺序图
  • 绘制消息线 根据建模规范限制,建模的连线不能独立存在于图中,两端必须是连接在元素上的,因此不允许消息线直接拖拽至画布上。且绘制顺序图时,必须保证图的类型为顺序图,否则可能导致无法绘制对应消息线。具体请参见如何查看和修改模型图类型。 消息线介绍 顺序图用消息线描绘元素之间的工作流或者活动。软件模型中,消息线可以用来代表源端或目标端元素的操作或者属性。您可以根据需求绘制消息线,绘制消息线后,也可以提升/降低消息线层级。 绘制消息线 您可以通过如下方式绘制生命线: 选择生命线,从生命线的一端小三角单击拉线至另一个生命线上,选择消息类型。消息类型介绍请参见消息线连线规则。 选择连线按F2或者右键单击消息线选择“编辑”,可以编辑消息线名称。 消息线移动 选中消息线,左键按住消息线可以垂直上下移动。 按住Ctrl后可以在垂直方向上进行移动,支持跨线移动,不支持水平移动。 消息线变更连接端 左键选中消息线目标端,向其余生命线拖去,可以将连接点变更到新生命线上。 父主题: 顺序图
  • 创建生命线 生命线介绍 通用生命线(Lifeline),边界生命线(Boundary Lifeline),实体生命线(Entity Lifeline),控制生命线(Control Lifeline),参与者生命线(Actor Lifeline)。生命线的类型不会影响消息线的连线逻辑。 创建生命线 在创建生命线前,需要先考虑哪种类型的生命线能更好地表示你所要表达的对象。您可以通过以下三种方式创建生命线。 工具画板中选择一个生命线拖拽至画布中。 从工程树中其它模型视图中的元素拖拽至画布中生成对应生命线,您可以使用Link方式引用。 生命线也支持由创建消息线(Create Message)触发创建,其位置通常低于别的生命线。 生命线移动、延长 若画布中存在两条及以上生命线,单个生命线不支持上下垂直移动,只支持左右水平移动。 全选生命线后,可以在垂直方向上移动,调整元素在画布中的位置。 调整任一生命线的高度,其余生命线会同步调整,保证所有生命线底部对齐。 如果生命线是通过Create Message创建的,则可以操作该Create Message对目标生命线进行上下移动,但时间上不能早于之前最早生命线。 生命线变更 右键单击生命线,选择“元素设置/替换”可以修改生命线类型及替换成模型工程中其它元素。 元素设置:修改元素的类型及构造型。 元素替换:替换成其它元素。 父主题: 顺序图
  • 用例图 用例图用于编写测试用例,将角色与用例联系起来。 表1 用例图元素介绍 元素名 图标 含义 Use Case 用例,代表的是一个完整的功能。 Test Case 测试用例,是原型的用例元素。通过将元素属性和功能应用于由另一个元素或更确切地说是元素集表示的功能的测试,您可以使用它来扩展“测试”窗口的功能。 Actor 角色,是与系统交互的人或事物。 Boundary 边界,可以放入元素,形成一个模块。 Collaboration 是对对象和链总体安排的一个描述,这些对象和链在上下文中通过互操作完成一个行为,例如一个用例或者操作。 Collaboration Use 使用协作用于在复合结构图中将协作定义的模式应用于特定情况。 Package 包。对元素进行分组,并为分组的元素提供名称空间。一个程序包可能包含其他程序包,从而提供程序包的分层组织。 Generalization 组合,是整体与部分的关系,但部分不能离开整体而单独存在。 Realization 实现,是一种类与接口的关系,表示类是接口所有特征和行为的实现。 Association 关联,是一种拥有的关系,它使一个类知道另一个类的属性和方法。 Dependency 依赖,是一种使用的关系,即一个类的实现需要另一个类的协助。 Constraint 是一个语义条件或者限制的表达式。UML 预定义了某些约束,其他可以由建模者自行定义。 Anchor 锚点。 Containment 内嵌,表示嵌在内部的类。 Include 基用例与包含用例之间的关系。说明如何将包含用例中定义的行为插入基用例定义的行为中。基用例可以看到包含用例,并依赖于包含用例的执行结果。但是二者不能访问对方的属性。 Extend 是指扩展用例与基用例之间的关系。特别是如何将扩展用例定义的行为插入基用例定义的行为序列。 Use 使用,是一种使用的关系。表明一个模块在运行的时候,需要使用另外一个模块。 用例图示例,如下图所示: 父主题: UML建模
  • 交互概述图 交互概述图元素介绍如下表所示: 表1 交互概述图元素介绍 元素名 图标 含义 Action 动作是可执行的原子计算,它导致模型状态的改变和返回值。 Activity 活动是状态机内正在进行的非原子执行。 StructuredActivity 结构化活动是一个活动节点,可以将下级节点作为独立的活动组。 CentralBufferNode 中央缓冲区节点是一个对象节点,用于管理活动图中表示的来自多个源和目标的流。 Datastore 数据存储区定义了永久存储的数据。 Object 封装了状态和行为的具有良好定义界面和身份的离散实体;即对象实例。 Decision 是状态机中的一个元素,在它当中一个独立的触发可能导致多个可能结果,每个结果有它自己的监护条件。 Merge 状态机中的一个位置,两个或多个可选的控制路径在此汇合或"无分支"。 Send 发送者对象生成一个信号实例并把它传送到接收者对象以传送信息。 Receive 接收就是处理从发送者传送过来的消息实例。 Partition 分区元素用于逻辑组织元素。 Partition 分区元素用于逻辑组织元素。 Initial 用来指明其默认起始位置的伪状态。 Final 组成状态中的一个特殊状态,当它处于活动时,说明组成状态已经执行完成。 Flow Final Flow Final元素描述了系统的退出,与Activity Final相反,后者代表Activity的完成。 Synch 一个特殊的状态,它可以实现在一个状态机里的两个并发区域之间的控制同步。 Fork Join (Fork)复杂转换中,一个源状态可以转入多个目标状态,使活动状态的数目增加。 (Join)状态机活动图或顺序图中的一个位置,在此处有两个或以上并列线程或状态归结为一个线程或状态。 Fork Join (Fork)复杂转换中,一个源状态可以转入多个目标状态,使活动状态的数目增加。 (Join)状态机活动图或顺序图中的一个位置,在此处有两个或以上并列线程或状态归结为一个线程或状态。 Region 并发区域。 Exception Handler 异常处理。捕获异常根据异常类型查找到对应的异常处理方法,然后执行对应的方法。 Control Flow (控制流)在交互中,控制的后继轨迹之间的关系。 Object Flow (对象流)各种控制流表示了对象间的关系、对象和产生它(作输出)或使用它(作输入)的操作或转换间的关系。 Interrupt Flow 中断流是用于定义异常处理程序和可中断活动区域的连接器的两个UML概念的连接。 交互概述图示例,如下图所示: 此图描绘了一个示例销售过程,在示例中显示了一个交互销售过程,各活动对象都可以有独立的子交互概述图。 父主题: UML建模
  • 组合结构图 组合结构图元素介绍如下表所示: 表1 组合结构图元素介绍 元素名 图标 含义 Class 是对象的集合,展示了对象的结构以及与系统的交互行为。 Interface 接口,可以是单个接口,也可以是抽象的一组接口的组合。 圆形接口与矩形接口意义相同,仅形状不同。 Property 特性就是表示传递有关模型元素信息的值的一般性术语。属性具有语义效果,在 UML中一部分属性已经事先定义好了,其他的特性是用户定义的。 Port 端口定义了分类器与其环境之间的交互。 Collaboration 协作定义了一组协作角色及其连接器。 CollaborationUse 使用协作用于在复合结构图中将协作定义的模式应用于特定情况。 Provided Interface Required Interface Required Interface和Provided Interface之间可以建立Dependency,表明一个组件需要的接口是由另外一个组件提供的。 Connector 连接器通常在“组合结构”图中说明零件之间的通信链接以实现结构的目的。 Delegate 委托连接器在组件图上定义了组件外部端口和接口的内部组件。 Role Binding 角色绑定是协作使用的内部角色和实现特定情况所需的各个部分之间的映射,通常在复合结构图中。 Ocurrence 在组合结构图中,发生关系表示协作表示分类器。 Represents 表示连接器指示在分类器(通常在“组合结构”图中)中使用了协作。 组合结构图示例,如下图所示: 此图显示了协作在组合结构图中显示执行安装的关系的图 父主题: UML建模
  • 通信图 通信图元素介绍如下表所示: 表1 通信图元素介绍 元素名 图标 含义 Actor 角色,是与系统交互的人或事物。 Object 封装了状态和行为的具有良好定义界面和身份的离散实体;即对象实例。 Boundary Object 边界对象。 Control Object 控制对象。 Entity Object 实体对象。 Package 包。对元素进行分组,并为分组的元素提供名称空间。一个程序包可能包含其他程序包,从而提供程序包的分层组织。 Nesting 嵌套,即一个类的嵌套到另一个类。 Realization 实现,是一种类与接口的关系,表示类是接口所有特征和行为的实现。 Association 关联,是一种拥有的关系,它使一个类知道另一个类的属性和方法。 通信图示例,如下图所示: 父主题: UML建模
  • 4+1视图规范一致性检查错误修复指导 XX模型不能存在游离的逻辑模型元素 以逻辑模型为例: 游离原因:元素没有在逻辑模型架构信息树中出现。 查看逻辑模型架构方案设置。 找到游离元素构造型相关的架构配置信息。 Subsystem需要与System有Composition/Aggregation关系或父子关系。 在模型图中构建架构关系。 XX模型的元素要与指定的XX模型层次结构保持一致 以逻辑模型为例: 查询逻辑模型架构信息树,右侧操作开关把展示不匹配架构方案的元素打开。 架构信息树构出后 根据错误元素名称查询定位到其所在架构树节点。 查询错误元素与其他元素关系。 对比架构方案设置。 Subsystem1报错是因为与System1(架构信息树上的父节点)存在错误架构关系,对比发现实际模型图中使用的是Dependency连线 而架构配置方案要求Composition/Aggregation。 在模型图中修改连线类型为Composition/Aggregation。 常见错误场景: 连线类型不符合架构配置方案。 规则 实际 子元素构造型不符合架构配置方案。 System下层子元素按架构配置方案只能是Subsystem、Domain、Service、MS 图中是Component。 父主题: 架构检查
共100000条