amazon-web-services - 多设备和时间戳的最佳分区方法
问题描述
在我的组织中,我们有多个设备每秒发送数据。像这样在 AWS S3 中处理和分区数据/year=YYYY/month=MM/day=DD/file.csv
。
我们使用 AWS Athena 来运行这样的查询:SELECT col1, col2, coln FROM data WHERE year = 'YYYY' AND month = 'MM' and DAY = 'dd' AND device_id = 123
在一天中的某个时间从一台设备检索数据。有时我们还需要device_id IN (...)
在不同时间从多个设备 ( ) 获取数据。请注意,数据集中存在的列device_id
和仅用于生成分区。ts
ts
这是我的问题:
从长远来看,这种分区方法是否有效?目前,我们只有大约 150 台活动设备,但我们计划扩展到 1000 台甚至更多。考虑到查询模式相同的事实(在特定时间获取某些设备的数据),按 device_id 然后按 date ( /devive_id/year=YYYY/month=MM/day=DD/file.csv
) 分区是否更好?
解决方案
分区对于您提供的查询非常有用——它只需要在一个子目录中查找那一天的数据。
但是,如果您一直在查询特定设备(未指定月/日),那么它的效率将不高。
您将需要决定什么会更常见:
- 如果始终查询特定设备,则按设备分区,然后按日期
- 如果始终查询特定的日期/月份,那么您当前的方法很好(可能在 Day 之后使用额外的设备分区)
推荐阅读
- tomcat - 无法识别 tomcat-users.xml 凭据,tomcat 中用户的密码/令牌无效
- angular - 实现指数退避功能时如何处理错误?
- database - 如果需要独立查询数据,是否应该对 NoSQL (dynamodb) 表进行非规范化?
- mongodb - MongoDB 使用 Meteor 应用程序运行缓慢。查询慢,查询太多,同一用户有多个连接
- azure-active-directory - userPrincipalName 不能用于查询 Graph
- html - 将鼠标悬停在一个 div 上使另一个消失
- javascript - 当材质为 MeshPhongMaterial 时,无法在使用 Three.js 绘制的圆环中着色
- sql - 从 Oracle 循环输出变量结果
- visual-studio-mac - Xamarin.UITest 2.2.4 启动会话在第一次测试中失败
- jquery - 每个使用 jQuery 移动文本块