Amazon dynamodb CreateTableRequest/KeySchemaElement/Attributes

Amazon dynamodb CreateTableRequest/KeySchemaElement/Attributes,amazon-dynamodb,Amazon Dynamodb,如果我用这些属性定义了一个类 [DynamoDBTable("UserPictures")] public class UserInfo { public UserInfo() { if (PictureAlbum == null) PictureAlbum = new Dictionary<string, PictureInfo>(); } [DynamoDBHashKey] public strin

如果我用这些属性定义了一个类

 [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; }

  }
[DynamoDBTable(“用户图片”)]
公共类用户信息
{
公共用户信息()
{
如果(PictureAlbum==null)
PictureAlbum=新字典();
}
[DynamoDBHashKey]
公共字符串PhoneNumber{get;set;}
[动态键]
公共字符串用户名{get;set;}
公共字典PictureAlbum{get;set;}
}

为什么CreateTableRequest需要1)tablename和2)KeySchemaElement?难道不能通过读取类上的属性来确定这些属性吗?

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

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

另外,在创建表时,DynamoDB使分区键和排序键(如果可用)属性具有强制性。它不允许定义任何非关键属性。事件如果您在创建表时试图定义非键属性,DynamoDB将抛出异常,因为它是一个NoSQL数据库,并且没有模式

有两种类型的属性:-

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

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

2) 非关键属性-可选属性。项可以包含也可以不包含非键属性


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

通过读取类的属性,它无法确定键属性。它需要DynamoDBHashKey和DynamoDBRangeKey来识别相同的密码。这些是Dynamodb表的必填字段。这两个字段都用属性标记。。。。