A method comprising: receiving re-partitioning data describing, for each server node of a plurality of server nodes (110A-D) connected by a network, a quantity of data blocks to be sent to said each server node (110A-D); determining a sender order for the plurality of server nodes (110A-D) by using the re-partitioning data to sort, in descending order, the plurality of server nodes (110A-D) by a total quantity of data blocks to be sent; according to the sender order, populating a network schedule comprising a plurality of time slots, wherein populating a network schedule includes for each time slot of the plurality of time slots: assigning at most one receiver node of the plurality of server nodes (110A-D), to receive at most one data block over the network from a sender node of said plurality of server nodes (110A-D), wherein assigning at most one receiver node is based at least on the criterion that the assigned at most one receiver node has, according to the re-partitioning data, a largest possible quantity of data blocks to be received from the sender node among any server node (110A-D) of said plurality of server nodes (110A-D) not yet assigned as a receiver node in said each time slot; wherein each server node (110A-D) of said plurality of server nodes (110A-D) is assigned as a receiver node no more than once in said each time slot; wherein the method is performed by one or more computing devices. receiving re-partitioning data describing, for each server node of a plurality of server nodes (110A-D) connected by a network, a quantity of data blocks to be sent to said each server node (110A-D); determining a sender order for the plurality of server nodes (110A-D) by using the re-partitioning data to sort, in descending order, the plurality of server nodes (110A-D) by a total quantity of data blocks to be sent; according to the sender order, populating a network schedule comprising a plurality of time slots, wherein populating a network schedule includes for each time slot of the plurality of time slots: assigning at most one receiver node of the plurality of server nodes (110A-D), to receive at most one data block over the network from a sender node of said plurality of server nodes (110A-D), wherein assigning at most one receiver node is based at least on the criterion that the assigned at most one receiver node has, according to the re-partitioning data, a largest possible quantity of data blocks to be received from the sender node among any server node (110A-D) of said plurality of server nodes (110A-D) not yet assigned as a receiver node in said each time slot; wherein each server node (110A-D) of said plurality of server nodes (110A-D) is assigned as a receiver node no more than once in said each time slot; assigning at most one receiver node of the plurality of server nodes (110A-D), to receive at most one data block over the network from a sender node of said plurality of server nodes (110A-D), wherein assigning at most one receiver node is based at least on the criterion that the assigned at most one receiver node has, according to the re-partitioning data, a largest possible quantity of data blocks to be received from the sender node among any server node (110A-D) of said plurality of server nodes (110A-D) not yet assigned as a receiver node in said each time slot; wherein each server node (110A-D) of said plurality of server nodes (110A-D) is assigned as a receiver node no more than once in said each time slot; wherein the method is performed by one or more computing devices.