【发布时间】:2016-09-21 02:07:15
【问题描述】:
我正在存储 TB 的点击流类型用户事件数据。它需要按日期进行索引或分区,以便可以合理快速地查询狭窄的日期范围。我希望能够对此运行聚合作业和查询。我希望在 Amazon EMR 或类似的东西中使用 Spark。
一个选项是按天+小时分区的 S3 平面文件,例如:
s3://my-bucket/20160503_00/data.txt
s3://my-bucket/20160503_01/data.txt
s3://my-bucket/20160503_02/data.txt
我更可能使用 Parquet 列式存储而不是原始文本,例如:
s3://my-bucket/20160503_00/data.parquet
s3://my-bucket/20160503_01/data.parquet
s3://my-bucket/20160503_02/data.parquet
另一种选择是完整的 Amazon DynamoDB?
各有什么优缺点?
【问题讨论】:
-
不确定 SO 是 pro/con 的最佳来源 - 但是:如果您使用 s3,请压缩存储内容以节省大量空间和 IO 周期(因为您有效地存储文本,所以它是会很好地压缩。)另外,保持您的记录与文件的比率较低(即,不是每个文件每秒 1 条记录,将它们聚合到每个文件一分钟的价值,或者任何适当的 - 如果可能的话)。当我很久以前做这样的事情时,我们会每秒同步到 s3,但每 5 分钟返回一次并将每秒数据聚合成更大的块..)
标签: amazon-s3 amazon-dynamodb parquet bigdata nosql