zodb/relstorage

GitHub: zodb/relstorage

为 ZODB 对象数据库提供关系型数据库后端存储,支持多种 RDBMS,可替代 FileStorage 和 ZEO 以实现更高并发和更易管理的存储架构。

Stars: 60 | Forks: 45

此文件是 PyPI 的长描述,因此它只能使用纯 ReST,不能使用 sphinx 扩展。 RelStorage 是 ZODB 的一种存储实现,它将 pickles 存储在关系型数据库 (`RDBMS`_) 中。目前支持 PostgreSQL 10 及以上版本、MySQL 5.7.19 / 8.0、Oracle 10g 及以上版本以及 SQLite 3.8.3 及以上版本。RelStorage 取代了 PGStorage 项目。 # .. _RDBMS: https://en.wikipedia.org/wiki/Relational_database_ # 特性 * 它是 FileStorage 和 ZEO 的直接替代品,并具有多项增强功能: * 支持撤销、打包和对象历史记录保留,就像 FileStorage 一样。 * RelStorage 可以配置为*不*保留对象历史记录,以减少磁盘空间使用并提高性能。 * 单台机器上的多个进程可以使用 SQLite 读取和写入本地 ZODB 数据库,而无需启动和管理另一个进程(即 ZEO)。 * Blobs 可以存储在共享文件系统上,或者(推荐)存储在关系型数据库中,并且仅在本地缓存。 * 同一进程中的多个线程共享一个高性能的内存 pickle 缓存,以减少对 RDBMS 的查询次数。这与 ZEO 类似,并且支持 ZEO 缓存跟踪工具。 * 内存 pickle 缓存可以保存到磁盘,并在进程启动时读取。这可以通过消除大量的 RDBMS 查询来显著加快站点预热时间。与 ZEO 不同,此缓存由机器上的所有进程自动共享(无需配置单独的客户端标识符。) * 适用于大型、高流量的站点。 * 多台机器上的多个 Python 进程可以同时读取和写入同一个 ZODB 数据库。这与 ZEO 类似,但 RelStorage 不需要 ZEO。 * 支持 ZODB 5 的并行提交功能:数据库写入者只有在会发生冲突时才会相互阻塞(除了在两阶段提交协议结束时分配事务 ID 的一个小窗口期;该期间仍然需要全局数据库锁)。 * 根据一些测试,RelStorage 处理并发的能力优于 ZEO 和 FileStorage 的标准组合。 * 由于 FileStorage 需要在内存中建立所有对象的索引,随着数据库的增长,启动时间会变长,而 RelStorage 无论数据库大小如何,都能快速启动。 * 能够故障转移到复制的 SQL 数据库。 * 已测试与 `gevent`_ 在 PostgreSQL、MySQL 和 SQLite 上的集成。 * 有一种简单的方法 (`zodbconvert`_) 可以(增量地)将 FileStorage 转换为 RelStorage,反之亦然。您也可以将 RelStorage 实例转换为不同的关系型数据库。这是一个通用工具,可用于在任意两个 ZODB 存储实现之间进行转换。 * 有一种简单的方法 (`zodbpack`_) 来打包数据库。 * 支持 `zodburi`_。 * 免费、开源 (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 # 数据库支持的特性 RelStorage 的某些特性仅在特定版本的特定数据库上受支持。如果数据库不支持该特性,RelStorage 仍然可以工作,但可能会有性能损失。 .. list-table:: 支持的特性 :widths: auto :header-rows: 1 :stub-columns: 1 * - - 并行提交 - 共享 readCurrent 锁 - 非阻塞 readCurrent 锁 - 流式 blobs - 集中式事务 ID 分配 - 不涉及 Python 的原子锁和提交 * - PostgreSQL - 是 - 是 - 是 - 使用 psycopg2 驱动 - 是 - 是,除了 PG8000 驱动 * - MySQL - 是 - 是 - MySQL 8.0 原生支持,MySQL 5.7 上模拟 - 否,通过分块模拟 - 是 - 是 * - Oracle - 是 - 否 - 是 - 是 - 否(可能可以实现) - 否(可能可以实现) * - SQLite - 否 - 否 - 不适用(锁类型没有区别) - 否,考虑使用 shared-blob-dir - 不适用(本质上是的,因为它发生在单台机器上) # - 否 # 文档 包含 `安装说明`_ 的文档托管在 `readthedocs`_ 上。 完整的 `更新日志`_ 也在那里。 .. 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 # 开发 RelStorage 托管在 GitHub 上: ``` https://github.com/zodb/relstorage ``` # 持续集成 每次提交推送和拉取请求都会运行测试套件。Linux 和 macOS 上的测试使用 GitHub Actions,而 Windows 上的构建由 AppVeyor 运行。 .. 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 CI 上的构建会自动向 `coveralls.io`_ 提交更新以监控测试覆盖率。 .. 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
标签:Oracle, PostgreSQL, Python, RelStorage, SQLite, Syscall, Web开发, ZEO替代, ZODB, 关系型数据库, 分布式存储, 后端存储, 对象数据库, 并发控制, 序列化, 数据持久层, 无后门, 测试用例, 缓存, 逆向工具