AICon 上海站|日程100%上线,解锁Al未来! 了解详情
写点什么

Cloud Directory 更新 – 对类型化链接的支持

  • 2019-11-14
  • 本文字数:2659 字

    阅读完需:约 9 分钟

Cloud Directory 更新 – 对类型化链接的支持

今年早些时候,我谈论了 Cloud Directory – 用于分层数据的云原生目录以及它如何存储大量强类型分层数据。由于 Cloud Directory 可扩展到数亿个对象,因此它非常适合许多云和移动应用程序。在我的原始博客文章中,我已经说明每个目录如何具有一个或多个架构,以及每个架构如何又具有一个或多个分面。每个分面为对象定义所需的和允许的属性集。


类型化链接简介


现在,我们通过增加对类型化链接的支持,来增强 Cloud Directory 模型的表现力。您可以使用这些链接在层次结构中创建对象-对象关系。可以为每个目录定义多种链接 (每种链接类型均是与目录关联的其中一个架构中的单独分面)。除了类型之外,每个链接还可具有一组属性。类型化链接可帮助确保不会无意中删除目前与其他对象有关系的对象,从而保持参考数据的完整性。假定您具有包含位置、工厂、楼层、房间、机器和传感器的目录。上述每个项均可表示为 Cloud Directory 中的一个维度,它在层次结构中具有丰富的元数据信息。您可以定义和使用类型化链接以通过各种方式将对象联系在一起,并创建导致维护要求、服务记录、担保和安全信息的类型化链接,以及链接上用于存储有关源对象和目标对象之间的关系的其他信息的属性。随后,您可以根据链接类型和链接中的属性值来运行查询。例如,您可以找到过去 45 天内未清除的所有传感器,或已超过保修期的所有电机。您可以查找指定楼层的所有传感器,也可以查找给定类型的传感器所在的所有楼层。


使用类型化链接


要使用类型化链接,您只需使用 CreateTypedLinkFacet 函数将一个或多个类型化链接分面添加到架构。然后,调用 AttachTypedLink,并传入源对象和目标对象、类型化链接分面和链接的属性。其他有用函数包括 `` GetTypedLinkFacetInformationListIncomingTypedLinksListOutgoingTypedLinks。要了解更多信息和查看完整函数列表,请查看 Cloud Directory API 参考。就像为对象执行的操作一样,您可以使用属性规则来约束属性值。您可以约束字符串和字节数组的长度、将字符串限定为一组指定的值并将数目限定为特定范围。我的同事分享了一些示例代码来说明如何使用类型化链接。以下是 ARN 和分面名称:


Java


String appliedSchemaArn   = "arn:aws:clouddirectory:eu-west-2:XXXXXXXXXXXX:directory/AbF4qXxa80WSsLRiYhDB-Jo/schema/demo_organization/1.0";String directoryArn       = "arn:aws:clouddirectory:eu-west-2:XXXXXXXXXXXX:directory/AbF4qXxa80WSsLRiYhDB-Jo";String typedLinkFacetName = "FloorSensorAssociation";
复制代码


第一个代码段按以下顺序创建名为 FloorSensorAssociation 的类型化链接分面,带有 sensor_typemaintenance_date 属性 (属性名和值是链接标识的一部分,因此顺序很重要):


Java


client.createTypedLinkFacet(new CreateTypedLinkFacetRequest()                                .withSchemaArn(appliedSchemaArn)                                .withFacet(                                      new TypedLinkFacet()                                          .withName(typedLinkFacetName)                                          .withAttributes(toTypedLinkAttributeDefinition("sensor_type"),                                                          toTypedLinkAttributeDefinition("maintenance_date"))                                          .withIdentityAttributeOrder("sensor_type", "maintenance_date")));
private TypedLinkAttributeDefinition toTypedLinkAttributeDefinition(String attributeName) { return new TypedLinkAttributeDefinition().withName(attributeName) .withRequiredBehavior(RequiredAttributeBehavior.REQUIRED_ALWAYS) .withType(FacetAttributeType.STRING);}
复制代码


下一个代码段创建两个对象 (sourceFloortargetSensor) 之间的链接,带有 sensor_type watermaintenance_date 2017-05-24


Java


