RelStorage


NameRelStorage JSON
Version 4.0.0 PyPI version JSON
download
home_pagehttps://relstorage.readthedocs.io/
SummaryA backend for ZODB that stores pickles in a relational database.
upload_time2023-12-11 22:32:35
maintainerJason Madden
docs_urlNone
authorShane Hathaway with Zope Foundation and Contributors
requires_python>=3.8
licenseZPL 2.1
keywords zodb sql rdbms mysql postgresql oracle
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage
            
..
  This file is the long-description for PyPI so it can only use plain
  ReST, no sphinx extensions.

RelStorage is a storage implementation for ZODB that stores pickles in
a relational database (`RDBMS`_). PostgreSQL 10 and above, MySQL
5.7.19 / 8.0, Oracle 10g and above, and SQLite 3.8.3 and above are
currently supported. RelStorage replaced the PGStorage project.

.. _RDBMS: https://en.wikipedia.org/wiki/Relational_database_

==========
 Features
==========

* It is a drop-in replacement for FileStorage and ZEO, with several
  enhancements:

  * Supports undo, packing, and object history preservation just like
    FileStorage.
  * RelStorage can be configured *not* to keep object histories for
    reduced disk space usage and improved performance.
  * Multiple processes on a single machine can read and write a local
    ZODB database using SQLite without needing to start and manage
    another process (i.e., ZEO).
  * Blobs can be stored on a shared filesystem, or (recommended) in
    the relational database and only cached locally.
  * Multiple threads in the same process share a high-performance
    in-memory pickle cache to reduce the number of queries to the
    RDBMS. This is similar to ZEO, and the ZEO cache trace tools are
    supported.
  * The in-memory pickle cache can be saved to disk and read when a
    process starts up. This can dramatically speed up site warmup time
    by eliminating a flood of RDBMS queries. Unlike ZEO, this cache
    is automatically shared by all processes on the machine (no need
    to configure separate client identifiers.)

* Ideal for large, high volume sites.

  * Multiple Python processes on multiple machines can read and write
    the same ZODB database concurrently. This is similar to ZEO, but
    RelStorage does not require ZEO.
  * Supports ZODB 5's parallel commit feature: Database writers only
    block each other when they would conflict (except for a small
    window at the end of the twophase commit protocol when the
    transaction ID is allocated; that still requires a global database
    lock).
  * According to some tests, RelStorage handles concurrency better than
    the standard combination of ZEO and FileStorage.
  * Whereas FileStorage takes longer to start as the database grows
    due to an in-memory index of all objects, RelStorage starts
    quickly regardless of database size.
  * Capable of failover to replicated SQL databases.
* Tested integration with `gevent`_ for PostgreSQL, MySQL, and SQLite.
* There is a simple way (`zodbconvert`_) to (incrementally) convert
  FileStorage to RelStorage and back again. You can also convert a
  RelStorage instance to a different relational database. This is a
  general tool that can be used to convert between any two ZODB
  storage implementations.
* There is a simple way (`zodbpack`_) to pack databases.
* Supports `zodburi`_ .
* Free, open source (ZPL 2.1)

.. _gevent: http://gevent.org
.. _zodbconvert: https://relstorage.readthedocs.io/en/latest/zodbconvert.html
.. _zodbpack: https://relstorage.readthedocs.io/en/latest/zodbpack.html
.. _zodburi: https://relstorage.readthedocs.io/en/latest/zodburi.html

Features Supported by Databases
===============================

Some of RelStorage's features are only supported on certain versions
of certain databases. If the database doesn't support the feature,
RelStorage will still work, but possibly with a performance penalty.


.. list-table:: Supported Features
   :widths: auto
   :header-rows: 1
   :stub-columns: 1

   * -
     - Parallel Commit
     - Shared readCurrent locks
     - Non-blocking readCurrent locks
     - Streaming blobs
     - Central transaction ID allocation
     - Atomic lock and commit without Python involvement
   * - PostgreSQL
     - Yes
     - Yes
     - Yes
     - With psycopg2 driver
     - Yes
     - Yes, except with PG8000 driver
   * - MySQL
     - Yes
     - Yes
     - Native on MySQL 8.0, emulated on MySQL 5.7
     - No, emulated via chunking
     - Yes
     - Yes
   * - Oracle
     - Yes
     - No
     - Yes
     - Yes
     - No (could probably be implemented)
     - No (could probably be implemented)
   * - SQLite
     - No
     - No
     - N/A (there is no distinction in lock types)
     - No, consider using a shared-blob-dir
     - N/A (essentially yes because it happens on one machine)
     - No


===============
 Documentation
===============

Documentation including `installation instructions`_ is hosted on `readthedocs`_.

The complete `changelog`_ is also there.

.. image:: https://readthedocs.org/projects/relstorage/badge/?version=latest
     :target: http://relstorage.readthedocs.io/en/latest/?badge=latest


