Mysql Django get_或_create带有主/从写/读配置

Mysql Django get_或_create带有主/从写/读配置,mysql,django,database-replication,Mysql,Django,Database Replication,我有一个django应用程序与replications server一起工作,并配置为将主应用程序用作只读,将从应用程序用作只读。但是,当我开始监控数据库负载时,我发现主服务器有很多读取流量,经过一些调查后,我发现: def get_or_create(self, **kwargs): # Update kwargs with the related object that this # ForeignRelatedObjectsDescriptor knows about.

我有一个django应用程序与replications server一起工作,并配置为将主应用程序用作只读,将从应用程序用作只读。但是,当我开始监控数据库负载时,我发现主服务器有很多读取流量,经过一些调查后,我发现:

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_或_create所需的读写操作,而不是像预期的那样使用从机来读,使用主机来“创建”,有人遇到过这个问题吗?除了重新编写get\u或\u create函数之外,还有其他方法可以修复它吗?

在主设备和从设备之间拆分
get\u或\u create
,这是一个非常糟糕的主意。这将导致比赛状态。您将获得重复项或数据库抛出重复项错误


问题在于复制延迟。使用标准的MySQL主从设置,复制是异步的。这意味着,奴隶将拥有主人所做的一切,但有一个滞后。这种滞后通常很低,但总是存在的。

想知道用一个主设置来解决这一问题的最佳方法是什么。是否有某种解决方法,或者在这种设置中复制通常是如何处理的?也就是说,有什么更好的方法?看起来它可能会解决这个问题,但它会强制重新读取该http请求的写表