数据库概念
关系型数据库
- 关系数据库提供了一个通用接口,使用户可以使用使用 编写的命令或查询从数据库读取和写入数据。
- 关系数据库由一个或多个表格组成,表格由与电子表格相似的列和行组成。
- 关系数据库可以分为联机事务处理OLTP 和 联机分析处理OLAP,具体取决于表的组织方式以及应用程序如何使用关系数据库。
- 数据库包括: MySQL,Postgresql,Microsoft sql Server和Oracle
- 数据仓库为可以来自一个或多个源的数据的中央储存库。
- 此数据存储库通常是专用类型的关系数据库,可用于通过OLAP进行报告和分析,组织通常使用数据仓库来编译报告并使用高度复杂 的查询搜索数据库。
NoSQL数据库
- 相比关系型数据库,NoSQL更加简单易用,更加灵活,
- 传统数据库在单台服务器外扩展成本极高,而Nosql可以在商用硬件上实现水平伸缩性
- 使用众多模型(如键值对、文档和图表)中的一种来存储数据
- 数据结构
- 集合 Collection : 相当于表
- 文档 Document: 相当于行
- 键值 Key Value Pairs: 相当于列
- 动态的架构,行无需包含与每个列对应的数据
- 查询更关注文档集合
- 支持水平扩展属性
- Nosql的其他特性
- 主要的Nosql数据库包括
- Nosql 数据库常用端口
- MongoDB:27017
- Redis:6379
- Memcached:11211
- 采用Nosql主要考虑几个限制
- 常见场景:
数据库选择
Amazon RDS存储关系型数据
RDS综述
- 开发人员可以专注于查询结构和查询优化
- 减轻运维负担包括数据库迁移、备份和恢复、修补、软件升级、存储升级、频繁服务器升级、硬件故障处理
- RDS可以通过公用的客户端软件连接并执行sql操作,包括使用相同的工具来查询,分析,修改和管理数据库。例如,当前的提取,转换, 加载(ETL)工具和报告工具
RDS 数据库实例
- 数据库实例是云上专用网段中部署的隔离的数据库环境
- 每个实例运行了一个商业或者开源的数据库引擎,包括MysqL,Postgresql,MS sql,Oracle,MariaDB以及AWS aurora 六种。
- 可以通过API创建和管理RDS实例
- 可以利用AWS工具或者数据库引擎本身的工具将数据从本地迁移到AWS上
- 每个用户默认最多托管40个RDS数据库
- 每个实例上只能运行1个Oracle和30个MS sql数据库,其余没有限制
- RDS支持预留实例,且只支持区域预留,可用于多可用区部署和只读副本
- 使用Parameter Group 对数据库参数进行设置
存储选项
备份与恢复
多可用区的高可用
- 高可用是传统关系型数据库部署的难点
- 利用RDS可以轻松实现,实现最短几分钟的RPO和RTO要求
- 开启多可用区部署后,自动在不同可用区创建备用RDS实例,并利用数据库实例URL endpoint来实现DNS寻址
- RDS 数据会同步复制到从数据库,复制本身产生的数据传输不收费
- 支持故障自动切换和手动转移,转移时间为1-2分钟
- 跨可用区部署后由于数据同步复制,会有一定的性能影响,备份是也会有更长的延迟
- 从数据库不能用作只读副本提升IO
规模扩大或缩小
- RDS支持垂直扩展
- 数据库实例的资源大小可以随需求决定,支持1-32 vcpu,1-244GB Memory,用户可以更改实例大小,RDS会自动完成数据迁移
- RDS采用数据库参数和数据库选项对数据库实例进行配置,每次更改都需要重启实例
- sql Server不支持存储扩展
- 可以通过数据库分片技术实现有限度的水平扩展
- RDS 支持实时配置更多的存储而无需停机
- RDS IOPS(除sql Server)还可以扩展数据库实例的吞吐量,1000 到 30000 IOPS分别对应100GB 到 6TB的存储空间
- 可以在RDS前端的EC2选择放置Redis 缓存服务,EC2 首选自我管理型缓存解决方案
只读副本扩展
- RDS允许从主数据库创建一个或多个只读副本来分流读取事务
- 读取繁重的任务
- 当主数据库不可用时处理读取操作
- 离线数据分析场景
- MysqL、Postgresql、MariaDB和aurora支持只读副本
- 要使用只读副本,需要先开启自动备份功能
- 只读副本是异步的
- 可以为只读副本创建只读副本,每个数据库最多创建5个只读副本,aurora最多15个
- 可以在多可用区部署只读副本,每个只读副本都有自己的URL Endpoint
- 只读副本可以被提升为独立的数据库,但是不能用来做灾备
RDS安全性
- IAM权限管理
- 网络隔离
- RDS实例需要创建在VPC的私有子网中
- 可以使用IPSec ×××网关将RDS连接到现有的企业内部的IT基础架构中
- 在多可用区部署时,可以创建全局子网组,这样在创建RDS时只需要制定可用区即可从全局子网组中分配响应的子网和IP地址
- 所有从VPC外部的EC2或者Internet对RDS的访问,都必须经过×××或堡垒机实现,并且堡垒机需要充当SSH Bastion的角色
- 自动补丁
- RDS软件始终与最新的补丁保持同步
- 默认首周需要30分钟进行维护
- 建议每一周需要计划30分钟的维护时间以完成补丁操作
- 一般仅有规模计算相关的补丁需要脱机执行,通常每几个月发生一次
- RDS增强型监控
- RDS采用四层安全模型
- RDS安全组
- 数据库安全组
- VPC安全组 - 控制对VPC内数据实例的访问
- EC2安全组
- 控制对EC2实例的访问
- RDS 数据加密
AWS Redshift
概念
- 完全托管的PB级数据仓库服务
- 基于sql-based 设计的关系型数据库
- 基于行业标准的Postgresql,因此大多数现有的sql客户端应用程序只能进行极少的更改。
- 针对OLAP设计的高性能数据分析和报告
- Redshift使您可以使用标准sql命令快速查询结构化数据的功能,以支持在大型数据集上进 行交互式查询。
- 使用柱状存储,数据压缩和区域映射等技术减少查询所需的IO量。
- 通过ODBC或JDBC连接与各种数据加载,报告,数据挖掘和分 析工具集成。
- Redshift负责管理设置,操作和扩展数据仓库所需的工作,从设置基础架构容量到自动执 行备份和修补等持续管理任务。
- Redshift会自动监控您的节点和驱动器,以帮助从故障中恢复。
集群
- 集群由一个领导者节点和多个计算节点组成
- 支持从160GB - 1PB甚至更大的
- 最多支持128个计算节点
- Redshift集群不能使用竞价实例
- 仅能在一个可用区部署
- 客户端只与领导者节点交互,计算节点对外部是完全透明的
- Redshift目前支持6种节点类型,分为两大类
- 每个集群都包含一个或多个数据库,并且分布在各个计算节点中,每个节点的数据库数据都是同步的
- 计算节点的磁盘存储会分片,切片通常在2-16之间,所有节点都会参与并行查询。
- 通常计算节点越多,查询性能越强
- 可以随时调整节点大小和类型,调整后都会创建一个新的集群并将数据迁移过去,调整期间数据库只读。
表设计
- 每个Redshift表都可以指定表名称、列及其数据类型等。
- 数据类型:
- 常见数据类型包括: INTEGER,DECIMAL和 DOUBLE,文本数据类型(如CHAR和VARCHAR)以及日期数据类型(如DATE和TIMESTAMP)
- 压缩编码
- 首次将数据加载入新表时,自动对数据进行采样并且为每列选择最佳压缩方案
- 分发策略
- 排序Key
数据加载
- 使用标准的sql Intert/update进行表的创建和修改记录
- 在Redshift中使用copY命令是一个更高效的方式,如从S3或者DynamoDB中进行批量数据加载
- 大量数据加载完成后,建议使用VACUUM命令重新组织数据并用ANALYZE来统计更新表格统计信息
- UPLOUD命令可以从Redshift中导出数据
查询数据
备份快照
- 自动快照到期后会自动删除,设置时间为1-35天
- 支持跨区域快照,手工快照可跨区域甚至跨账户存储,需要手工明确删除
- Redshift快照和备份数据存储在S3中
- 免费的快照存储空间与当前节点容量相当,所以需要及时清除不需要的快照文件
安全
- 安全级别
- 数据加密存储
- Redshift Enhanced VPC Routing
- 数据加密传输
- 记录所有的sql操作信息用于监控和审计,包括连接尝试、查询和对数据库的更改等操作
- 在维护窗口中进行自动补丁更新
例外
- 不适用于大规模对少数对象的读写操作,这种场景需要考虑aurora 或者RDS
DynamoDB
主要特性
- 是Nosql的的托管版本
- 同时连接和访问多个Nosql存储(如RDS、S3、MongoDB、Hbase等),对组合数据集进行复杂分析
- 通过在多个分区上自动分配表的数据和流量提供一致的性能级别,其性能是以读写容量的吞吐量级衡量的
- 根据实际需求可以随时调整读取和写入容量,DynamoDB会自动添加或删除基础架构或调整内部分区,默认最大支持20000个读取和20000个写入容量
- DynamoDB 按照存储数据大小和读写能力进行收费
- 应用场景
数据模型
DynamoDB属性
- 一致性
- 批量操作
- 可以通过单个操作执行最多25个项目的创建或更新
- 项目搜索
- 缩放和分区
- AWS DynamoDB Stream
- 自动备份
- 需要通过AWS Data Pipeline的专用配置模板,将DynamoDB完整或增量备份到同一地区或不同地区进行备份
- DAX
- DynamoDB 自动扩展
安全
- DynamoDB 需要与IAM服务集成,用策略最大限度控制权限。
- 所有操作都必须通过身份验证,建议使用EC2实例配置文件或角色来管理密钥
- 在数据库级别可以创建权限,以细粒度的允许或拒绝对项目和属性的访问
- 对DynamoDB的服务请求都必须包含HMAC-SHA-256的签名
- 移动端的最佳做法是使用Web身份联合与AWS安全令牌服务提供临时密钥
- DynamoDB本身不提供服务器端加密存储数据,需要存储前使用客户端或KMS加密
DynamoDB最佳实践
- 保持较小的项目大小
- 将元数据存储在DynamoDB中,将大型BLOB存储在S3中
- 按日、周、月进行Hash计算使用表来存储实践序列数据用于强制分区
- 使用有条件更新或者开放式并发控制更新(OCC)
- OCC是假定多个事务可以频繁完成且相互不会干扰
- 获取资源时无需提前锁定,提交时需要确认没有冲突的修改,若有则回滚
- 仅适用于低争用环境,从而提高吞吐量,否则反而会大大降低性能
- 避免热键和热分区
- 更加适合于无状态的服务设计
- 支持JSON对象的存储
Amazon aurora
概述
- 是一种面向服务的架构交付的关系型数据库,是MysqL的托管版本,还兼容Postgresql
- 速度是MysqL的5倍,成本是其他商用数据库的1/10
- 容量支持10GB - 64TB;每10GB一增量,仅为使用的容量付费。
- 支持Schema Changes
- 利用S3实现可扩展和高可用性,默认支持6个副本,
- 复制到3个可用区,每个可用区2个副本
- 2个以下副本丢失,不影响写入
- 3个以下副本丢失,不影响读取
- 与MysqL 5.6简易兼容 - 现有程序可正常运行,可轻松迁移,可直接导入数据文件
其他特性
好处:
- 速度更快:Parallel Query 可将分析查询的运行速度提高多达 2 个数量级。
- 操作简易性和数据新鲜度:您可以直接对 aurora 集群中的当前事务数据发出查询。
- 同一数据库上的事务工作负载和分析工作负载:借助 Parallel Query 功能,aurora 可以在处理并行分析查询的同时保持较高的事务吞吐量。
数据库架构示例
欢迎大家扫码关注,获取更多信息
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。