.. _`installation instructions`: http://relstorage.readthedocs.io/en/latest/install.html
.. _`readthedocs`: http://relstorage.readthedocs.io/en/latest/
.. _`changelog`: http://relstorage.readthedocs.io/en/latest/changelog.html


=============
 Development
=============

RelStorage is hosted at GitHub:

    https://github.com/zodb/relstorage

Continuous integration
======================

A test suite is run for every push and pull request submitted. GitHub
Actions is used to test on Linux and macOS, and AppVeyor runs the builds on
Windows.

.. image:: https://github.com/zodb/relstorage/workflows/tests/badge.svg
    :target: https://github.com/zodb/relstorage/actions

.. image:: https://ci.appveyor.com/api/projects/status/pccddlgujdoqvl83?svg=true
   :target: https://ci.appveyor.com/project/jamadden/relstorage/branch/master

Builds on CI automatically submit updates to `coveralls.io`_ to
monitor test coverage.

.. image:: https://coveralls.io/repos/zodb/relstorage/badge.svg?branch=master&service=github
   :target: https://coveralls.io/github/zodb/relstorage?branch=master

.. _coveralls.io: https://coveralls.io/github/zodb/relstorage

            

Raw data

            {
    "_id": null,
    "home_page": "https://relstorage.readthedocs.io/",
    "name": "RelStorage",
    "maintainer": "Jason Madden",
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": "jason@nextthought.com",
    "keywords": "ZODB SQL RDBMS MySQL PostgreSQL Oracle",
    "author": "Shane Hathaway with Zope Foundation and Contributors",
    "author_email": "shane@willowrise.com",
    "download_url": "https://files.pythonhosted.org/packages/6e/4f/acd058ec213b14e0cc48276831eca8b5ada3c94cb1db27abe4480a393d58/RelStorage-4.0.0.tar.gz",
    "platform": "any",
    "description": "\n..\n  This file is the long-description for PyPI so it can only use plain\n  ReST, no sphinx extensions.\n\nRelStorage is a storage implementation for ZODB that stores pickles in\na relational database (`RDBMS`_). PostgreSQL 10 and above, MySQL\n5.7.19 / 8.0, Oracle 10g and above, and SQLite 3.8.3 and above are\ncurrently supported. RelStorage replaced the PGStorage project.\n\n.. _RDBMS: https://en.wikipedia.org/wiki/Relational_database_\n\n==========\n Features\n==========\n\n* It is a drop-in replacement for FileStorage and ZEO, with several\n  enhancements:\n\n  * Supports undo, packing, and object history preservation just like\n    FileStorage.\n  * RelStorage can be configured *not* to keep object histories for\n    reduced disk space usage and improved performance.\n  * Multiple processes on a single machine can read and write a local\n    ZODB database using SQLite without needing to start and manage\n    another process (i.e., ZEO).\n  * Blobs can be stored on a shared filesystem, or (recommended) in\n    the relational database and only cached locally.\n  * Multiple threads in the same process share a high-performance\n    in-memory pickle cache to reduce the number of queries to the\n    RDBMS. This is similar to ZEO, and the ZEO cache trace tools are\n    supported.\n  * The in-memory pickle cache can be saved to disk and read when a\n    process starts up. This can dramatically speed up site warmup time\n    by eliminating a flood of RDBMS queries. Unlike ZEO, this cache\n    is automatically shared by all processes on the machine (no need\n    to configure separate client identifiers.)\n\n* Ideal for large, high volume sites.\n\n  * Multiple Python processes on multiple machines can read and write\n    the same ZODB database concurrently. This is similar to ZEO, but\n    RelStorage does not require ZEO.\n  * Supports ZODB 5's parallel commit feature: Database writers only\n    block each other when they would conflict (except for a small\n    window at the end of the twophase commit protocol when the\n    transaction ID is allocated; that still requires a global database\n    lock).\n  * According to some tests, RelStorage handles concurrency better than\n    the standard combination of ZEO and FileStorage.\n  * Whereas FileStorage takes longer to start as the database grows\n    due to an in-memory index of all objects, RelStorage starts\n    quickly regardless of database size.\n  * Capable of failover to replicated SQL databases.\n* Tested integration with `gevent`_ for PostgreSQL, MySQL, and SQLite.\n* There is a simple way (`zodbconvert`_) to (incrementally) convert\n  FileStorage to RelStorage and back again. You can also convert a\n  RelStorage instance to a different relational database. This is a\n  general tool that can be used to convert between any two ZODB\n  storage implementations.\n* There is a simple way (`zodbpack`_) to pack databases.\n* Supports `zodburi`_ .\n* Free, open source (ZPL 2.1)\n\n.. _gevent: http://gevent.org\n.. _zodbconvert: https://relstorage.readthedocs.io/en/latest/zodbconvert.html\n.. _zodbpack: https://relstorage.readthedocs.io/en/latest/zodbpack.html\n.. _zodburi: https://relstorage.readthedocs.io/en/latest/zodburi.html\n\nFeatures Supported by Databases\n===============================\n\nSome of RelStorage's features are only supported on certain versions\nof certain databases. If the database doesn't support the feature,\nRelStorage will still work, but possibly with a performance penalty.\n\n\n.. list-table:: Supported Features\n   :widths: auto\n   :header-rows: 1\n   :stub-columns: 1\n\n   * -\n     - Parallel Commit\n     - Shared readCurrent locks\n     - Non-blocking readCurrent locks\n     - Streaming blobs\n     - Central transaction ID allocation\n     - Atomic lock and commit without Python involvement\n   * - PostgreSQL\n     - Yes\n     - Yes\n     - Yes\n     - With psycopg2 driver\n     - Yes\n     - Yes, except with PG8000 driver\n   * - MySQL\n     - Yes\n     - Yes\n     - Native on MySQL 8.0, emulated on MySQL 5.7\n     - No, emulated via chunking\n     - Yes\n     - Yes\n   * - Oracle\n     - Yes\n     - No\n     - Yes\n     - Yes\n     - No (could probably be implemented)\n     - No (could probably be implemented)\n   * - SQLite\n     - No\n     - No\n     - N/A (there is no distinction in lock types)\n     - No, consider using a shared-blob-dir\n     - N/A (essentially yes because it happens on one machine)\n     - No\n\n\n===============\n Documentation\n===============\n\nDocumentation including `installation instructions`_ is hosted on `readthedocs`_.\n\nThe complete `changelog`_ is also there.\n\n.. image:: https://readthedocs.org/projects/relstorage/badge/?version=latest\n     :target: http://relstorage.readthedocs.io/en/latest/?badge=latest\n\n\n.. _`installation instructions`: http://relstorage.readthedocs.io/en/latest/install.html\n.. _`readthedocs`: http://relstorage.readthedocs.io/en/latest/\n.. _`changelog`: http://relstorage.readthedocs.io/en/latest/changelog.html\n\n\n=============\n Development\n=============\n\nRelStorage is hosted at GitHub:\n\n    https://github.com/zodb/relstorage\n\nContinuous integration\n======================\n\nA test suite is run for every push and pull request submitted. GitHub\nActions is used to test on Linux and macOS, and AppVeyor runs the builds on\nWindows.\n\n.. image:: https://github.com/zodb/relstorage/workflows/tests/badge.svg\n    :target: https://github.com/zodb/relstorage/actions\n\n.. image:: https://ci.appveyor.com/api/projects/status/pccddlgujdoqvl83?svg=true\n   :target: https://ci.appveyor.com/project/jamadden/relstorage/branch/master\n\nBuilds on CI automatically submit updates to `coveralls.io`_ to\nmonitor test coverage.\n\n.. image:: https://coveralls.io/repos/zodb/relstorage/badge.svg?branch=master&service=github\n   :target: https://coveralls.io/github/zodb/relstorage?branch=master\n\n.. _coveralls.io: https://coveralls.io/github/zodb/relstorage\n",
    "bugtrack_url": null,
    "license": "ZPL 2.1",
    "summary": "A backend for ZODB that stores pickles in a relational database.",
    "version": "4.0.0",
    "project_urls": {
        "Bug Tracker": "https://github.com/zodb/relstorage/issues",
        "Documentation": "https://relstorage.readthedocs.io",
        "Homepage": "https://relstorage.readthedocs.io/",
        "Source Code": "https://github.com/zodb/relstorage/"
    },
    "split_keywords": [
        "zodb",
        "sql",
        "rdbms",
        "mysql",
        "postgresql",
        "oracle"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "6e4facd058ec213b14e0cc48276831eca8b5ada3c94cb1db27abe4480a393d58",
                "md5": "b26131d4653890d5d73239ba776b98c8",
                "sha256": "0eea5c123153afd3fcedde9c8281c10231cdbdd63d604c3bbe1aa9def2cd05f1"
            },
            "downloads": -1,
            "filename": "RelStorage-4.0.0.tar.gz",
            "has_sig": false,
            "md5_digest": "b26131d4653890d5d73239ba776b98c8",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 2561186,
            "upload_time": "2023-12-11T22:32:35",
            "upload_time_iso_8601": "2023-12-11T22:32:35.691473Z",
            "url": "https://files.pythonhosted.org/packages/6e/4f/acd058ec213b14e0cc48276831eca8b5ada3c94cb1db27abe4480a393d58/RelStorage-4.0.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2023-12-11 22:32:35",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "zodb",
    "github_project": "relstorage",
    "travis_ci": false,
    "coveralls": true,
    "github_actions": true,
    "landscape": true,
    "appveyor": true,
    "tox": true,
    "lcname": "relstorage"
}
        
Elapsed time: 0.14823s