所以我问了这个问题:
但是直到我阅读了答案并进行了更多研究,我才知道得足够多。对于同时询问约 100 个查询的快节奏系统,使用 Map-reduce 或分片会更好吗?分片将在集群中取代我的数据,看起来它本质上是在做 map-reduce 或排序。如果我要对此类查询使用 map-reduce,我是否也应该使用集群这样做?如果是这样,从一台 Mongo 服务器开始,然后使用集群并将 map-reduce 任务分发到集群有多容易?还是我对我认为我需要完成的事情感到困惑?
所以我问了这个问题:
但是直到我阅读了答案并进行了更多研究,我才知道得足够多。对于同时询问约 100 个查询的快节奏系统,使用 Map-reduce 或分片会更好吗?分片将在集群中取代我的数据,看起来它本质上是在做 map-reduce 或排序。如果我要对此类查询使用 map-reduce,我是否也应该使用集群这样做?如果是这样,从一台 Mongo 服务器开始,然后使用集群并将 map-reduce 任务分发到集群有多容易?还是我对我认为我需要完成的事情感到困惑?
将 map-reduce 与分片进行比较尚不清楚您的意思。但简短的回答是:分片。
一般来说,您设计了 map-reduce 查询,您不希望一次执行 100 个 map-reduce 查询 - 您只会重载 mongo,因为这实际上意味着 100 个完整的集合扫描都同时运行。
如果您有现有 map-reduce 查询之一的示例 - 请将其添加到您的问题中。
关于分片,这一切都取决于您用于分片键的内容。
例如,如果您在用户名上对用户集合进行分片,
将导致 mongos 将查询发送到所有分片并将结果集(智能地)合并在一起。将分片键添加到查询中:
将使 mongos 可以选择一次与更少的 mongod 交谈。
一个更好的例子,如果您查询:
mongos 会将查询发送到其分片键指示它们可以包含答案的分片,很可能只有一个服务器,从而导致快速查询并且 mongos 没有额外的负载。
也许上面的例子对你来说不是新闻。
您现在发送到 mongo 的查询与您用来发送到分片数据库的语法相同。唯一不同的是(以前)分析要分片的键,以便您可以在必要时修改查询以合并分片键,从而使 mongos 能够像代理而不是聚合器一样工作。
一个糟糕的分片键,或者根本没有在您生成的查询中利用分片,将导致 mongos 需要查询所有 mongod 服务器以获取所有查询,从而导致高负载和低性能。