Re: Using the DHT to find download sources

"pwang708" <[email protected]>
Newsgroups gmane.network.gnutella.devel
Message-ID <[email protected]>
--- In [email protected], Arne Babenhauserheide <arne_bab@...>
wrote:
>
> Am Donnerstag 24 Juli 2008 20:40:49 schrieb pwang708:
> > In Query Routing Protocol nodes push their keyword list one or two
> > hops away from themselves, so that "a query reaches only hosts which
> > might have results for it". Theoretically, nodes can also push their
> > hash lists out like they push out their keyword lists. So I guess by
> > "breaks" you meant a incrementally deployment problem. Or
something else?
> 
> I mean that the way how Query routing tables are constructed works
very well 
> with keywords, which are duplicated in many messages and tend to
cluster on 
> similar files = for a user, but doesn't work very well on sha1
hashes, which 
> are random by design. 
> 
> A user will have a relatively low number of keywords (if he shares
mostly a 
> certain type of files, for example all bloodspell movies), but he
will have 
> all kinds of hashes, so keywords cluster on users, but hashes are just 
> randomly created. 
> If you take the above example, you could easily compile a list of
keywords. 
> 
> And the Query routing table uses as principle that people only get
messages 
> which might score a hit. 
> 
...
> 
> And for keyword searches, you can now check the queries keywords
against all 
> keywords of all files of the user. 
> If all Keywords of the Query are somewhere in the share of the user,
his 
> ultrapeer sends him the query. 
> 
> For sha1 searches, you'd have to increase the size of the Query routing 
> tables, since they aren't clustered as strongly as keywords (almost
every 
> file would have its own sha1_part entry). 
> 
> Putting them into Query routing tables would still work, but less
efficiently 
> than keywords. 
> 
> LimeWire decided not to put sha1 hashes (or parts of them) into the
query 
> routing tables, so routing by sha1 hash doesn't work in Gnutella. 
> 
> -> Does a client put sha1 hashes into QRTs, and how well does it work? 
> 

So the query routing table protocol will be inefficient because we
cannot cluster hashes, i.e., pushing hashes out for two hops is
expensive. To make things clear, I did some calculation. If we apply
query routing table protocol to hashes, then an UP needs to spend in
the order of 1~10 KB per second. (A hash is 20 bytes long. Assuming
every client shares 1000 files, a leaf connect to 5 UPs, each UP has
30 leaves, 0.5M UPs in the network, and 20M session are launched per
day.) We can do some optimization and bring the cost down below 1 KB
per second, or even less. Now the question is "does it worth it?" 

I was also told that hash search is "exact file match". So the chance
of a hit is lower than keyword search. Hence searches need to travel
much more hops. Note that the hops are broadcast hops, as a result the
cost grow exponentially. Hence hash searches are expensive. Query
routing table protocol reduces the number of hops by 2. But hash
searches may still be expensive and Query routing table protocol has a
non-trivial cost itself. 

In summary, hash searches in Gnutella is most likely expensive unless
we can make hits happen within couple of hops. This "unless..." part
is an interesting topic to think about. :-) Peer group may help...
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.