1
0
Fork 0
mirror of https://github.com/noerw/geo-dht synced 2025-03-12 08:30:28 +01:00
experimental distributed hashtable implementations with 2D topology
Find a file
Norwin Roosen 2c28e600fa WIP: ZCurve halfsplits
the missing feature to replace the topology & keyspace with zcurve
2019-09-10 15:55:53 +02:00
.gitignore Split responsibilities, helpful respond abstraction which either returns to sender or prints if the "sender" is just user input. 2016-03-06 18:01:46 -08:00
app.py fixes 2019-09-05 19:11:59 +02:00
direction.py add STATE VIZ query 2019-09-06 10:40:36 +02:00
geohash.py Geohash: add NUMERIC_MSB encode() Format 2019-09-10 01:11:00 +02:00
keyspace.py add STATE VIZ query 2019-09-06 10:40:36 +02:00
node.py add STATE VIZ query 2019-09-06 10:40:36 +02:00
README.md add STATE VIZ query 2019-09-06 10:40:36 +02:00
test.sh WIP 2016-09-15 08:16:33 -07:00
topology.py fix STATE VIZ query 2019-09-07 17:47:07 +02:00
zcurve.py WIP: ZCurve halfsplits 2019-09-10 15:55:53 +02:00

geo-dht

status: experimental

Results of our applied research on geo-routing / -hashing in peer to peer systems. This repo provides two DHT implementations with a 2D topology:

  • 2D-CAN: DHT with a 2D grid-based topology. Fully functional, though no geohashing is implemented (unclear how this would be meaningful apart from a translation of geographic coordinates to keyspace coords..). Currently, nodes only know about their direct neighbours.

  • 2D-Kademlia: DHT with XOR-metric based routing. Compared to Kademlia, the address space is twice as deep to accomodate for spatial addressing: Content- & node-addressing works through a [geohash] forming a Z-order curve, allowing to infer spatial relationships between nodes.

Originally, the plan was to compare the routing of both implementation through simulation in The ONE; but we're lacking time for this.

usage

To start the first Node in a DHT:

python app.py

To start a new node and join it to an existing DHT:

python app.py {entry_port}

...where {entry_port} is a port on localhost with another running Node.

Currently nodes only communicate whithin localhost. It should be easy to generalize to full IPs with some small modifications.

Valid commands

  • GET {key}
  • PUT {key} {value}
  • STATE
  • STATE VIZ