从mongod文档中,我知道在选择shard键时,键应该具有很高的基数,所以写操作被分发到不同的碎片(一种写标度)。但是对于查询隔离,如果将查询路由到单个碎片服务器(一个mongos实例),将获得更好的查询性能。
对于写缩放,选择一个具有高基数的切分键似乎很容易。但是对于查询隔离,当我不知道详细的切分算法时,如何选择一个shard键将查询路由到一个切分的最大程度?
发布于 2013-12-16 12:35:15
文档通过后门提供了一个答案。正如你提到的,对于碎片:
mongos实例将查询路由到尽可能少的碎片的碎片键。它将深入到更多的细节中,这些细节与你要寻找的内容相关。
mongos提供优化。如果不这样做,它将查询所有的碎片。这里最简单的好处是在所有查询中都包含切分键,即使您不需要查询中的数据。这允许您获得优化的好处,而不必重写查询系统来包含集群元数据。
当然,您可以编写使用集群元数据的查询优化器。很有可能获取特定集合中的块数,甚至得到块边界。您必须跟踪集合中块的状态,因为它们会不时更新,但它将允许您编写每次只命中一个碎片的查询。
然而,这是大量的工作,你得到的收益可能不值得额外的工程努力。只有你才能知道这是否是一个值得去追求的优化。
https://dba.stackexchange.com/questions/55084
复制相似问题