DynamoDb是托管式的,不需要自己安装,注册账号就能使用。把扩展性,吞吐量伸缩等,都交给亚马逊处理。
三个关键概念:
表:类似mysql中的表
item:类似mysql中的数据行
attribute:类似mysql中的字段
作为NoSql数据库,在创建表时,只需要指定主键。即主键名和主键的数据类型。其它属性都不需要指定。因为它是无结构的。不要求每个item,有一样的属性。
主键:每一个item,有且只有一个唯一的主键。有两种类型的主键:
单一的:partion key,这种情况下,partion key就是主键
由partion key 和 Sort Key 组成的复合主键。这种情况下,单独的 partion key 并不是主键,必须要和sort key一起共同构成主键。
partion key:正如其名,决定了这个item是保存在哪个分区的。有相同的partion key的item,就一定保存在同一个分区中。在老版本中,它又叫做 hash attribute
sort key:排序键,在partion key 相同的情况下,会按sort key 来排序
partion分区:
数据是保存在分区中的。分区,简单理解就是固态硬盘中的空间。
同一个表中的数据,可能是存在多个分区中。
多个分区也是分布式的,简单说,一张表中的数据,可能分散保存在多台服务器上(在同一个可用区中)。
在新建表时,系统会根据配置的吞吐量来分配初始的分区有多少。吞吐量设置得大,分配到的分区当然就多。
当修改吞吐量时(可能是自动或手动),就可能导致增加或减少分区。
在变动分区时,不影响读写,对开发者来说是透明的。
Secondary Indexes:第二索引
一个表可以有0个或多个二级索引
如果没有第二索引的话,就只能通过主键来查询指定的数据。
如果还要查询表中其它属性的值 ,就只有按这个属性,再创建一个第二索引。
个人理解是,创建一个二级索引。有点像把这个表又重新复制了一次,甚至能指定要复制哪些属性(投影)。
基表有变动时,二级索引的派生表,会自动更新。(类似mysql的自动维护索引)
Streams:就是事件以及对事件的处理。可以在特定事件发生时,编写自己的业务逻辑。比如新增用户成功后,自动发送邮件。
数据类型:
标量:数字,字符串,布尔,null,二进制
document类型:
包括list 和map ,可以互相嵌套,基本上和json一样。
list 类似json中的数组 ,map类似json中的对象。
set:集合类型。和数组类似,但特点是
元素的数据类型必须一致
不能重复
读取的一致性
最终一致性(默认):
缺点:读取的可能不是最新的数据
优点:速度快,支持全局二级索引,消费的吞吐量小(费用低)
强一致性:
非默认,除非在查询时指定。
优点和缺点,正好和最终一致性相反。
查询数据的区别
getItem:
通过主键,获取一条唯一的item
query:
提供 partion key 来获取多条item
个人理解,只有表是复合主键时,query才有意义。否则partion key 就是主键了,只能获得单条item
还可以提供sort key的值以及比较运算符 ,来缩小范围。比如sort key是数字类型的话,我可以只取大于100的item。
filter
全表扫描