AttachTypedLinkResult result =     client.attachTypedLink(new AttachTypedLinkRequest()                               .withDirectoryArn(directoryArn)                               .withTypedLinkFacet(                                   toTypedLinkFacet(appliedSchemaArn, typedLinkFacetName))                                   .withAttributes(                                        attributeNameAndStringValue("sensor_type", "water"),                                        attributeNameAndStringValue("maintenance_date", "2017-05-24"))                                   .withSourceObjectReference(sourceFloor)                                   .withTargetObjectReference(targetSensor));
private TypedLinkSchemaAndFacetName toTypedLinkFacet(String appliedSchemaArn, String typedLinkFacetName) { return new TypedLinkSchemaAndFacetName() .withTypedLinkName(typedLinkFacetName) .withSchemaArn(appliedSchemaArn);}
复制代码


最后一个代码段枚举了 sensor_type watermaintenance_date 的所有传入类型化链接,范围为 2017-05-202017-05-24


Java


client.listIncomingTypedLinks(    new ListIncomingTypedLinksRequest()        .withFilterTypedLink(toTypedLinkFacet(appliedSchemaArn, typedLinkFacetName))        .withDirectoryArn(directoryArn)        .withObjectReference(targetSensor)        .withMaxResults(10)        .withFilterAttributeRanges(attributeRange("sensor_type", exactRange("water")),                                   attributeRange("maintenance_date",                                                   range("2017-05-20", "2017-05-24"))));
private TypedLinkAttributeRange attributeRange(String attributeName, TypedAttributeValueRange range) { return new TypedLinkAttributeRange().withAttributeName(attributeName).withRange(range);}
private TypedAttributeValueRange exactRange(String value) { return range(value, value);}
复制代码


要了解更多信息,请参阅 Cloud Directory 管理指南中的对象和链接


现已推出


类型化链接现已提供,您可以立即开始使用!


本文转载自 AWS 技术博客。


原文链接:


https://amazonaws-china.com/cn/blogs/china/loud-directory-update-support-for-typed-links/


2019-11-14 08:00717

评论

发布
暂无评论
发现更多内容

阿里、力扣、政采云的15位专家分享前端面试与招聘视角

三钻

面试 大前端

如何学习一个框架?

云起

你生日那天的宇宙什么样子知道?我全部给你吧!

我是程序员小贱

让你起飞的20个Linux命令骚操作

我是程序员小贱

解析 hashMap 源码之基本操作 get

shengjk1

Java hashmap

Rust特征与泛型区别点

编号94530

rust 泛型 封装、继承、多态

Spring如何选择类构造器

申屠鹏会

翻译 Go 语言

1 学习性能优化的要点

我是程序员小贱

解析 HashMap 源码概括

shengjk1

Java hashmap

Docker搭建PHP+Nginx+MySQL+Redis

书旅

Docker 镜像 lnmp

真正的异步API网关Agate

dinstone

Async API Gateway

毕玄大佬的分享以及给我的感悟

白色蜗牛

Java 程序员 技术 职场 架构师

【DevOps】我们忽视了Daily Build(每日构建)吗?

Man

DevOps jenkins 每日构建

如何隐藏你的数据库密码

Rayjun

安全 服务器

Apache Mina和Netty的历史

dinstone

平均负载是什么?

我是程序员小贱

MEDO 项目开发中遇到的问题汇总

陈皮

1 时间复杂度总结

我是程序员小贱

高效程序员的45个习惯:敏捷开发修炼之道(1)

石云升

读书笔记 敏捷开发

华为的“少年天才”攀登者,出发向智能存储的“奥林帕斯山”

脑极体

docker入个门

书旅

Docker 容器 Dockerfile

Elasticsearch学习

张明森

troubleshoot之:使用JFR分析性能问题

程序那些事

Java 性能分析 jfr

航运区块链 抗疫危中有机

CECBC

区块链 航运

为什么考研,考研能给你带来什么?说说我的感受!

我是程序员小贱

翻译: Effective Go (7)

申屠鹏会

翻译 Go 语言

MySQL 基准测试

多选参数

MySQL

翻译: Effective Go (6)

申屠鹏会

翻译 Go 语言

学习技术先从学会使用搜索引擎开始

我是程序员小贱

敏捷到底是个什么鬼?

刘华Kenneth

程序员 敏捷 change

解析 HashMap 源码之基本操作 put

shengjk1

Java hashmap

Cloud Directory 更新 – 对类型化链接的支持_语言 & 开发_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章