1. A method for data storage, comprising: in a memory that includes at least N memory units, each memory unit comprising memory blocks, defining superblocks, each superblock comprising a respective set of N of the memory blocks that are allocated respectively in N different ones of the memory units, such that compaction of all the memory blocks in a given superblock is performed without any intervening programming operation in the given superblock; storing data in the memory by computing redundancy information for a selected portion of the data, and storing the selected portion and the redundancy information in the N memory blocks of a selected superblock; and reading data from a given superblock by issuing read commands to the set of N memory blocks within a given superblock without waiting for data to arrive from a given memory block before issuing a subsequent read command to a next memory block, wherein reading the data from a given superblock further comprises: receiving data from N−1 memory blocks; and using the redundancy information to reconstruct the data unless the redundancy information is in the Nth memory block to arrive.