{ "info": { "author": "Oleiade", "author_email": "tcrevon@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "License :: OSI Approved :: MIT License", "Operating System :: Unix", "Programming Language :: Python :: 2.7", "Topic :: Database :: Database Engines/Servers" ], "description": "========\nElevator\n========\n\n.. image:: http://dl.dropbox.com/u/2497327/baneer.png\n :target: http://elevator.readthedocs.org\n\nKey-Value store written in Python and based on levelDB, allows high performance on-disk bulk read/write.\n\nAllows async, multithreaded and/or remote access to a multi-leveldb backend.\n\nRelying on the zeromq network library and msgpack serialization format, it is made to be portable between languages and\nplatforms.\n\nSee `Documentation `_ for more details\n\n\nDepends on\n----------\n\n- zmq-3.X\n- pyzmq (built with zmq-3.X)\n- leveldb\n- plyvel\n\n\nInstallation\n============\n\nThe easy way::\n\n pip install elevator\n\nThe hacker way::\n\n $ pip install fabric\n $ fab build\n $ pip install -r requirements.txt\n $ python setup.py install\n\n\nUsage\n=====\n\nWhen elevator is installed, you can then launch the server using the elevator executable.\nNote that a --daemon option is disposable, and allows you to run elevator server as a daemon,\nstoring it's pid in ``.pid`` file in ``/tmp``.\n\nSee ``config/elevator.conf`` for an example of Elevator configuration.\n\n*Example*:\n\n.. code-block:: bash\n\n $ elevator --help\n usage: elevator -h\n\n Elevator command line manager\n\n optional arguments:\n -h, --help show this help message and exit\n -d, --daemon Launch elevator as a daemon\n -c, --config Path to elevator server config file, eventually\n -t, --transport Transfert protocol (tcp | ipc)\n -b, --bind Ip to bind server to\n -p, --port Port the server should listen on\n -w, --workers How many workers should be spawned (Threads with concurrent access to all the db store)\n -P, --paranoid If option is set, Elevator will shutdown and log on first unhandled exception\n\n\nClients\n=======\n\n*Python*: `py-elevator `_\n\n*Go*: `go-elevator `_ (Early early, so early version)\n\n*Clojure* : *Coming soon*\n\n*C* : *Coming soon*\n\n\nThanks\n======\n\nThanks to `srinikom `_ for its `leveldb-server `_ which was a very good base to start from.\n\n\n\nn.n.n / 2013-02-01 \n==================\n\n * Remove: legacy setup_loggers function\n * fix #123: exposing a database object\n * ref #123: Renamed DatabasesHandler to DatabaseStore\n * Fix: elevator benchmarks\n * Fix: supervisor test should remove their tests files\n * Add: tests for backend atm\n * Add: backend supervisor tests + fixes\n * update: enhance backend majordome management\n * fix #125: backend does not instantiate it's own DatabasesHandler anymore\n * Fix: elevator tests fakers now uses a clear files/dirs pattern\n * Update: more obvious DatabaseHandler args names\n * Add: benchmarks using hurdles and pyelevator\n * update #120 : Auto re-mount unmounted database on new requests\n * Fix : backend properly tears down workers\n * fix #120, fix #91: Implement Majordom watcher thread\n * Update #120: set databases last access marker\n * Update 120: move ocd worker to backend module\n * Update #121: implement last activity action on workers\n * Update #121: Documented worker\n * Update #121: Workers poll to reduce cpu usage + backend refactoring\n * Update #121: use an internal message protocol between supervisor and workers\n * Update: Moved the backend elements in their own module\n * Fix #122: workers now set their processing state\n * Refactor: moved loggers init in their own log module\n * Update #121: fixed workers stop action\n * Update #121: Added constants to normalize interaction with workers\n * Add #121: basic workers supervisor implementation, implies a lot of refactoring\n * Update: rename server poller\n * Update: use ROUTER/DEALER terminology and rename workerpool and proxy to backend and frontend\n * Update: renamed conf module to args\n\n0.4b / 2013-01-28\n==================\n\n * Fix: Refactor api tests\n * Fix #119: Range and Slice now support include_key, and include_value params\n * Remove: max cache management + Add: Lru cache and bloom filters\n\n0.4a / 2013-01-22\n==================\n\n * Add : Implement PING command\n * Add : Cli module\n * Add : Debian packaging files\n * Update: Use plyvel leveldb backend\n * Update: Use plyvel bloom filter in read operations\n * Update: Add experimental command line doc\n * Update: Set fabfile as a module\n * Update: Documentation to fit with plyvel\n * Update #114: Run MGet against db snapshot\n * Update : working cmdline\n * Fix #114: Enhance MGET perfs by acting on a min/max keys range slice\n * Fix #113: handle MGET arguments in command line\n * Many other little updates and fixes, see logs\n\n\n0.4 / 2012-10-22\n==================\n\n * Add: restore theme\n * Add : Base sphinx documentation\n * Update : new License MIT\n * Fix #86: IOError when bad config file supplied as cmdline argument\n * Fix #95: Elevator will start and log errors even though some databases are corrupted\n * Fix : log-level debug messages format\n * Fix : travis, tests, requirements\n\n0.3d / 2012-10-19\n==================\n\n * Add : Request error for invalid request messages\n * Update #91: Mount default at server startup\n * Update #91: Mount/Unmount command + auto-mount on connect\n * Update #91: add a ticker class, which executes a function every x seconds\n * Update #30, Update #99: Compress Responses on demande (request.meta['compression'])\n * Update #88, Update #99: now responses comes in two parts header+content\n * Update #88: Fix MGet, Range, Slice return values types to suite with new responses format\n * Update #88: Refactored Request/Responses format\n * Update : Refactored DatabasesHandler internal storage\n * Update : Few refactoring on loggers handling\n * Update : Refactored DBConnect no more db_uid to provide in request\n * Fix #97: provide mono-letters args\n * Fix #89: Log requests/responses on log-level=DEBUG\n * Fix #87: Refactored logging\n * Fix #100: Non blocking workers, graceful shutdown == PERFORMANCES\n * Fix #98: Activity logging on both file and stdout\n * Fix #101: fixed ipc handling\n * Fix : api tests for compatibility with new Req/Resp\n * Fix : refactored tests for new Range/Slice behavior when size == 1\n * Fix : Mount/Unmount passed args", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://github.com/oleiade/Elevator", "keywords": "elevator leveldb database key-value", "license": "MIT", "maintainer": null, "maintainer_email": null, "name": "Elevator", "package_url": "https://pypi.org/project/Elevator/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/Elevator/", "project_urls": { "Download": "UNKNOWN", "Homepage": "http://github.com/oleiade/Elevator" }, "release_url": "https://pypi.org/project/Elevator/0.5/", "requires_dist": null, "requires_python": null, "summary": "On disk key/value store based on levelDB backend", "version": "0.5" }, "last_serial": 784202, "releases": { "0.5": [ { "comment_text": "", "digests": { "md5": "0b262618f3d67db1f6b86debb0ca6ed8", "sha256": "5695b5d51f0a4c604a5f33175aa9da41e06a5a892a0ff5a48eb19db96e9a6997" }, "downloads": -1, "filename": "Elevator-0.5.tar.gz", "has_sig": true, "md5_digest": "0b262618f3d67db1f6b86debb0ca6ed8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 34531, "upload_time": "2013-02-21T16:51:23", "url": "https://files.pythonhosted.org/packages/2e/75/b49a8583891c08ff73583d0bc07fcdfa25ab165f6a3fcb500fef90f3e651/Elevator-0.5.tar.gz" } ], "0.5a": [ { "comment_text": "", "digests": { "md5": "be86d843cc062a2961f7bb6725409958", "sha256": "e4c5b23c92137f1b808da5ec108f2e001b324aa3bb2cf717e956697da65aa767" }, "downloads": -1, "filename": "Elevator-0.5a.tar.gz", "has_sig": true, "md5_digest": "be86d843cc062a2961f7bb6725409958", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 34719, "upload_time": "2013-03-04T16:49:57", "url": "https://files.pythonhosted.org/packages/d7/71/23ec930bb3f0662a98b05cc53bf0724d0dfe4a69b07a4f713019eea18d55/Elevator-0.5a.tar.gz" } ], "0.5b": [], "0.5c": [ { "comment_text": "", "digests": { "md5": "45720455c4ce21f06681314bceae1eb6", "sha256": "872a8d00aad2e3bb62443d897c2029c9e368bce639db9def1c1ac5b6f1c97b3e" }, "downloads": -1, "filename": "Elevator-0.5c.tar.gz", "has_sig": true, "md5_digest": "45720455c4ce21f06681314bceae1eb6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 35188, "upload_time": "2013-03-18T14:20:14", "url": "https://files.pythonhosted.org/packages/b6/3f/7403f5c3e3075af2808a938d3a197c47a8724ed5521b5e13eaac666d49af/Elevator-0.5c.tar.gz" } ], "0.5d": [ { "comment_text": "", "digests": { "md5": "e8e5296d6cc29bc30ee2cdbdcb16549d", "sha256": "3faaa86e6096f743a4abf2fa6514847ac4018f3c90e49f9d8ab736daf25b447f" }, "downloads": -1, "filename": "Elevator-0.5d.tar.gz", "has_sig": false, "md5_digest": "e8e5296d6cc29bc30ee2cdbdcb16549d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 26909, "upload_time": "2013-04-30T14:36:44", "url": "https://files.pythonhosted.org/packages/79/c5/5fbe5411837da584e0d63df6952ffba75a6a42fd83a9e9c589ae7adb4b4c/Elevator-0.5d.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "0b262618f3d67db1f6b86debb0ca6ed8", "sha256": "5695b5d51f0a4c604a5f33175aa9da41e06a5a892a0ff5a48eb19db96e9a6997" }, "downloads": -1, "filename": "Elevator-0.5.tar.gz", "has_sig": true, "md5_digest": "0b262618f3d67db1f6b86debb0ca6ed8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 34531, "upload_time": "2013-02-21T16:51:23", "url": "https://files.pythonhosted.org/packages/2e/75/b49a8583891c08ff73583d0bc07fcdfa25ab165f6a3fcb500fef90f3e651/Elevator-0.5.tar.gz" } ] }