A method for distributing data of a plurality of files over a plurality of respective remote storage nodes, the method comprising: splitting into segments, by one or more processors configured to execute code stored in non-transitory processor readable media, the data of the plurality of files; encoding, by the one or more processors, each segment into a number of codeword chunks, wherein none of the codeword chunks contains any of the segments; packaging each codeword chunk with at least one encoding parameter and identifier into at least one package; generating, by the one or more processors, metadata for at least one file of the plurality of files and metadata for related segments of the at least one file, wherein the metadata for the at least one file contains information to reconstruct the at least one file from the segments, and metadata for the related segments contains information for reconstructing the related segments from corresponding packages; encoding, by the one or more processors, the metadata into at least one package, wherein the encoding corresponds to a respective security level and a protection against storage node failure; computing availability coefficients for the remote storage nodes using statistical data, wherein each availability coefficient characterizes predicted average download speed for a respective remote storage node; assigning, by the one or more processors, a plurality of packages to remote storage nodes, wherein the step of assigning uses the availability coefficients to minimize data retrieval latency and optimize workload distribution; transmitting, by the one or more processors, each of the packages to at least one respective remote storage node; and retrieving, by the one or more processors, at least one of the plurality of files, as a function iteratively accessing and retrieving the packages of metadata and file data. splitting into segments, by one or more processors configured to execute code stored in non-transitory processor readable media, the data of the plurality of files; encoding, by the one or more processors, each segment into a number of codeword chunks, wherein none of the codeword chunks contains any of the segments; packaging each codeword chunk with at least one encoding parameter and identifier into at least one package; generating, by the one or more processors, metadata for at least one file of the plurality of files and metadata for related segments of the at least one file, wherein the metadata for the at least one file contains information to reconstruct the at least one file from the segments, and metadata for the related segments contains information for reconstructing the related segments from corresponding packages; encoding, by the one or more processors, the metadata into at least one package, wherein the encoding corresponds to a respective security level and a protection against storage node failure; computing availability coefficients for the remote storage nodes using statistical data, wherein each availability coefficient characterizes predicted average download speed for a respective remote storage node; assigning, by the one or more processors, a plurality of packages to remote storage nodes, wherein the step of assigning uses the availability coefficients to minimize data retrieval latency and optimize workload distribution; transmitting, by the one or more processors, each of the packages to at least one respective remote storage node; and retrieving, by the one or more processors, at least one of the plurality of files, as a function iteratively accessing and retrieving the packages of metadata and file data.