首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django get_or_create,支持主/从读写配置

问Django get_or_create,支持主/从读写配置
EN

Stack Overflow用户
提问于 2012-04-20 04:11:45
回答 1查看 1.3K关注 0票数 2

我有一个使用复制服务器的django应用程序,并配置为主服务器为只写,从服务器为只读。但当我开始监控我的数据库负载时,我发现主服务器有大量的读取流量,经过一些调查后,我发现:

代码语言:javascript
复制
def get_or_create(self, **kwargs):
    # Update kwargs with the related object that this
    # ForeignRelatedObjectsDescriptor knows about.
    kwargs.update({rel_field.name: instance})
    db = router.db_for_write(rel_model, instance=instance)
    return super(RelatedManager, self.db_manager(db)).get_or_create(**kwargs)
get_or_create.alters_data = True

因此,从代码中我认为它使用写数据库进行get_or_create所需的读写操作,而不是像预期的那样使用从数据库读取和主数据库“创建”,有人遇到过这个问题吗?除了重写get_or_create函数之外,还有其他方法可以修复它吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-20 04:33:18

在主从之间拆分get_or_create是一个非常糟糕的主意。这将导致竞争条件。您将获得重复项或数据库抛出重复键错误。

问题在于复制延迟。使用标准的MySQL主从设置,复制是异步的。这意味着 consistency,slave将拥有master所做的一切,但会有延迟。这种延迟通常很低,但它总是存在的。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10235986

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档