如果我定义一个具有这些属性的类
[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?难道这些不能通过读取类的属性来确定吗?
发布于 2017-05-13 05:24:40
DynamoDB基于partition key管理数据。分区键用于标识数据库中的项。项不能在没有分区键的情况下为created/updated/queried。只有在没有分区键的情况下才能执行扫描。
分区(排序关键字,如果可用)与其他非关键字属性之间的主要区别在于,分区关键字是必需的。所有其他属性都不是必需的。
How partition key works
此外,在创建表时,DynamoDB使分区键和排序键(如果可用)属性是强制的。它不允许定义任何非键属性。事件如果您在创建表时尝试定义非键属性,DynamoDB将抛出异常,因为它是一个NoSQL数据库和架构较少的。
有两种类型的属性:-
1)关键属性:-分区键-创建表时必须定义。所有项都必须具有此属性的值
排序关键字-表可能包含也可能不包含此属性,具体取决于设计。如果定义了该属性,则所有项都应具有该属性的值
2)非关键属性-可选属性。项可以包含也可以不包含非键属性
当表被创建时,它必须知道关键属性。这样它就可以管理数据,并根据分区键将数据分发到不同的分区。整个数据库是基于分区键进行管理的。这就是为什么它必须是唯一的,值应该分散才能获得良好的性能。换句话说,键的设计应该使数据分散在多个分区中。
https://stackoverflow.com/questions/43946215
复制相似问题