Consistent hashing for Python.
Python
Latest commit e3b8888 Sep 22, 2014 @fancycode Merge pull request #1 from fanzeyi/master
Add add_multi_servers method
Permalink
Failed to load latest commit information.
tests initial version Nov 14, 2010
.gitignore initial version Nov 14, 2010
LICENSE.txt initial version Nov 14, 2010
MANIFEST.in initial version Nov 14, 2010
README.txt initial version Nov 14, 2010
continuum.py add add_multi_servers method May 20, 2013
ez_setup.py initial version Nov 14, 2010
setup.cfg initial version Nov 14, 2010
setup.py initial version Nov 14, 2010
version.py initial version Nov 14, 2010

README.txt

python-continuum - Consistent hashing
========================================================================

Copyright (c) 2010 by Joachim Bauch, mail@joachim-bauch.de
http://www.joachim-bauch.de/projects/python-continuum/

python-continuum provides a function to do consistent hashing. See
wikipedia [1]_ for more informations about this technique.

First we need the continuum object that serves as storage for server
informations and can later be used to resolve keys::

	>>> from continuum import Continuum
	>>> c = Continuum()

Empty continuums obviously can't be queried::

	>>> c.resolve('my-key1')
	Traceback (most recent call last):
	...
	IndexError: empty continuum

Add the server objects that are available as backends::

	>>> c.add_server('192.168.0.1', 8080)
	<Server "192.168.0.1:8080", capacity=1>
	>>> c.add_server('192.168.0.2', 8080)
	<Server "192.168.0.2:8080", capacity=1>

You can also specify different capacities of the server to priorize
them (this defaults to 1)::

	>>> c.add_server('192.168.0.3', 8080, 2)
	<Server "192.168.0.3:8080", capacity=2>

Server objects can also be removed::

	>>> server = c.add_server('192.168.0.4', 8080)
	>>> c.remove_server(server)
	>>> len(c)
	3

Please note that a server can only be added once::

	>>> c.add_server('192.168.0.2', 8080)
	Traceback (most recent call last):
	...
	TypeError: server already added

After all servers have been added, the continuum can be queried for the
server that should be used for a given (string) key::

	>>> c.resolve('my-first-key')
	<Server "192.168.0.1:8080", capacity=1>
	>>> c.resolve('my-other-key')
	<Server "192.168.0.3:8080", capacity=2>


.. [1] http://en.wikipedia.org/wiki/Consistent_hashing