【问题标题】:Sync two Mongodb Databases and have the client connect to the closest one同步两个 Mongodb 数据库并让客户端连接到最近的一个
【发布时间】:2023-03-04 12:58:02
【问题描述】:

我使用 mongodb 作为我的游戏服务器的数据库。当我启动它们时,它们只绑定到一个区域,我在该区域(印度)使用了 Mongodb Atlas 的免费层,即使在高负载下也能以大约 20 毫秒的延迟完美运行。

现在,当我尝试扩展我的服务器并到达美国东部等其他地区时,延迟会跃升至 500 毫秒。

有没有一种方法可以在我的印度和美国实例上打开两个 mongodb 服务器,它们始终彼此完全同步,而游戏服务器进程将只使用 localhost 连接到特定的副本。我正在使用 pyMongo。

玩家与数据库没有连接,是游戏服务器进程管理它

【问题讨论】:

    标签: mongodb pymongo


    【解决方案1】:

    有没有一种方法可以在我的印度和美国实例上打开两个 mongodb 服务器,它们始终彼此完全同步,而游戏服务器进程将只使用 localhost 连接到特定副本。

    假设您使用的是副本集,我相信您最接近实现 读取要求的方法是:

    1. 使用写入关注点 w=(部署中的节点数)执行所有写入,如果您有两台服务器,则使用 w=2。
    2. 在读取偏好=最近且读取关注=多数的情况下执行读取。

    我说“最接近”是因为我怀疑即使 w=(部署中的节点数),辅助节点上的 read concern=majority 也可能返回陈旧数据,因为我认为多数提交点必然落后于每个辅助节点时的点提交每个文档。为保证您正在读取当前数据,您必须从主数据库读取。

    请注意,这样的设置有(至少)两个额外的主要缺点:

    1. 如果任何服务器不可用,您的应用程序将无法将任何数据写入数据库。
    2. 每次写入都会等待部署中的所有服务器存储它,因此所有写入都会很慢。

    实现读取和写入的相同要求在物理上是不可能的。 (本质上,您希望能够在 20 毫秒内在印度编写文档,并使其在美国“立即”可用,即能够在 20 毫秒后在美国检索它,但至少需要 500 毫秒从印度传输到美国的数据。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-27
      • 2018-07-05
      • 1970-01-01
      • 2014-06-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多