访问时间短是成本与收益的函数。首先你需要识别,多低是低。您是否需要应用程序的整体响应时间为 100 毫秒?还是1s?
一旦你这样做了,你就可以绘制出不同的成本。
Total time taken = time for request + //across internet
processing by web app + request for data +
preparing the response + response back to client.
如果您想要的延迟是 100 毫秒,那么无论您的服务器有多快,它都很有可能无法完成,这很简单,因为网络流量可能需要太长时间。
您需要分析数据集。查询 1000 个文档不同于查询 10 亿个文档。您需要计算索引占用的大小,以及它是否在 RAM 中。如果索引不在 RAM 中,您的访问速度会很慢。
MongoDB配置
Mongodb 可以在集群中工作,具有自动同步(立即或延迟,这是可配置的)和自动故障转移(或手动,这也是可配置的)。如果您的数据集很大,它还支持分片,因此请求被发送到实际包含数据的服务器。
同样,您需要查看您的应用服务器并弄清楚组件的慢/快程度才能获得保证的响应时间。
根据您提供的信息,这是我可以给出的详细回复。
分析然后优化
如果您的请求中有 80% 来自中东,那么您应该首先为他们快速处理。使用相同的原理,您需要找出响应时间最慢的组件,并改进它们。为此,您需要收集数据。
聚类
在一个大陆或跨大陆设置集群,将帮助您提供冗余、自动故障转移(如果已配置)和负载平衡(取决于您的配置方式)。如果您有大量数据,请考虑分片。
考虑通过文档进行复制和分片。
示例服务器设置
假设您想要有 10 个复制因子为 3 的分片,即您的数据被分成 10 台服务器,并且每台服务器实际上是 3 台服务器的副本集(用于可用性和故障转移),即副本集中的每台服务器都包含重复数据。
这里符号 s1p1 表示,shard1 - 主 1 和 s1s1 是 shard 1 辅助 1 等等
s1p1 s2p1 ... s10p1
s1s1 s2s1 ... s10s1
s1s2 s2s2 ... s10s2
分片 1-10 划分数据,其中每个分片大约保留总数的 1/10。每个分片由一个副本集组成,该副本集具有一个主副本和 2 个辅助副本。如果需要更多冗余,可以增加此值。尽量保持奇数,因此在选举期间会有决胜局。如果您只想拥有 2 个数据副本,那么您还可以引入一个“Arbiter”来打破平局。
您可以分析您的查询,并选择一个分片键,以便它们转到最近的服务器或为该区域提供服务的服务器。您很可能需要进行某种分析来优化这一点。
希望能帮助到你。