访问时间短是成本与收益的函数。首先你需要识别,多低是低。您是否需要应用程序的整体响应时间为 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% 的请求来自中东,那么您应该首先为他们快速处理。使用相同的原理,您需要找出响应时间最慢的组件,并改进它们。为此,您需要收集数据。
聚类
在一个大陆或跨大陆设置集群将帮助您提供冗余、自动故障转移(如果已配置)和负载平衡(取决于您的配置方式)。如果您有大量数据,请考虑分片。
考虑查看replication 和sharding 的文档。
示例服务器设置
假设您想要 10 个复制因子为 3 的分片,即您的数据分布在 10 台服务器上,每台服务器实际上是 3 台服务器的副本集(用于可用性和故障转移),即副本集中的每台服务器都包含重复的数据。
这里的符号 s1p1 表示,shard1 - primary 1,s1s1 是 shard 1 secondary 1,依此类推
s1p1 s2p1 ... s10p1
s1s1 s2s1 ... s10s1
s1s2 s2s2 ... s10s2
分片 1-10 划分数据,其中每个分片大约保留总数的 1/10。每个分片由一个副本集组成,该副本集具有一个主副本和 2 个辅助副本。如果需要更多冗余,可以增加此值。尽量保持奇数,因此在选举期间会有决胜局。如果您只想拥有 2 个数据副本,那么您还可以引入一个“Arbiter”来打破平局。
您可以分析您的查询,并选择一个分片键,以便它们转到最近的服务器,或服务于该区域的服务器。您很可能需要进行某种分析来优化这一点。
希望对你有帮助。