Skip to content

Commit 9bdb0dd

Browse files
committed
Merge branch 'master' of https://github.com/HyperFence/dsodn-cpp
2 parents c6b7e52 + 1d4b1c3 commit 9bdb0dd

1 file changed

Lines changed: 12 additions & 1 deletion

File tree

README.md

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,25 @@
44
<br/>
55
<h2>Introduction</h2>
66
<p>
7-
Let's consider a scenario where the data is not located on a single machine but rather stored on multiple machines geo-distributed across the Internet. In such a scenario, searching or retrieval of data is very challenging, as it is hard to determine on which machine the required data is stored. This challenge can be solved by using a Data Structure that can efficiently search for data stored on a single machine. We will be mainly using <strong>Hash Tables</strong> along with <strong>Linked Lists</strong> to design an efficient solution for this scenario.
7+
Let's consider a scenario where the data is not located on a single machine but rather stored on multiple machines geo-distributed across the Internet. In such a scenario, searching or retrieval of data is very challenging, as it is hard to determine on which machine the required data is stored. This challenge can be solved by using a Data Structure that can efficiently search for data stored on a single machine. We will be mainly using <strong>Hash Tables</strong> along with <strong>Linked Lists</strong> and <strong>Binary Search Trees</strong> to design an efficient solution for this scenario.
88
</p>
99
<br/>
1010
<h2>Concept Illustration</h2>
1111
<p align="center">
1212
<img alt="Concept Illustration" src="https://i.ibb.co/yy2YppP/concept.png" width="600px" height="300px" />
1313
</p>
1414
<br/><br/>
15+
<h2>Implementation</h2>
16+
<p>
17+
In our implementation we assume that all the machines geo-distrubuted across the internet are present in an identifier space and linked with each other in the form of a circle. Maximum number of machines in this circle depends upon the size of the identifier space which is defined once initially in the beginning. A more professional term used for such arrangement is called <strong>"Ring DHT"</strong>. Below is an arbitrary example of machines arranged according to above specification.
18+
</p>
19+
<p align="center">
20+
<img alt="Concept Illustration" src="https://i.ibb.co/DQQmnv4/implementation-pic.jpg" width="600px" height="300px" />
21+
</p>
22+
<p>
23+
On the right side of above picture we have six machines and on the left side the black dots represent these machines in the identifier space. The above identifier space has a size of <strong>4 bits</strong> which means it can hold a maximum of <strong>2^size = 2^4 = 16</strong> machines. Notice that our identifier space has 6 out of 16 machines active which are connected with each other in the form of a circle. Due to this circular property of our space we call it the Ring DHT where DHT stands for Distributed Hash Tables(we'll discuss about DHTs later). In the above picture, each active machine has a unique id assigned to it which tells it apart from other machines in the identifier space. In above case 3, 5, 8, 10, 13 and 14 are the ids assigned to the machines respectively. Each of these machines is responsible for holding some sort of data which can be videos, images, music, text files, etc. This data is stored in the form of <strong>key/value</strong> pairs. These key/value pairs are arranged in the form of a Binary Search Tree. Every active machine in the above identifier space has a single binary tree associated with it which is used to store data key/value pairs of that machine.
24+
</p>
25+
<br/><br/>
1526
<h2>Development Team</h2>
1627
<p>
1728
The entire project was developed and coded by the following team of computer science students:

0 commit comments

Comments
 (0)