gpt4 book ai didi

MongoDB-使用三个值的复合分片键

转载 作者:可可西里 更新时间:2023-11-01 09:56:28 25 4
gpt4 key购买 nike

我正在创建一个使用 MongoDB 存储 JSON 对象的集合。我被困在分片部分。对于集合中的每条记录,我都有一个案例 ID、客户 ID 和位置

案例 ID 是一个 10 位数字(只有数字,没有字母)。

CustomerID 是客户名称和案例 ID 的组合。

位置是一个 2dsphere 值,我期望位置具有不同的不同值。

除此之外,我还记录了客户名称和案例描述。我所有的搜索查询都有案例 ID、客户 ID 或位置的搜索条件。

在这种情况下,我可以根据所有这三个值(CaseID、CustomerID 和位置)创建复合键吗?我相信这提供了高基数并且易于检索记录。

任何人都可以建议我这是否是一种好方法,因为我没有找到包含三个值的复合分片键。

感谢您的宝贵时间,如果您需要任何信息,请告诉我

最佳答案

首先要考虑的是是否需要分片。如果您的数据集适合单个服务器,则从非分片部署开始。如果需要,稍后可以轻松无缝地将其转换为分片集群。

假设您确实需要分片,您对分片键的选择应基于以下标准:

  1. 基数 - 选择一个不限于少数可能值的分片键,以便 MongoDB 可以在集群中的分片之间均匀分布数据。
  2. 写分布 - 选择一个分片键,在集群中的分片之间均匀分布写操作,以防止任何单个分片成为瓶颈。
  3. 查询隔离 - 选择包含在最频繁查询中的分片键,以便这些查询可以有效地路由到保存数据的单个目标分片,而不是广播到所有碎片。

您提到您的所有查询都包含案例 ID、客户 ID 或位置,但没有描述您的用例。举个例子,假设您最常查询的是:

  • 检索客户案例
  • 检索给定客户的所有案例

在这种情况下,一个好的候选分片键将是 (name, caseID) 上的那个顺序的复合分片键(以及相应的复合索引)。考虑这是否满足上述条件:

  1. 基数 - 每个文档都有不同的分片键值,因此基数非常好。
  2. 写入分布 - 所有客户的案例分布在所有分片中。
  3. 查询隔离:
    • 要检索特定案例,查询中应包含姓名和案例 ID。此查询将路由到保存文档的特定分片。
    • 要检索给定客户的所有案例,请在查询中包含名称。因此,此查询包含分片键的前缀,因此也将有效地仅路由到包含与查询匹配的文档的特定分片。

请注意,您不能将地理空间索引用作分片键索引的一部分(如记录 here )。但是,如果使用一些其他字段作为分片键,您仍然可以在分片集合上创建和使用地理空间索引。因此,例如,使用上面的分片键:

  • 同时包含客户名称的地理空间查询将以相关分片为目标。
  • 不包含客户名称的地理空间查询将广播到所有分片(“分散/聚集”查询)。

可以找到有关分片键注意事项的其他文档 here .

关于MongoDB-使用三个值的复合分片键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20461724/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com