amazon-web-services - 将数据从 Aurora 流式传输到用于 Data Lake 的 S3
问题描述
我正在尝试使用 S3 创建一个数据湖,其中数据来自 Aurora,最终来自其他来源;但是,我在创建具有成本效益的解决方案时遇到了麻烦。
我一直在研究使用数据迁移服务 (DMS) 将数据从 Aurora流式传输到 S3。因为数据以csv格式
到达 S3 :
(1)初始加载:(column1,column2,column3,...)
(2)数据变化:(D/U/I,column1,column2,column3, ...) [D: delete, U: update: I: insert]
我一直在尝试转换数据,以使 S3 存储桶仅包含没有前缀 D/U/I 的数据。
为了执行这种转换,我想到了使用以下模型:
Aurora -> Dirty S3 Bucket -> Curated S3 Bucket -> Athena 从Curated S3 Bucket查询
Dirty S3 Bucket 包含(column1, column2, column3, ...)和(D/U/I, column1, column2, column3, ...)格式的数据。当新数据到达此存储桶时,会发送一条 SNS 消息,并且 lambda 函数应读取新到达的文件,转换数据,并将其放入Curated S3 Bucket中,其中Curated S3 Bucket仅包含格式为(第 1 列,第 2 列,第 3 列,...)。
假设来自 Aurora 的所有数据都有created_at和updated_at列,我想到了:
- 根据 /year/month/day/hour 对 S3 中的数据进行分区(使用created_at):
- 但是,如果数据是根据/年/月/日/小时划分的,那么我认为成本会太高。
- 这是基于以下假设:
- 每天 40000 个请求(插入/更新/删除)
- 0.05 GB 平均文件大小
- 每 GB 0.01 USD(针对 S3 返回的数据)
- 每 1,000 个请求(PUT、COPY 或 POST 请求)0.01 USD
- 每 1000 个请求 0.001 USD(GET、SELECT 和所有其他请求)
- 每天检索数据的成本 = 40000 rpd * 0.05 GB * 每 GB 0.01 USD = 20
- 每天请求数据的成本 = 0.001 USD * (40000 rpd/1000) = .04
- 总成本 = 每天 20.04
- 这是基于以下假设:
- 但是,如果数据是根据/年/月/日/小时划分的,那么我认为成本会太高。
需要注意的是,这个计算只针对一个表;将有 5 个以上的表具有相似的费率。
因此,每月的费用将大于3,000 美元。
是否有一种更具成本效益的方式将数据从 aurora 流式传输到 s3?
还是我必须求助于获取 Aurora DB 的每日快照以降低成本?
解决方案
是的,您可以创建一个连接到 Aurora 并将数据带到 s3 的 lambda。在参数存储(在系统管理器内)中,您可以保存为每个表带来的最后一条记录的日期时间,因此您的 lambda 仅查找更新并将最后一条记录的日期保存在参数存储中。
推荐阅读
- python - 如何使用 Ctypes 和 kernel32.dll 将 Python 脚本添加到注册表
- python-3.x - PYTHON3:打印一组随机整数有时会得到排序输出,有时会得到未排序输出!为什么?
- python - 使用列表项索引作为python中另一个列表的索引
- docker - Docker DNS 忽略主机上的 /etc/nsswitch.conf
- sql - Postgresql数据库中分母最小公倍数的计算
- oracle - SQL 错误:ORA-00904 "SYS"."DBMS_CRYPTO"."HASH": 在 Oracle12C 中更新表时出现无效标识符错误
- clojure - 在clojure中使用变量作为dict键
- curl - 如何在 jenkinsfile 中显示 curl http 返回状态
- r - modelvalid:用于 GmAMisc 中的二进制 Logistic 回归内部验证的 R 函数:“Gianmarco Alberti”
- javascript - 如何让 multerS3 将一组文件上传到我的存储桶?