A block map for a contiguous large file could consist of only one extent which would fit in the inode itself. Extent based filesystems maintain mappings only for contiguous ranges of blocks (extents). There can be several layers of indirection, so a single read could result in several I/Os depending on whether or not the indirect address blocks are cached. Block based filesystems maintain mappings for each logical block, and for large files, this information will not typically fit into the cached inode and is stored in indirect address blocks instead, which must be traversed in order to read the data for a file.
For large files, the block map can be quite large depending on the type of the filesystem in use. Each file in the filesystem is represented by a structure called an inode which contains a block map that maps the logical file offset to the physical block offset on the physical volume.
Photo read requests result in read() system calls at known offsets in these files, but in order to execute the reads, the filesystem must first locate the data on the actual physical volume. Haystack object stores are implemented on top of files stored in a single filesystem created on top of the 10TB volume. The disk caches are disabled in order to guarantee data consistency in the event of a crash or a power loss. Since the reads are mostly random, the NVRAM cache is fully reserved for writes. The poor write performance is partially mitigated by the RAID controller NVRAM write-back cache. RAID-6 provides adequate redundancy and excellent read performance while keeping the storage cost down.