My understanding of a distributed hash table is that every node can be identified uniquely by a nodeId and can store information, like host, port and values. Every node stores other nodeIds in (a) lookup table(s) and finding another node can be made as efficient as log(n) with system size n. In order to retrieve the value from a node, one would need a key. Is the key for a value just the nodeId (i.e. a content identifier or hash of the value)? If so, then every node can only save one value? Or can a nodeId store multiple key-values, in which case the question arises how to retrieve a value without knowing which node contains which keys.
What is the relation between a nodeId and a key in distributed hash tables?
138 Views Asked by Marlo At
1
There are 1 best solutions below
Related Questions in KEY-VALUE
- Asp.Net 5 correct way to access logging config file from Startup.cs
- How and Where to tell if a ViewComponent has been invoked x times in a view?
- Unable to utilize UrlHelper
- IdentityManager with VNext
- How to output css to kestrel in OS X using Visual Studio Code
- How to configure email settings in ASP.NET 5?
- Override site binding using VS2015 and IIS Express
- Setting IIS Settings in Web.config using ASP.NET MVC 6
- HTTP Error 403.14 in ASP.NET5 MVC6
- What is first class mechanism in EF?
Related Questions in DISTRIBUTED-SYSTEM
- Asp.Net 5 correct way to access logging config file from Startup.cs
- How and Where to tell if a ViewComponent has been invoked x times in a view?
- Unable to utilize UrlHelper
- IdentityManager with VNext
- How to output css to kestrel in OS X using Visual Studio Code
- How to configure email settings in ASP.NET 5?
- Override site binding using VS2015 and IIS Express
- Setting IIS Settings in Web.config using ASP.NET MVC 6
- HTTP Error 403.14 in ASP.NET5 MVC6
- What is first class mechanism in EF?
Related Questions in KEY-VALUE-STORE
- Asp.Net 5 correct way to access logging config file from Startup.cs
- How and Where to tell if a ViewComponent has been invoked x times in a view?
- Unable to utilize UrlHelper
- IdentityManager with VNext
- How to output css to kestrel in OS X using Visual Studio Code
- How to configure email settings in ASP.NET 5?
- Override site binding using VS2015 and IIS Express
- Setting IIS Settings in Web.config using ASP.NET MVC 6
- HTTP Error 403.14 in ASP.NET5 MVC6
- What is first class mechanism in EF?
Related Questions in DHT
- Asp.Net 5 correct way to access logging config file from Startup.cs
- How and Where to tell if a ViewComponent has been invoked x times in a view?
- Unable to utilize UrlHelper
- IdentityManager with VNext
- How to output css to kestrel in OS X using Visual Studio Code
- How to configure email settings in ASP.NET 5?
- Override site binding using VS2015 and IIS Express
- Setting IIS Settings in Web.config using ASP.NET MVC 6
- HTTP Error 403.14 in ASP.NET5 MVC6
- What is first class mechanism in EF?
Related Questions in KADEMLIA
- Asp.Net 5 correct way to access logging config file from Startup.cs
- How and Where to tell if a ViewComponent has been invoked x times in a view?
- Unable to utilize UrlHelper
- IdentityManager with VNext
- How to output css to kestrel in OS X using Visual Studio Code
- How to configure email settings in ASP.NET 5?
- Override site binding using VS2015 and IIS Express
- Setting IIS Settings in Web.config using ASP.NET MVC 6
- HTTP Error 403.14 in ASP.NET5 MVC6
- What is first class mechanism in EF?
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
Popular # Hahtags
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
There are two general approaches for building distributed hash tables: distribute keys to nodes based on key values or based on hashes of keys. There are pros and cons for either option.
In either way, we will need to find a nodeId for a given key. A naive implementation could use modulus operation to find a target node. The problem with this approach is that when we do change number of nodes, then we have to remap absolutely every key - this is slow.
Let's say we have 4 nodes and the key is 10. 10 mod 4 is 2 an we will pick node #2 to store the data.
If you do need to handle node addition/removal efficiently, the common approach is called Consistent Hashing - that works similar to what you have described - we have multiple key (or hashes of key) intervals and assign many of those intervals to nodes - we require number of this intervals to be much larger than number of nodes. Hence if we add or remove a node, only some of those intervals need to be remapped to other nodes.