绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
Amazon DynamoDB 介绍
2022-04-08 14:59:47

数据模型概念 - Tables, Items, and Attributes

DynamoDB数据库有表(tables),数据项(items)和属性(attributes)构成。一个数据库有若干张tables,一张表有若干items,每个数据项有若干attributes。

在关系型数据库中,一张tables有columns组成。每个records都有相同的属性。然而DynamoDB是NoSQL数据库。也就是除了主键外,每个item都是可以任意自定义的,没有columns的概念,也不受其束缚。的要求就是不要每个item不要超过64 KB大小。这就是所有item name和item value加起来的大小不要超过64 KB。

每个item的attribute都是key-value的结构。每个attribute的value部分既可以使单值(single-valued)也可以是个组合(multi-value)。如果是组合的话,这个集合(set)中值是不允许有重复的。

我们来看一个例子,我们的网上商店,为了保存商品,我们这样的tables结构:

Products( id, ...)

有个主键来标识这本书,然后用attributes来描述这本书的细节,比如:

{ 
   Id = 101                                       
   ProductName = "Book 101 Title"
   ISBN = "111-1111111111"
   Authors = [ "Author 1", "Author 2" ]
   Price = -2
   Dimensions = "8.5 x 11.0 x 0.5"
   PageCount = 500
   InPublication = 1
   ProductCategory = "Book" 
}                                    
{
   Id = 201 
   ProductName = "18-Bicycle 201"
   Description = "201 description"
   BicycleType = "Road"
   Brand = "Brand-Company A"
   Price = 100
   Gender = "M"
   Color = [ "Red", "Black" ]
   ProductCategory = "Bike"
}
{
   Id = 202 
   ProductName = "21-Bicycle 202"
   Description = "202 description"
   BicycleType = "Road"
   Brand = "Brand-Company A"
   Price = 200
   Gender = "M"
   Color = [ "Green", "Black" ]
   ProductCategory = "Bike"
}

注意商品Book的Aurthors和Bike的Color属性,它们就是multi-value。这是一种类似JSON的结构(JSON-like)。需要注意的是DynamoDB不允许atrributes的value为空(null)或空字符串(empty string)。

主键 – Primary Key

当你创建表格时,除了表名(table name)以外还需要一个主键。DynamoDB支持下面两种主键(primary keys):

*Hash类型的主键:

主键是某个attribute的hash值。DynamoDB会为这个主键atrributes创建一个unordered hash index。上例中Product有个id作为主键。他是这张表Hash属性(attributes)。

*Hash and Range类型的主键:

主键是两个attribute组合而成。个属性是hash attributes。第二个属性是range attribute。DynamoDB会在hash attribute上创建一个unordered hash index,在range attribute上创建一个sorted range index。例如,Amazon维护了一些论坛,每个论坛有许多讨论话题(threads),每个thread又有许多回复(replies)。你可能这样设计表格:

Thread和Reply表都有hash & range类型主键。对Thread表来说,每个forum都有若干个subjects。这样ForumName就可以做hash atrribute,subject就可以做range attribute。注意,你必须考虑到,DynamoDB并不支持表格间的join查询。例如你必须在Reply表的id中保存ForumName和subject。这样你就可以parse这个id来查找相应的Forum和Subject。

DynamoDB的数据类型

DynamoDB支持两种数据类型:

1,标量(scalar) —— 数字(Number)或字符串(String)
2,多值组合(multi-valued) —— 数字的组合(Number set)或字符串的组合(String set)

字符串 是以二进制UTF8来编码的。主键以外的字符串的大小没有什么限制。当然不能超过item大小(64 KB)。可以参见Limits in Amazon DynamoDB

当你使用ScanQuery接口来返回一个有序的结果时会用到字符串的比较。字符串的比较是基于ASCII值的比较。

数字 是正的或负的整数或小数。小数可以到小数点后38位。序列化后的数字是以String类型来传给DynamoDB的,然而DynamoDB当数字一样处理它们。

字符串集和数字集 需要注意的就是集合中不可以有重复的值,另外集合也是无序的

 

Reference

分享好友

分享这个小栈给你的朋友们,一起进步吧。

Amazon DynamoDB
创建时间:2022-04-08 14:56:47
Amazon DynamoDB
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

技术专家

查看更多
  • LCR_
    专家
戳我,来吐槽~