RelStorage和ZEO的zc.buildout配方
项目描述
针对创建RelStorage和ZEO配置的具有观点的配方,特别是针对多数据库量身定制。
限制
单个buildout可以使用一个 RelStorage配方或一个 ZEO配方。它不能同时使用两者,或每个各超过一个。这是因为这两个配方都会写入相同的配置文件
依赖关系
这里定义的配方使用 collective.recipe.template 输出配置文件,并使用 z3c.recipe.mkdir 创建隐式定义的目录。使用 zc.zodbrecipes 创建 ZEO 服务器。不需要手动安装这些,因为 buildout 将在需要时负责使它们可用。
目录和文件
这里定义的配方使用由 zc.recipe.deployment 定义的目录结构和变量。应该有一个名为 deployment 的 buildout 部分,它使用此配方。或者(当从多个配置中组合 buildout 时特别有用),可以定义一个 deployment 部分,手动列出这些目录。还需要包含应拥有创建的文件和目录的用户名。
[deployment]
bin-directory = ${buildout:bin-directory}
cache-directory = ${:run-directory}/caches
crontab-directory = ${:root-directory}/etc/cron.d
data-directory = ${:root-directory}/data
etc-directory = ${:root-directory}/etc
log-directory = ${:root-directory}/var/log
logrotate-directory = ${:root-directory}/etc/logrotate.d
rc-directory = ${:root-directory}/bin/rc
root-directory = ${buildout:root-directory}
run-directory = ${:root-directory}/var
部署配方负责创建所需的目录,但在这里我们将手动创建。我们将定义一个通用的配置片段,将其包含在未来的示例中。
>>> write(sample_buildout, 'deployment.cfg', ... """ ... [deployment] ... root-directory = ${buildout:directory} ... data-directory = ${:root-directory}/data ... etc-directory = ${:root-directory}/etc ... log-directory = ${:root-directory}/var/log ... run-directory = ${:root-directory}/var ... rc-directory = ${:root-directory}/bin/rc ... cache-directory = ${:run-directory}/caches ... logrotate-directory = ${:root-directory}/etc/logrotate.d ... crontab-directory = ${:root-directory}/etc/cron.d ... user = user ... ... [directories] ... recipe = z3c.recipe.mkdir ... create-intermediate = true ... mode = 0700 ... paths = ... ${deployment:etc-directory} ... ${deployment:run-directory} ... ${deployment:cache-directory} ... ${deployment:data-directory} ... ${deployment:log-directory} ... ${deployment:rc-directory} ... ${deployment:logrotate-directory} ... ${deployment:crontab-directory} ... """)
这两个配方都在 etc-directory 中创建两个文件。
- zodb_conf.xml
此文件旨在使用 ZODB.config.databaseFromFile 或 databaseFromURL 读取。如果指定了多个存储,它们将按提供的顺序列出,创建一个多数据库,其中第一个列出的存储作为“根”数据库。
- zeo_uris.ini
此文件提供与 zodb_conf.xml 相同的数据库配置(实际上,它引用了该文件),但它以单个 URL 字符串的形式提供,可以使用 zodburi 读取。这可以方便地以字符串的形式传递。
配方选项
这里定义的两个配方都接受一些通用选项。
- storages
必需。由空格分隔的存储名称列表。这些中的每一个都将添加到生成的配置文件中,以便客户端使用(以及对于 ZEO,服务器提供)。
这只能在配方部分中直接定义。
- compress
如果设置为“decompress”(默认值),则每个存储将用 zc.zlibstorage 包装,该包装仅压缩现有记录。如果设置为“compress”,则新记录也将被压缩。
设置为“none”以完全禁用包装器。
可以在配方部分中设置。如果没有在那里定义,则将使用 environment 部分中定义的值,然后再回退到默认值。
存储和数据库选项
一些选项可用于配置 ZODB 数据库。这些由两个配方使用,可以在每个数据库级别定义(参见每个配方的说明)。默认值是内置的,但在配方部分设置值将为所有存储提供一个新默认值。此外,为了向后兼容和组合 buildout 配置,如果存在名为 <part>_opts 的部分,其中 <part> 是配方部分的名称,则在那里定义的选项将覆盖配方部分中定义的选项,但将被为单个存储定义的选项覆盖。
这些配置选项与 ZODB 连接池及其缓存有关。
[zeo]
recipe = nti.recipes.zodb:zeo
storages = users
cache_size = 50
[zeo]
recipe = nti.recipes.zodb:zeo
storages = users
[zeo_opts]
cache_size = 50
- cache_size
控制 ZODB 每个连接的对象缓存。将此设置为足够大以包含应用程序的工作集可能非常重要,特别是在读密集型工作负载中。设置过大可能会浪费内存。
- pool_size
控制ZODB池中保留的ZODB连接数。设置足够大以适应应用程序将处理的并发活动(请求)数量非常重要。池中的每个连接都持有资源,如其缓存,在RelStorage的情况下,还有RDBMS套接字和可能的memcache套接字。设置过大可能会浪费内存和文件描述符。
通常,打开数据库并关闭连接将创建连接(如果需要),然后将其返回到池中(如果池未满)。然而,在多数据库的情况下,当需要从辅助数据库加载对象时,活动连接将请求与该数据库的连接,当活动连接关闭时,辅助连接也会关闭但不会返回到池中。相反,活动(主)连接保留对其的引用,将来将使用它。这会导致所有辅助池基于主池的效率。因此,除了主数据库之外的所有内容的池大小实际上是没有意义的(如果应用程序总是从打开该主数据库开始),但这个池大小控制着一切。
调用DB.connectionDebugInfo()可以显示不正确大小的池:池中的连接有‘opened’为None,而正在使用的连接有一个时间戳和打开的时间长度。
- pool_timeout
一个时间间隔值(接受一个整数秒数或以字符's'、'm'、'h'、'd'结尾的整数,分别表示秒、分钟、小时或天),指定空闲连接在关闭之前允许在池中保持多长时间。实际上,没有默认值,因此连接永远不会超时。
RelStorage
relstorage配方创建配置以在历史免费模式下连接到MySQL、PostgreSQL或SQLite3 RelStorage数据库。(Oracle不受支持。)
有几种不同的配置存储的方式。如果您有多个存储位于同一个数据库服务器上,并且该服务器上还有其他数据库(SQLAlchemy等),您可能对使用共享的环境部分来包含服务器位置和账户凭证感兴趣。
默认情况下,数据库的名称与存储名称相同。保留存储名称的大小写(这对于跨数据库引用很重要。)
>>> write(sample_buildout, 'buildout.cfg', ... """ ... [buildout] ... extends = deployment.cfg ... parts = directories relstorage ... ... [environment] ... sql_user = the_user ... sql_host = the_server ... sql_passwd = the_passwd ... ... [relstorage] ... recipe = nti.recipes.zodb:relstorage ... storages = Users Sessions ... compress = none ... """)>>> print_(system(buildout), end='') Installing... Installing relstorage. >>> ls(sample_buildout, 'etc') d cron.d d logrotate.d - zeo_uris.ini - zodb_conf.xml >>> cat(sample_buildout, 'etc', 'zodb_conf.xml') %import relstorage <zodb Users> cache-size 100000 database-name Users pool-size 60 <relstorage Users> <mysql> # This comment preserves whitespace db Users host the_server passwd the_passwd user the_user </mysql> blob-dir /sample-buildout/data/Users.blobs cache-local-dir /sample-buildout/var/caches/data_cache/Users.cache cache-local-mb 300 cache-prefix Users commit-lock-timeout 60 keep-history false name Users pack-gc false shared-blob-dir false </relstorage> </zodb> <zodb Sessions> cache-size 100000 database-name Sessions pool-size 60 <relstorage Sessions> <mysql> # This comment preserves whitespace db Sessions host the_server passwd the_passwd user the_user </mysql> blob-dir /sample-buildout/data/Sessions.blobs cache-local-dir /sample-buildout/var/caches/data_cache/Sessions.cache cache-local-mb 300 cache-prefix Sessions commit-lock-timeout 60 keep-history false name Sessions pack-gc false shared-blob-dir false </relstorage> </zodb> >>> cat(sample_buildout, 'etc', 'zeo_uris.ini') [ZODB] uris = /sample-buildout/etc/zodb_conf.xml#users /sample-buildout/etc/zodb_conf.xml#sessions
可以在配方级别和以存储名称命名的部分中进行许多配置(与zeo配方不同,前面有配方名称,后面有'_storage_opts'后缀),但一些设置只能在配方或环境部分进行配置。
- enable-persistent-cache
默认为true。
- cache-servers
已弃用。要使用的memcache服务器的列表。可以在配方或环境级别进行配置。
- blob-cache-size
默认为无大小限制。
>>> write(sample_buildout, 'buildout.cfg', ... """ ... [buildout] ... extends = deployment.cfg ... parts = directories relstorage ... ... [environment] ... sql_user = the_user ... sql_host = the_server ... sql_passwd = the_passwd ... ... [relstorage] ... recipe = nti.recipes.zodb:relstorage ... storages = users sessions ... compress = none ... pack_gc = true ... commit_lock_timeout = 10 ... pool_timeout = 42s ... ... [relstorage_users_storage_opts] ... cache_size = 42 ... cache_local_mb = 2 ... sql_user = custom_user ... """)
>>> print_(system(buildout), end='') Uninstalling relstorage... Installing relstorage. >>> ls(sample_buildout, 'etc') d cron.d d logrotate.d - zeo_uris.ini - zodb_conf.xml >>> cat(sample_buildout, 'etc', 'zodb_conf.xml') %import relstorage <zodb users> cache-size 42 database-name users pool-size 60 pool-timeout 42s <relstorage users> <mysql> # This comment preserves whitespace db users host the_server passwd the_passwd user custom_user </mysql> blob-dir /sample-buildout/data/users.blobs cache-local-dir /sample-buildout/var/caches/data_cache/users.cache cache-local-mb 2 cache-prefix users commit-lock-timeout 10 keep-history false name users pack-gc true shared-blob-dir false </relstorage> </zodb> <zodb sessions> cache-size 100000 database-name sessions pool-size 60 pool-timeout 42s <relstorage sessions> <mysql> # This comment preserves whitespace db sessions host the_server passwd the_passwd user the_user </mysql> blob-dir /sample-buildout/data/sessions.blobs cache-local-dir /sample-buildout/var/caches/data_cache/sessions.cache cache-local-mb 300 cache-prefix sessions commit-lock-timeout 10 keep-history false name sessions pack-gc true shared-blob-dir false </relstorage> </zodb>
配置适配器
默认假设MySQL适配器。使用配方或存储级别的sql_adapter设置来更改此设置。
可以使用sql_adapter_extra_args在<adapter>部分添加额外的配置。这通常用于选择驱动程序。
如果将其更改为postgresql,则将根据sql_*设置构建DSN。可以将sql_adapter_args设置为完全指定<adapter>部分的内容(这将禁用sql_adapter_extra_args)。
>>> write(sample_buildout, 'buildout.cfg', ... """ ... [buildout] ... extends = deployment.cfg ... parts = directories relstorage ... ... [environment] ... sql_user = the_user ... sql_host = the_server ... sql_passwd = the_passwd ... ... [relstorage] ... recipe = nti.recipes.zodb:relstorage ... storages = users sessions ... compress = none ... sql_adapter = postgresql ... sql_adapter_extra_args = ... driver gevent psycopg2 ... ... [relstorage_users_storage_opts] ... sql_adapter = sqlite3 ... sql_adapter_extra_args = ... driver gevent sqlite3 ... """)>>> print_(system(buildout), end='') Uninstalling relstorage... Installing relstorage. >>> ls(sample_buildout, 'etc') d cron.d d logrotate.d - zeo_uris.ini - zodb_conf.xml >>> cat(sample_buildout, 'etc', 'zodb_conf.xml') %import relstorage <zodb users> cache-size 100000 database-name users pool-size 60 <relstorage users> <sqlite3> # This comment preserves whitespace data-dir /sample-buildout/data/relstorage_users_storage driver gevent sqlite3 </sqlite3> blob-dir /sample-buildout/data/users.blobs cache-local-dir /sample-buildout/var/caches/data_cache/users.cache cache-local-mb 300 cache-prefix users commit-lock-timeout 60 keep-history false name users pack-gc false shared-blob-dir true </relstorage> </zodb> <zodb sessions> cache-size 100000 database-name sessions pool-size 60 <relstorage sessions> <postgresql> # This comment preserves whitespace driver gevent psycopg2 dsn dbname='sessions' user='the_user' password='the_passwd' host='the_server' </postgresql> blob-dir /sample-buildout/data/sessions.blobs cache-local-dir /sample-buildout/var/caches/data_cache/sessions.cache cache-local-mb 300 cache-prefix sessions commit-lock-timeout 60 keep-history false name sessions pack-gc false shared-blob-dir false </relstorage> </zodb>
其他文件
如果将配方中的 write-zodbconvert 设置为 true,则将生成一组配置文件,用于使用 zodbconvert 将 RelStorage 和 FileStorage 之间的转换。
>>> write(sample_buildout, 'buildout.cfg', ... """ ... [buildout] ... extends = deployment.cfg ... parts = directories relstorage ... ... [environment] ... sql_user = the_user ... sql_host = the_server ... sql_passwd = the_passwd ... ... [relstorage] ... recipe = nti.recipes.zodb:relstorage ... storages = users ... compress = none ... write-zodbconvert = true ... """)>>> print_(system(buildout), end='') Uninstalling relstorage... Installing relstorage. >>> ls(sample_buildout, 'etc') d cron.d d logrotate.d d relstorage - zeo_uris.ini - zodb_conf.xml >>> ls(sample_buildout, 'etc', 'relstorage') - users_from_relstorage_conf.xml - users_to_relstorage_conf.xml
ZEO
可以使用 zeo 配方来创建 ZEO 客户端和 ZEO 服务器的配置。这仅适用于个人或测试环境。
选项
与 relstorage 配方一样,它需要一个或多个存储。可以在 zeo 部分设置选项,以便应用于所有存储,在以存储命名的部分中配置服务器,或在以客户端命名的部分中配置客户端。请注意,客户端也会从服务器继承配置选项。
- pack-gc
默认为 false。这只能在配方部分设置。
>>> write(sample_buildout, 'buildout.cfg', ... """ ... [buildout] ... extends = deployment.cfg ... parts = directories zeo ... ... [zeo] ... recipe = nti.recipes.zodb:zeo ... storages = Users Sessions ... compress = none ... pack-gc = true ... ... [users_storage_opts] ... pack-gc = true ... pool_size = 25 ... ... [sessions_client_opts] ... cache-size = 42 ... """)
并且它创建几个配置文件
>>> print_(system(buildout), end='') Uninstalling relstorage... Installing zeo. >>> ls(sample_buildout, 'etc') d cron.d d logrotate.d - zeo-zdaemon.conf - zeo-zeo.conf - zeo_uris.ini - zodb_conf.xml - zodb_file_uris.ini
标准文件
与 RelStorage 一样,创建了 zodb_conf.xml 和 zeo_uris.ini 文件(由于测试中的一个问题,URI 中缺少了 zconfig:// 前缀)
>>> cat(sample_buildout, 'etc', 'zodb_conf.xml') <zodb Users> cache-size 100000 database-name Users pool-size 25 <zeoclient> blob-dir /sample-buildout/data/Users.blobs name Users server /sample-buildout/var/zeosocket shared-blob-dir true storage 1 </zeoclient> </zodb> <zodb Sessions> cache-size 42 database-name Sessions pool-size 60 <zeoclient> blob-dir /sample-buildout/data/Sessions.blobs name Sessions server /sample-buildout/var/zeosocket shared-blob-dir true storage 2 </zeoclient> </zodb> >>> cat(sample_buildout, 'etc', 'zeo_uris.ini') [ZODB] uris = /sample-buildout/etc/zodb_conf.xml#users /sample-buildout/etc/zodb_conf.xml#sessions
zdaemon.conf
此文件以构建出部分的名称为前缀,是使用 zdaemon 命令的 -C 选项运行的 ZEO 服务器的配置。
>>> cat(sample_buildout, 'etc', 'zeo-zdaemon.conf') <runner> daemon on directory /sample-buildout/var program /sample-buildout/bin/runzeo -C /sample-buildout/etc/zeo-zeo.conf socket-name /sample-buildout/var/zeo-zdaemon.sock transcript /sample-buildout/var/log/zeo-zeo.log user user </runner> <BLANKLINE> <eventlog> <logfile> path /sample-buildout/var/log/zeo-zeo.log </logfile> </eventlog>
zeo-conf.conf
这是实际的 ZEO 服务器配置,同样以前缀为部分名称。
>>> cat(sample_buildout, 'etc', 'zeo-zeo.conf') <zeo> address /sample-buildout/var/zeosocket </zeo> <BLANKLINE> <filestorage 1> blob-dir /sample-buildout/data/Users.blobs pack-gc true path /sample-buildout/data/Users.fs </filestorage> <BLANKLINE> <filestorage 2> blob-dir /sample-buildout/data/Sessions.blobs pack-gc true path /sample-buildout/data/Sessions.fs </filestorage> <BLANKLINE> <eventlog> <logfile> format %(asctime)s %(message)s level DEBUG path /sample-buildout/var/log/zeo.log </logfile> </eventlog>
zodb_file_uris.ini
有意未记录。仅限专家使用。
项目详情
nti.recipes.zodb-1.1.0.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 7b92a5b20336010e245779fa28ea456b4cfec2577e7386db8d7acbb6ff45c89d |
|
MD5 | 0bf2d4864e64179b9366faf3b08e8827 |
|
BLAKE2b-256 | 2880d33c4944ffc2413d15e2ed1e1f1c5f49dc8ac254e1fcdf88cd6ba14f2465 |
nti.recipes.zodb-1.1.0-py2.py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 7a958763f88d8c81a2e96f93fe9f4a1531576ba9c9b1f2aaa884992a1e24458f |
|
MD5 | eccf15788364990b3e40a37ee8b58e8f |
|
BLAKE2b-256 | 44562e8c15ca4a206e54d7478a6bac3f2030407516371df41e049ddd985866b0 |