Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MongoDB-使用三个值的复合碎片键_Mongodb_Sharding_Mongodb Query_Cardinality - Fatal编程技术网

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

MongoDB-使用三个值的复合碎片键,mongodb,sharding,mongodb-query,cardinality,Mongodb,Sharding,Mongodb Query,Cardinality,我正在使用MongoDB创建一个存储JSON对象的集合。我被困在碎片部分。 我有一个案例ID、客户ID和集合中每个记录的位置 案例ID是一个10位数字(只有数字,没有字母) CustomerID是客户名称和案例ID的组合 该位置是一个2dsphere值,我希望该位置具有不同的不同值 除此之外,我还记录了客户姓名和案例描述。 我的所有搜索查询都有案例ID、CustomerID或location的搜索条件 在这种情况下,我可以基于这三个值(CaseID、CustomerID和location)创建一

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

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

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

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

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

在这种情况下,我可以基于这三个值(CaseID、CustomerID和location)创建一个复合键吗。我相信这会提供很高的基数,并且很容易检索记录

任何人都可以建议我,如果这是一个好的方法,因为我没有找到一个复合碎片键由三个值组成


谢谢你的时间,如果需要任何信息,请告诉我。如果您的数据集适合单个服务器,则从非分片部署开始。如果需要的话,稍后可以轻松无缝地将其转换为分片集群

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

  • 基数-选择一个不限于少量可能值的分片键,以便MongoDB可以在集群中的分片之间均匀分布数据
  • 写入分配-选择一个在群集中的碎片之间均匀分配写入操作的碎片密钥,以防止任何单个碎片成为瓶颈
  • 查询隔离-选择包含在最频繁查询中的分片密钥,以便这些查询可以有效地路由到保存数据的单个目标分片,而不是广播到所有分片
  • 您提到所有查询都包含案例ID、客户ID或位置,但没有描述您的用例。举个例子,假设您最频繁的查询是:

    • 检索客户案例
    • 检索给定客户的所有案例
    在这种情况下,一个好的切分键候选将是按该顺序排列的(名称、caseID)上的复合切分键(以及相应的复合索引)。考虑是否满足上述标准:

  • 基数-每个文档对切分键都有不同的值,因此基数非常好
  • 写入分发—所有客户的案例都分布在所有碎片上
  • 查询隔离:
    • 要检索特定案例,查询中应包括名称和案例ID。此查询将路由到保存文档的特定碎片
    • 要检索给定客户的所有案例,请在查询中包含名称。因此,此查询包含分片密钥的前缀,因此也将仅有效地路由到包含与查询匹配的文档的特定分片
  • 请注意,不能将地理空间索引用作分片键索引的一部分(如文档所述)。但是,如果使用其他字段作为分片键,您仍然可以在分片集合上创建和使用地理空间索引。例如,使用上面的shard键:

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

    可以找到有关切分关键注意事项的其他文档。

    您可以发布一个文档示例吗。给我一点时间这就是它的结构{“_id”:ObjectId(“4c2210f9f3924d31102bd85a”),“name:“timothyr”,“caseID:“3457712344”,“customerID:“AB345ti”,“location:“144.34,-37.14”,“Description:“我无法登录到我的计算机”}除此之外,CustomerID以AB或AC开头,然后紧跟caseID的前三个字符和name的前两个字符。如果你需要任何信息,请告诉我