如果我定义了具有这些属性的类
[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?那些不能通过阅读课堂上的属性来确定吗?
答案 0 :(得分:0)
DynamoDB根据partition key
管理数据。分区键用于标识数据库中的项目。如果没有分区键,则无法创建/更新/查询项目。只能在没有分区密钥的情况下执行扫描。
分区(排序键,如果可用)和其他非键属性之间的主要区别是分区键是必需的。所有其他属性不是必需的。
此外,在创建表时,DynamoDB使分区键和排序键(如果可用)具有必需属性。它不允许定义任何非键属性。事件如果您在创建表时尝试定义非键属性,DynamoDB将抛出异常,因为它是 NoSQL数据库而Schema less 。
有两种类型的属性: -
1)关键属性: - 分区键 - 在创建表时必须定义。所有项目必须具有此属性的值
排序键 - 根据设计,表可能包含也可能不包含此属性。如果已定义,则所有项目都应具有此属性的值
2)非键属性 - 可选属性。项目可能包含也可能不包含非键属性
创建表时,必须知道关键属性。这样它就可以管理数据并根据分区键将数据分发到不同的分区。整个数据库基于分区键进行管理。这就是为什么它必须是独一无二的,并且价值应该分散以获得良好的性能。换句话说,密钥的设计应使数据分散在多个分区中。