App托管在北美、欧洲和亚洲。所有地区都有相同的应用程序实例,但连接到应用程序所在地区的阿特拉斯中托管的不同MongoDB数据库。
每个地区的应用程序连接到不同的数据库,因为如果应用程序不在与数据库本身相同的地区托管,则数据库请求将需要很长时间。
现在最大的问题是,如果用户在北美的实例中注册,他的用户记录将存储在北美的数据库中。因此,如果同一用户稍后尝试在欧洲或亚洲实例中登录,他将不会成功,因为这些数据库没有该用户的记录。
拥有一个对全球所有地区都快速的集中式数据库的最佳实践是什么?用阿特拉斯能做到吗?是否可以在不同地域托管一个集群的副本集?
欢迎所有的建议和建议。
发布于 2021-11-01 12:24:58
如果我理解正确的话,你想要低的全局延迟,同时保持你的数据的完整性,无论你的用户从哪里查询。
由于您目前使用的是Atlas,我强烈建议您切换到具有本地只读节点的Global Cluster。原因如下:
关于群集的完整性的
location
。不再需要管理多个集群,location
将用于地理分布。您还需要另一个分片密钥才能进行正确的分发,但这不是问题。用户从区域创建文档时的
location
字段指明它所属的区域。当用户从他创建的文档的区域中读取时为
location
字段来读取,请求将被发送到正确的区域。但是,如果用户是从不同的区域请求,那么最终会出现高延迟问题。请参阅下面的正确解决方案。当用户从不同区域读取时出现
nearest
,并指明数据的location
。您的应用程序将始终从与本地只读节点相同(或最近)的区域获取数据的复制版本。在设置群集时,您需要确保切换以下屏幕截图中的选项。
https://stackoverflow.com/questions/69690698
复制