1. Hierarchy: Ultrapeer and leaf. Leaf connect to 1 ultrapeer, and report its Hash resource summary. Ultrapeer connect many leaves and multiple other ultrapeers. Ultrapeer shield leaf from flooding.
2. Routing amoung ultrapeers: last hop routing. Routing table are only exchanged between direct connneted neighbours. So the last hop (when hop=TTL) query is sent to the related nodes. All other queries are flooded as before. This is effective: save traffic for globle routing exchange, and avoid most of the flooding traffic, because most hops are in the last hop!
3. Dynamic routing. Increase connections (high degree), decrease TTL. Sending probing queries to some connections and waiting for reply. According to the # of reply decide how many rest connections to send, and adjust the TTL.
4.Hybrid P2P search infrastructure: Gnutella good for locating highly replicated items, poor for locating rare iteem. DHT can efficiently locate rare items, but incure higher overheads for popular files. So create a hybrid system, use flooding for popular files, and use DHT for rare ones. E.g.: Use DTH to connect ultrapeers, and ultrapeers can use flooding or DHT to search.