2

你们中的一些人都知道 Django 支持多数据库。这可以通过编写一个 dbrouter 来将写入发送到主数据库并将所有读取发送到从属数据库来实现,但正如Django Docs For Master/Slave Configuration中所述

所描述的主/从配置也有缺陷——它没有提供任何处理复制滞后的解决方案(即,由于写入传播到从属所花费的时间而引入的查询不一致)。它也没有考虑事务与数据库利用策略的交互。

由于写入传播到从属服务器需要时间,我该如何解释复制滞后和查询不一致?有什么我可以为此实现的代码吗?

4

2 回答 2

4

如果您正在写入 MASTER 并立即从 SLAVE 读取,您将始终面临不一致的风险。你可以降低风险,但你永远无法避免它。

尽一切可能来分析、调整和最小化复制延迟将有所帮助。将读取查询延迟到最后可能会有所帮助。但是,如果您打算从不阅读 MASTER 的内容,则无法完全避免。

如果您在典型用法下对复制滞后进行计时,您可以配置django-multidb-router 之类的东西,以便在写入后的指定时间段内从 MASTER 读取。仍然不是 100% 安全,但您可以将其配置为 99.9% 以确保您的设置安全。

于 2013-05-24T19:54:00.777 回答
1

请注意,在 MySQL 5.6 中,他们引入了“半同步”模式(http://dev.mysql.com/doc/refman/5.6/en/replication-semisync.html),当在简单的主从(只有一个从)设置。这避免了这个非常具体的问题,但是您在一致性方面获得的东西会在一些额外的事务时间中丢失。

于 2014-08-06T07:06:33.173 回答