Mongodb 选择Shard密钥的建议

Mongodb 选择Shard密钥的建议,mongodb,c#-4.0,sharding,Mongodb,C# 4.0,Sharding,我需要在mongodb分片集群中选择分片密钥的帮助。 场景 我的应用程序是基于.NETCore2.1构建的。它实际上是阅读网站并更新数据库中的详细信息。我已经列出了大约100万个需要爬网的网站。应用程序只会找到数据库中不存在的新页面,并将它们保存到数据库中 群集和服务器详细信息 我在dell r820机器上有3个碎片(一个主碎片和两个辅助碎片)。每台机器有512gb的RAM。我在4台dell r620机器上运行我的应用程序,这是它的多线程应用程序 数据库结构: 我主要有两个数据库,一个用于所有

我需要在mongodb分片集群中选择分片密钥的帮助。
场景 我的应用程序是基于.NETCore2.1构建的。它实际上是阅读网站并更新数据库中的详细信息。我已经列出了大约100万个需要爬网的网站。应用程序只会找到数据库中不存在的新页面,并将它们保存到数据库中

群集和服务器详细信息 我在dell r820机器上有3个碎片(一个主碎片和两个辅助碎片)。每台机器有512gb的RAM。我在4台dell r620机器上运行我的应用程序,这是它的多线程应用程序

数据库结构: 我主要有两个数据库,一个用于所有主页列表,一个用于页面

主页:

_身份证

URL(分片键)

页面:

_身份证

URL(切分键和唯一索引以避免集合中的重复条目)

主页URL

AlreadyRead(索引字段)

因此,应用程序读取主页并将主页中的内部页面保存到页面数据库中。应用程序的另一部分从Pages数据库获取页面,其中AlreadyRead为0,将其更新为1,并对其进行爬网以将在该页面上找到的其他页面保存到数据库中。但随着数据大小的增长,这一部分需要时间,我认为这是因为将shard键设置为URL字段时出错,并且命令将在所有shard上执行(我假设)。我正在保存没有http或www的URL。 如果我将HomePageURL设置为shard键,它会在集群之间不均匀地分布数据(我已经体验过,一个集群上有92%的数据)


长话短说,根据上述场景,什么是最好的切分键?或者我必须选择复合分片键吗?

如果您可以共享索引详细信息,那就太好了,因为它们可能与您的性能问题有关:)AlreadyRead在pagesDB中索引,URL设置为unique index以避免pagesDB中的重复条目