A public-works department collects water-meter inspection records that include both photos of meter dials and structured sensor readings (flow rate, pressure, timestamp). Before feature engineering begins, where should the photos and the structured readings be stored?
Select an answer to reveal the explanation.
Short Explanation
Think of it like sorting mail: photos are bulky attachments, and structured readings are the short notes clipped to them — each belongs in a mailbox built for its size and shape. S3 is built to hold large binary objects like images cheaply and durably, while a relational or columnar store handles structured, queryable readings efficiently. Tying them together with a shared inspection ID lets you join the two later without cramming everything into one system that isn't great at either job.
Full Explanation
S3 is designed for arbitrarily large binary objects like meter photos, served over HTTP with lifecycle policies and cheap storage tiers, while structured sensor readings benefit from a store that supports querying by column — a relational database or Parquet files queried through Athena or Glue. Keeping each in the storage layer built for it, and joining them by a shared inspection ID, gives the feature-engineering step a clean way to pull both modalities together per record. Cramming a base64-encoded image into a DynamoDB item works technically at small scale but blows past DynamoDB's per-item size limits and wastes its low-latency key-value design on bulk binary storage it wasn't built for. Storing photos as RDS binary large objects works too, but it burdens a relational engine — sized for transactional query workloads — with large binary payloads it handles far less efficiently than object storage. Treating EFS as the default for both data types ignores that a shared POSIX file system adds operational overhead (mounting, throughput provisioning) without offering the query capability structured readings need or the lifecycle economics S3 offers for images. Scope note: this pattern holds for read-heavy training pipelines; a real-time inspection app might cache differently. Operational check: verify the inspection ID join returns exactly one photo and one reading set per record before starting feature engineering.