Redshift 不是关系型数据库, 提供了Amazon Redshift Serverless 和 Amazon Redshift 都是构建于 Redshift 数仓引擎之上的,但它们适用的场景不同。Redshift和Dynamodb都可以存储数据, 分别怎么选择? 这里记录一些常见的问题和场景。
Amazon Redshift Serverless:无需管理集群,按需计费,弹性自动扩展。适合不确定负载或数据团队初期, 按照查询时使用的 RPU(Redshift Processing Unit)计费,适合不可预测的工作负载。
Amazon Redshift(传统集群):适合稳定、长期的大数据仓库,拥有持续负载、对成本控制更精细的团队, 按节点计费,可使用预留实例降低成本,适合固定工作负载, 按节点计费,可使用预留实例降低成本,适合固定工作负载。
维度 | Redshift Serverless | Redshift(集群) |
---|---|---|
部署管理 | 无需管理节点,AWS 自动处理资源 | 需要用户自己部署节点和集群 |
计费模式 | 按查询消耗的“RPU”资源计费(弹性) | 按节点数+小时计费(固定) |
适合场景 | 负载波动大,查询不频繁;无需 DBA | 工作负载稳定,查询频繁,性价比高 |
启动速度 | 快速(即开即用) | 有启动延迟,需要冷启动时间 |
弹性扩展 | 自动,无需配置 | 手动扩容或设置自动扩缩容 |
成本控制 | 适合短时轻量查询,不用时不收费 | 对长期高密度负载更划算 |
本身没有唯一主键约束(性能决定), 推荐: 编辑MERGE - Amazon Redshift
(1)写入时判断然后merge
(2)缓存到中间表, 再merge到目标表(因为received有一个有个SQL的语句叫merge,如果它发现有重复记录,它就会做update,如果它发现是新的记录没有重复的,它就直接append也就是insert),和关系型数据库不一样, 因为关系数据库,它本质上背后它是有个主键索引,而redshift没有索引,它偏向于分析型场景.
没有索引,更合适是sortkey这个功能, 推荐: VACUUM - Amazon Redshift
查看搜索键排序: select * from svv_table_info order by size desc;
数据量小,性能要求高可以走集群 → 费用会增长
没有行锁,只有表锁, 还是推荐缓存表再merge更快
视图和物化视图(预计算,可配置自动,手动,增量/全量等)都可以 编辑自动实体化视图 - Amazon Redshift
Serverless 默认128个分片,每个分片有个最小容量,无法调整分片数量, 所以会自动伸展到合适的空间. 集群方式, 是可以根据业务量自定义分片数量的.
(1) redshift - 数据分析
(2) dynamodb - 业务存储(点查性能更好),更擅长更偏一个业务系统,本身是个KV,所以他更擅长做一些按照key来查询他的这个value的场景
(1) 数据量增大,实时要求高(1-5分钟) - 流式传输
(2) 多集群架构,多计算,单存储 ,一个写入,一个读取 - 编辑Amazon Redshift 中的数据共享 - Amazon Redshift
- AWS 账户和 AWS 区域之间共享数据。
监控RPU等等
可以设一个limit限制,可以设置最大容量,比如说64或者是32,那么它到了那个限制,它就不会往上扩了, 要是不设置, 那你的配置就是下限, limit可以根据数据量大小无上限扩展.
可以配置数据共享,某张表可以到表级别分享给你其他region的某一个redshift work group,他就可以直接看到直接看到, 且看到就是实时的表,跟你访问的数据是一模一样的,这个是可以配置的,甚至跨账号也是可以的.
参考链接:
MERGE - Amazon Redshift
VACUUM - Amazon Redshift
Amazon Redshift 中的实体化视图 - Amazon Redshift
自动查询重写以使用实体化视图 - Amazon Redshift
Amazon Redshift 中的数据共享 - Amazon Redshift