AWS Relational Database Service (AWS RDS)
- AWS 支持以下RDS
- MySQL 5.1, 5.5, 5.6, community Edition with InnoDB engine,Multi-AZ
- PostgreSQL 9.3, 9.4 9.5,Multi-AZ
- MariaDB 10.0.17, MySQL 那帮作者做的,Multi-AZ
- Avamar Aurora,Multi-AZ,兼容MySQL和PostgreSQL,性能是MySQL的5倍,是AWS推荐的数据库
- Oracle 11g, 12c,有三个版本,都支持Multi-AZ
- Standard One,Multi-AZ,Included License,KMS
- Standard,Multi-AZ,BYOL,KMS
- Enterprise,Multi-AZ,BYOL,KMS and TDE
- SQLServer 2008R2, 2012, 2014,有四个版本
- Express,不支持Multi-AZ,Included License,KMS
- Web,不支持Multi-AZ,Included License,KMS
- Standard,Multi-AZ,KMS
- Enterprise,Multi-AZ,KMS and TDE
- Storage Options
- Magnetic,性能最差,最便宜,用在需要很小IOPS的场景
- General Purpose SSD,通用型,大部分场景都可以使用
- Provisioned IOPS SSD,最高配置,价格最贵,用在需要高IOPS的场景
- RDS数据库的两种类型
- Online Transaction Processing (OLTP),事务型数据库,对事务要求高,数据一致性要求高
- Online Analytical Processing (OLAP),分析性数据库,对计算和处理数据要求高,对读性能要求高
- RPO/RTO
- RPO(Recovery Point Objective)出现事故时,最大允许丢失的数据量
- RTO(Recovery Time Objective)出现事故时,最大允许down机的时间
- Backup/Recovery
- 自动备份,Amazon RDS会自动为DB的Storage创建snapshot来备份数据,但默认情况每个backup只保留一天,可以设置最多保留35天
- 手动备份,手动备份的backup不会被自动删除
- Recovery,恢复DB时不会影响原DB,只会创建一个新的DB instance
- High Availability with Mulit-AZ
- 除了SQLServer的Express/Web不支持Multi-AZ,其它DB都支持Mulit-AZ
- Multi-AZ是指在不同的AZ上创建DB Instance,如果主Instance挂了,AWS会自动将连接转移到副Instance,而不需要用户任何操作
- Multi-AZ并不能提高DB的performance,只是为了增加HA
- 可以通过reboot主Instance来模拟主DB宕机
- Scaling up and Out
- Vertical Scalability,垂直扩展,增加CPU性能,增加内存,增加存储,修改存储类别等。注意,Storage的扩展不支持SQLServer。
- Horizontal Scalability With Partitioning,通过分区分表的方式水平扩展
- Horizontal Scalability With Read Replicas,通过创建只读副本来提高性能,这样做的目的是读写分离。支持的DB有:MySQL,PostgreSQL,Aurora,MariaDB
- Security,可以从多个层面来控制RDS的安全
- IAM,设置IAM权限,仅允许有权限的用户可以创建DB instance,修改DB属性等
- 将RDS部署在private网络中,并且创建DB subnet group,指定哪些子网可以访问DB所在的子网
- 创建RDS用户,只有合法的用户可以登录RDS
- 在传输过程中使用SSL加密,对at rest的数据使用KMS和TDE加密
AWS Redshift
- AWS Redshift是数据仓库,用于存放大量统计数据,内部实现是PostgreSQL,Redshift是典型的OLAP型数据库
- 集群和结点
- 支持6种结点类型,分为两类,面向计算和面向存储。面向计算的类型支持326TB的SSD数据,面向存储的结点支持2PB的Magnetic数据
- 可以通过增加节点来提高整体性能
- Data Types, 支持多种数据类型,char,int,decimal,double,varchar等
- 压缩编码,第一次加载数据到空表时,Redshift会为每列选择最好的压缩方式。
- 分布式策略
- EVEN distribution,默认方式,数据会以统一的方式分配到slices上,而不管数据是什么类型
- KEY distribution,通过某一列的值来分配row
- ALL distribution, 所有的数据都会分配到所有的结点
- Sort Keys
- 排序用key,在创建表的时候可以选择性的指定一列或多列为sort key,以加快数据的排序
- 增加数据
- Redshift支持标准的SQL,例如INSERT,UPDATE等
- COPY命令支持从S3以文件方式加载数据到Redshift,也支持从DynamodDB加载数据
- 查询数据
- 支持标准SQL查询,如INSERT等
- 支持并发查询,workload management (WLM)
- Snapshot
- 支持动态快照和手动快照,自动快照会定期删除,手动快照不会自动删除,需要手动删除
- Security
- IAM,设置IAM权限,仅允许有权限的用户可以创建DB instance,修改DB属性等
- 将Redshift部署在private网络中
- 创建Redshift master account,只有合法的用户可以登录Redshift
- 在传输过程中使用SSL加密,对at rest的数据使用KMS和CloudHSM
AWS DynamoDB
- No SQL 数据库,与Mango DB类似
- 支持数据类型,String,Number,Binary,Boolean,Null,String Set,Number Set,Binary Set,List,Map
- 主键
- Partition Key,partition key唯一标识Object,一个key就是一个partition
- Partion Key and Sort Key,partition key和sort key标识Object,先partition分组,再sort key排序
- Provisioned Capacity
- Read capacity and write capacity
- 预先设置capacity,当有读或写操作时就会消耗相应的capacity,capacity越大,费用越高
- 可以设置Auto Scaling,但Read or Write capacity达到一定程度,就可以自动增加capacity
- Secondary Index
- Global Secondary Index,全局index,会在所有的partition上查询数据。任何时候都可以创建任意多的global secondary index
- Local Secondary Index,本地index,只在当前partition上查询数据。在创建table的时候指定,且只能有一个loca secondary index
- Writing and Reading data
- PutItem,UpdateItem,DeleteItem,GetItem,Query or Scan action,etc
- 最终一致性
- Eventually Consistent Reads,可能读取到脏数据,但最终会读取到一致的数据
- Strongly Consistent Reads,不会读取到脏数据,但可能会影响性能
- Batch Operations
- BatchGetItem,BatchWriterItem等批量操作
- Searching Items
- Query,仅查询需要的数据
- Scan,会Scan所有数据
- 一般推荐用Query而不是Scan,Scan会扫描所有数据或所有secondary index
- Scaling and Partitioning
- 通过创建更多的partition来扩展DynamoDB数据库表
- Security
- 通过IAM控制IAM User访问DynamoDB
- Streams
- 支持通过修改DB的log来记录改动的数据,通过获取修改DB的log,可以用于审计数据的修改,统计数据访问等
- 相当于把数据库的修改记录stream到log里,其它应用就可以基于log做更多的事情
- Multi-AZ
- Dynamo DB默认按照Multi-AZ模式来部署以提高高可用