Consistent hashing for Python
Project description
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>
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for python_continuum-0.1.1-py2.6.egg
Algorithm | Hash digest | |
---|---|---|
SHA256 | 75b81a753c2850b924807b2c40257479325f012b4c9ff96b3fdfedd1771dd77e |
|
MD5 | e3ef6a8c6974bb6cd6a78af1d2ad6904 |
|
BLAKE2b-256 | 07250fcaf38f663b93fcaedfd5694453bd2b7a30872dac3a62032ad80ecab668 |