aws DynamoDB的核心组件

在DynamoDB中,表、项和属性是你工作的核心组件。一个表是一个项目的集合,每个项目是一个属性的集合。DynamoDB使用主键来唯一地识别表中的每个项目,使用二级索引来提供更多的查询灵活性。你可以使用DynamoDB Streams来捕获DynamoDB表中的数据修改事件。

表、项目和属性

以下是DynamoDB的基本组件。

表 - 与其他数据库系统类似,DynamoDB在表中存储数据。一个表是一个数据的集合。例如,请看名为People的表,你可以用它来存储关于朋友、家人或其他感兴趣的人的个人联系信息。你也可以有一个Cars表来存储人们所驾驶车辆的信息。

项目 - 每个表都包含零个或多个项目。一个项目是一组属性,在所有其他项目中是唯一可识别的。在人表中,每个项目代表一个人。对于一个Cars表,每个项目代表一辆车。DynamoDB中的项目在很多方面与其他数据库系统中的行、记录或图元相似。在DynamoDB中,你可以在一个表中存储的项目的数量没有限制。

属性 - 每个项目都是由一个或多个属性组成。一个属性是一个基本的数据元素,是不需要进一步细分的东西。例如,人名表中的一个项目包含名为PersonID、LastName、FirstName的属性,等等。对于一个部门表,一个项目可能有诸如DepartmentID、Name、Manager等属性。DynamoDB中的属性在很多方面与其他数据库系统中的字段或列相似。

下图显示了一个名为People的表,有一些项目和属性的例子。
aws DynamoDB的核心组件_第1张图片

请注意关于人表的以下内容。

表中的每个项目都有一个唯一的标识符,即主键,它将该项目与表中的所有其他项目区分开来。在人际关系表中,主键由一个属性(PersonID)组成。

除了主键之外,人名表是无模式的,这意味着属性和它们的数据类型都不需要事先定义。每个项目都可以有自己的不同属性。

大多数属性是标量的,这意味着它们只能有一个值。字符串和数字是标量的常见例子。

有些项目有一个嵌套属性(地址)。DynamoDB支持嵌套属性,最深可达32层。

下面是另一个名为Music的表的例子,你可以用它来跟踪你的音乐收藏。

aws DynamoDB的核心组件_第2张图片

请注意以下关于音乐表的内容。

音乐表的主键由两个属性组成(艺术家和歌名)。表中的每个项目都必须有这两个属性。艺术家和歌名的组合将表中的每个项目与其他所有项目区分开来。

除了主键之外,音乐表是无模式的,这意味着属性和它们的数据类型都不需要事先定义。每个项目都可以有自己的不同属性。

其中一个项目有一个嵌套属性(PromotionInfo),它包含其他的嵌套属性。DynamoDB支持嵌套属性,最深可达32层。

主键

当你创建一个表时,除了表名之外,你必须指定表的主键。主键唯一地标识了表中的每个项目,因此没有两个项目可以有相同的键。
DynamoDB支持两种不同类型的主键:

分区键 - 一个简单的主键,由一个被称为分区键的属性组成。
DynamoDB使用分区键的值作为内部哈希函数的输入。哈希函数的输出决定了该项目将被存储在哪个分区(DynamoDB内部的物理存储)。
在一个只有一个分区键的表中,没有两个项目可以有相同的分区键值。
在表、项目和属性中描述的人表是一个具有简单主键(PersonID)的表的例子。你可以通过提供PersonId值来直接访问People表中的任何项目。

分区键和排序键–被称为复合主键,这种类型的键是由两个属性组成。第一个属性是分区键,第二个属性是排序键。
DynamoDB使用分区键值作为内部哈希函数的输入。哈希函数的输出决定了项目将被存储在哪个分区(DynamoDB内部的物理存储)。所有具有相同分区键值的项目被存储在一起,按照排序键值进行排序。
在一个有分区键和排序键的表中,多个项目有可能有相同的分区键值。然而,这些项目必须有不同的排序键值。
每个主键属性必须是一个标量(意味着它只能容纳一个单一的值)。主键属性唯一允许的数据类型是字符串、数字或二进制。对于其他非主键属性则没有这样的限制。

