Django的循环多数据库路由器。
django-multidb-router的Python项目详细描述
`` multidb``提供两个django数据库路由器,可用于主副本数据库
部署。
在设置中定义“副本数据库”。它应该是
数据库别名的列表,可以在``databases``::
databases={
‘default':{…},
‘shadow-1':{…},
‘shadow-2':{…},
}
replica-u databases=['shadow-1',“shadow-2”]
然后将“multidb.replicarouter”放入数据库路由器::
database-routers=(“multidb.replicarouter”,)
将以循环方式选择副本数据库。
使用
`` multidb.get_replica``::
接收写操作的主数据库与其复制到副本的
之间的延迟足以导致最终用户不一致。
例如,假设一个场景的复制延迟为1秒。如果用户
发表论坛帖子(到主论坛),然后在500毫秒后重定向到完全呈现的
视图(从副本),则视图将失败。如果这是应用程序中的问题
,请考虑使用“multidb.pinningreplicarouter”。这个
路由器与``multidb.middleware.pinningroutermiddleware``
结合使用,以确保在写入``default``数据库之后,将来从
同一用户代理读取的数据将定向到“默认”数据库,读取时间长度可配置
。
``都是写的。您可以使用“multidb.db\u write”装饰符指示任何视图写入数据库。这将导致与请求相同的结果,例如“post”。
这不会导致在此
请求中使用“默认”数据库,而只会在下一个请求中使用。
配置
==
若要使用“固定复制路由器”,请将其放入
设置中的“数据库路由器”:
它必须在执行数据库写入的任何其他中间件
之前列出::
middleware类=(
'multidb.middleware.pinningroutermiddleware',
…此处有更多的中间件…
)
``pinningroutermiddleware``将cookie附加到刚刚写入的任何用户代理。cookie的过期时间应设置为大于复制延迟。默认情况下,它的值是保守的15秒,但如果需要更改cookie的名称,可以对其进行如下调整:
multidb_pinning_seconds=5
,使用``multidb_pinning_cookie`
设置::
``use_primary_db`
====
``multidb.pinning.use_primary_db``既是上下文管理器,也是
包装代码的装饰器,以使用主数据库。您可以将其用作上下文管理器:
/>def func(*args,**kw):
“接触主数据库。”
django
和python使用tox:
$pip安装tox
$tox
部署。
在设置中定义“副本数据库”。它应该是
数据库别名的列表,可以在``databases``::
databases={
‘default':{…},
‘shadow-1':{…},
‘shadow-2':{…},
}
replica-u databases=['shadow-1',“shadow-2”]
然后将“multidb.replicarouter”放入数据库路由器::
database-routers=(“multidb.replicarouter”,)
将以循环方式选择副本数据库。
使用
`` multidb.get_replica``::
接收写操作的主数据库与其复制到副本的
之间的延迟足以导致最终用户不一致。
例如,假设一个场景的复制延迟为1秒。如果用户
发表论坛帖子(到主论坛),然后在500毫秒后重定向到完全呈现的
视图(从副本),则视图将失败。如果这是应用程序中的问题
,请考虑使用“multidb.pinningreplicarouter”。这个
路由器与``multidb.middleware.pinningroutermiddleware``
结合使用,以确保在写入``default``数据库之后,将来从
同一用户代理读取的数据将定向到“默认”数据库,读取时间长度可配置
。
``都是写的。您可以使用“multidb.db\u write”装饰符指示任何视图写入数据库。这将导致与请求相同的结果,例如“post”。
这不会导致在此
请求中使用“默认”数据库,而只会在下一个请求中使用。
配置
==
若要使用“固定复制路由器”,请将其放入
设置中的“数据库路由器”:
它必须在执行数据库写入的任何其他中间件
之前列出::
middleware类=(
'multidb.middleware.pinningroutermiddleware',
…此处有更多的中间件…
)
``pinningroutermiddleware``将cookie附加到刚刚写入的任何用户代理。cookie的过期时间应设置为大于复制延迟。默认情况下,它的值是保守的15秒,但如果需要更改cookie的名称,可以对其进行如下调整:
multidb_pinning_seconds=5
,使用``multidb_pinning_cookie`
设置::
``use_primary_db`
====
``multidb.pinning.use_primary_db``既是上下文管理器,也是
包装代码的装饰器,以使用主数据库。您可以将其用作上下文管理器:
/>def func(*args,**kw):
“接触主数据库。”
django
和python使用tox:
$pip安装tox
$tox