我正在创建一个使用MongoDB存储JSON对象的集合。我被困在Sharding部分。 我有一个案例ID,客户ID和集合中每个记录的位置
案例ID是一个10位数字(只有数字,没有字母)。
CustomerID是客户名称和案例ID的组合。
该位置是一个2dsphere值,我期待一个不同的值的位置。
除此之外,我还有记录的客户名称和案例描述。 我的所有搜索查询都有案例ID,客户ID或位置的搜索条件。
鉴于这种情况,我可以基于所有这三个值(CaseID,CustomerID和位置)创建复合键。我相信这样可以提供高基数并且易于检索记录。
任何人都可以建议我,如果这是一个很好的方法,因为我没有找到包含三个值的复合分片键。
感谢您的时间,如果您需要任何信息,请告知我们
答案 0 :(得分:13)
首先要考虑的是是否需要进行分片。如果您的数据集适合单个服务器,则从非部署部署开始。如果需要,稍后可以轻松无缝地将其转换为分片群集。
假设您确实需要进行分片,您选择的分片键应基于以下标准:
您提到所有查询都包含案例ID,客户ID或位置,但未描述您的用例。举个例子,我们假设您最常见的查询是:
在这种情况下,一个好的分片键候选者将是该命令(name,caseID)上的复合分片键(以及相应的复合索引)。考虑这是否符合上述标准:
请注意,您不能将地理空间索引用作分片键索引的一部分(如文档here所述)。但是,如果使用分片键的其他字段,则仍可以在分片集合上创建和使用地理空间索引。例如,使用上面的分片键:
可以找到有关分片键注意事项的其他文档here。