Per Raph's comments (here)
on using spanning trees to make a
scalable Gnutella-like network:
====
Thus, in order to make a fully decentralized Napster-like
service work, you need to do intelligent distribution of
the searches. Specifically, while the search metadata needs
to be distributed across all servers in the system, only a
small number of servers should be needed for any one
search.
Here, I'll outline a very simple approach for single-
keyword searching. Assume that each server has a hash-
derived ID as in Mojo Nation. Hash the keyword. All servers
whose id's match the first k bits are authoritative for
that keyword. If you want to query based on that keyword,
you need only find a single such server and query it. If
you want to publish an item containing that keyword, you
need to notify all such authoritative servers.
===
Point #1 is on. The only way to reduce inefficiency is
to minimize pathlengths, which means that you have to avoid
random searches, which means that you have to find ways to
predict which resource providers might do the best job.
Point #2 is one idea among many. The goal is right - to
map resource requests to likely providers with the greatest
possible accuracy. But the approach is funny, because it
doesn't take into account all the possible reasons
why one node should be providing resources rather than
another. Maybe the serving node should be the one with the
most available connection slots, or it should be the one
with the highest quality data, or it should be the one that
is most interested in serving the data.
My point is that improving the mapping method is a good
idea, but there should be qualitative reasons for mapping
to one node rather than another.