Hi, I am trying to develop/improve a DHT for my thesis and I seem to have come up with a problem I would love to discuss/hear your thoughts on:
I want different peers to store information using the same key. Let's say, peer1 performs a Store-Operation with arguments (key, <information1>), where <information1> is the data load. When a second peer peer2 performs another Store-Operation with argument (key, <information2>) I do not want <information2> to replace <information1>. Instead, I need *one* peer to take the "old" <information1>, add <information2>, perhaps just add <information2> as a second element of a list, or even perform some calculations on it first, and then distribute the complete result (e.g. a list <information1, information2>). More peers will add to this list and elements will have to be removed, too. Since a DHT is mainly just like a Java-Map, I need the map to store a list denoted by the key, thus like List<String> myList; Map<Integer, myList> distributedList; I am currently thinking of this as a special DHT-operation, e.g. STOREINFO or STOREDATA or the like that uses the original Store-information to publicize the aggregated data after adding it up. What I do not want, is to store just a link to a list which is then stored on *one* peer (=store just the peers address in the DHT) and then let this one peer handle everything, which would be like storing documents in a DHT, because I want to retain the data even if this *one* peer leaves the network (with performing Leave-Operation or without), I need this data to be distributed and replicated. Now, I am trying to think of ways and of DHTs to easily accomplish this. I was very impressed with Kademlia in general, there are some nice Java-implementations out there that would greatly help (e.g. Mojito, Plan-X). However, Kademlia stores the information at the k peers, that are closest to the "address" denoted by the key. When I want to update this information, I have to make sure 1) only one handles my STOREINFO, 2) this one peer redistributes the changed data to all these k peers, 3) all replicas are updated, 4) no other peer stores data on this key while operations 1-3 are performed. This sounds complex and will most likely fail in a distributed environment. It would no be a problem if it takes some time until the new information is distributed and peers looking it up get the old information until then, but I do not want the list to be corrupted. I am thinking of changing to Chord (OpenChord) where I imagine I might have more control - but losing the advantages of Kademlia, unfortunately. Does anyone here have a clue if I can accomplish this operation in a "smarter" way, with a "smarter" DHT to build upon asf.???? I am grateful for any tips you have for me! If I am running completely wrong and/or should just look at it another way or anything, I would also like to hear it ;-) Thanks very much Karl _______________________________________________ p2p-hackers mailing list [email protected] http://lists.zooko.com/mailman/listinfo/p2p-hackers
