首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CreateTableRequest / KeySchemaElement / Attributes

CreateTableRequest / KeySchemaElement / Attributes
EN

Stack Overflow用户
提问于 2017-05-13 04:45:07
回答 1查看 128关注 0票数 0

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

代码语言:javascript
复制
 [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)表名和2)KeySchemaElement?难道这些不能通过读取类的属性来确定吗?

EN

回答 1

Stack Overflow用户

发布于 2017-05-13 05:24:40

DynamoDB基于partition key管理数据。分区键用于标识数据库中的项。项不能在没有分区键的情况下为created/updated/queried。只有在没有分区键的情况下才能执行扫描。

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

How partition key works

此外,在创建表时,DynamoDB使分区键和排序键(如果可用)属性是强制的。它不允许定义任何非键属性。事件如果您在创建表时尝试定义非键属性,DynamoDB将抛出异常,因为它是一个NoSQL数据库和架构较少的

有两种类型的属性:-

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

排序关键字-表可能包含也可能不包含此属性,具体取决于设计。如果定义了该属性,则所有项都应具有该属性的值

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43946215

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档