CreateTableRequest / KeySchemaElement / Attributes

时间:2017-05-12 20:45:07

标签: amazon-dynamodb

如果我定义了具有这些属性的类

 [DynamoDBTable("UserPictures")]
  public class UserInfo
  {

    public UserInfo()
    {
      if (PictureAlbum == null)
        PictureAlbum = new Dictionary<string, PictureInfo>();
    }

    [DynamoDBHashKey]
    public string PhoneNumber { get; set; }
    [DynamoDBRangeKey]
    public string UserName { get; set; }

    public Dictionary<string, PictureInfo> PictureAlbum { get; set; }

  }

为什么CreateTableRequest需要1)tablename,以及2)KeySchemaElement?那些不能通过阅读课堂上的属性来确定吗?

1 个答案:

答案 0 :(得分:0)

DynamoDB根据partition key管理数据。分区键用于标识数据库中的项目。如果没有分区键,则无法创建/更新/查询项目。只能在没有分区密钥的情况下执行扫描。

分区(排序键,如果可用)和其他非键属性之间的主要区别是分区键是必需的。所有其他属性不是必需的。

How partition key works

此外,在创建表时,DynamoDB使分区键和排序键(如果可用)具有必需属性。它不允许定义任何非键属性。事件如果您在创建表时尝试定义非键属性,DynamoDB将抛出异常,因为它是 NoSQL数据库而Schema less

有两种类型的属性: -

1)关键属性: - 分区键 - 在创建表时必须定义。所有项目必须具有此属性的值

排序键 - 根据设计,表可能包含也可能不包含此属性。如果已定义,则所有项目都应具有此属性的值

2)非键属性 - 可选属性。项目可能包含也可能不包含非键属性

创建表时,必须知道关键属性。这样它就可以管理数据并根据分区键将数据分发到不同的分区。整个数据库基于分区键进行管理。这就是为什么它必须是独一无二的,并且价值应该分散以获得良好的性能。换句话说,密钥的设计应使数据分散在多个分区中。