At leasdt one tangible mediumm that includes computer code for growing a network and distributing data using the network including one or more productioin nodes that send data, and a plurality of consumer nodes, wherein each consumer node receives data from one or more production nodes or at least one other consumer node, wherein the computer code, when executed by one or more processors causes the one or more processors to perform the following steps:
- (a) providing first software that resides on each of the consumer nodes, wherein the first software on each given consumer node:
- (i) issues request for data only to a productioin node or another consumer node that is directly connected to the given consumer node without any intermediate node logically positioned therebetween;
- (ii) in response to a request for data issued by one other consumer node, the first software transmits data from the given consumer node to the one other consumer node only if the given consumer node can fulfill at least a portion of the request itself;
- and
- (iii) in response to the request for data issued in step (a)(ii), the first software on the given consumer node takes no action to retrieve data from a node other than the given consumer node if the given consumer node is unable to fulfill the request itself;
- (b) providing second software that resides on each of the one or more production nodes;
- wherein, for each given production node, the second software transmits data from the given production node to a requesting consumer node in response to a request for data issued by said requesting consumer node only if the given production node can itself fulfill at leas a portion of the request issued by the requesting consumer node;
- (c) adding anew node to the network when the new node requests data from at least one consumer node or at least one production node;
- (d) using the first software residing on a first consumer node to issue a first request for data to the at least one consumer node or at least one production node;
- (e) in response to receipt of the first request by the at least one consumer node or the at least one production node:
- (i) if the node receiving the first request is a consumer node, using the first software residing on the node receiving the first request to transmit at least a portion of the requested data to the first consumer node receiving the first request can fulfill at least a portion of the first request itself;
- and (ii) if the node receiving the first request is a production node, using the second software residing on the node receiving the first request to transmit at least a portion of the requested data to the first consumer node only if the node receiving the first request can fulfill at least a portion of the first request itself;
- (f) after step (e), and independent of said first request, using the first software residing on a second consumer node to issue a second request to the first consumer node for data;
- and
- (g) in response to receipt of the second request, using the first software residing on the first consumer node to transmit to the second consumer node at least a portion of data requested by the second request only if the first consumer node can fulfill at least a portion of the second request itself.