二级索引

你可以在一个表中创建一个或多个二级索引。一个二级索引可以让你在查询主键的同时,使用一个备用键来查询表中的数据。DynamoDB并不要求你使用索引,但它们在查询数据时给你的应用程序带来更多的灵活性。在你为一个表创建二级索引后,你可以从索引中读取数据,方式与从表中读取数据的方式基本相同。
DynamoDB支持两种类型的索引。

全局二级索引 - 一个具有分区键和排序键的索引,这些键可以与表上的键不同。
本地二级索引 - 一个索引,它的分区键与表相同,但排序键不同。
DynamoDB的每个表都有20个全局二级索引(默认配额)和5个本地二级索引的配额。
在前面显示的音乐表例子中,你可以按艺术家(分区键)或按艺术家和SongTitle(分区键和排序键)查询数据项。如果你还想通过流派和专辑标题来查询数据呢?要做到这一点,你可以在Genre和AlbumTitle上创建一个索引,然后以查询音乐表的同样方式查询该索引。

下图显示了音乐表的例子,有一个名为GenreAlbumTitle的新索引。在该索引中,Genre是分区键,AlbumTitle是排序键。
aws DynamoDB的核心组件_第3张图片

请注意以下关于GenreAlbumTitle索引的内容。
每个索引都属于一个表,这个表被称为该索引的基表。在前面的例子中,音乐是GenreAlbumTitle索引的基表。
DynamoDB自动维护索引。当你添加、更新或删除基表中的一个项目时,DynamoDB会添加、更新或删除属于该表的任何索引中的相应项目。
当你创建一个索引时,你指定哪些属性将从基表复制或投射到索引中。至少,DynamoDB会将基表中的关键属性投射到索引中。GenreAlbumTitle就是这种情况,只有音乐表中的关键属性被投射到索引中。
你可以查询GenreAlbumTitle索引来找到所有特定流派的专辑(例如,所有摇滚专辑)。您还可以查询该索引,以查找某一特定流派中具有某些专辑标题的所有专辑(例如,所有标题以字母H开头的乡村专辑)。

DynamoDB流

DynamoDB流是一个可选的功能,可以捕捉DynamoDB表中的数据修改事件。这些事件的数据以近乎实时的方式出现在流中,而且是按照事件发生的顺序。
每个事件都由一个流记录表示。如果你在表上启用了一个流,每当以下事件发生时,DynamoDB流就会写入一个流记录。
一个新的项目被添加到表中。流捕获了整个项目的图像,包括它的所有属性。
一个项目被更新。流捕捉到项目中任何属性被修改的 "之前 "和 "之后 "的图像。
一个项目被从表中删除。流捕捉到整个项目被删除前的图像。
每个流记录还包含表的名称、事件的时间戳和其他元数据。流记录的寿命为24小时;在那之后,它们会自动从流中删除。
你可以将DynamoDB流与AWS Lambda一起使用,创建一个触发器代码,每当一个感兴趣的事件出现在流中时,就自动运行。例如,考虑一个包含某公司客户信息的Customers表。假设你想给每个新客户发送一封 "欢迎 "邮件。你可以在该表上启用一个流,然后将该流与一个Lambda函数相关联。只要有新的流记录出现,Lambda函数就会运行,但只处理添加到客户表中的新项目。对于任何具有EmailAddress属性的项目,Lambda函数将调用亚马逊简单电子邮件服务(Amazon SES),向该地址发送电子邮件。
aws DynamoDB的核心组件_第4张图片

除了触发器,DynamoDB流还能实现强大的解决方案,如在AWS区域内和跨区域的数据复制、DynamoDB表中数据的物化视图、使用Kinesis物化视图的数据分析等等。

你可能感兴趣的:(aws,云计算,云原生,无服务器架构,redis)