0

我正在为我的组织构建一个基于 Web 的系统,使用 Mongo DB,我浏览了 mongo db 提供的文档并得出以下结论:

find: Cannot pull data from sub array.
group: Cannot work in sharded environment.
aggregate:Best for sub arrays, but has performance issue when data set is large.
Map Reduce : Too risky to write map and reduce function.

因此,如果有人可以在具有分片集群的生产环境中帮助我使用处理子数组文档的最佳方法。

例子:

{"testdata":{"studdet":[{"id","name":"xxxx","marks",80}.....]}}

现在我的“studdet”是一个巨大的集合,包含 1000 多个,每个文档的行,

所以假设我的查询是:

"Find all the "name" from "studdet" where marks is greater than 80"

它肯定会是一个聚合查询,所以在这种情况下使用聚合是否可行,因为“find”无法做到这一点,“group”在分片环境中不起作用,所以如果我使用聚合,性能会怎样影响,我大部分时间都需要调用这个查询。

4

1 回答 1

0

请看一下: http ://docs.mongodb.org/manual/core/data-modeling/ 和 http://docs.mongodb.org/manual/tutorial/model-embedded-one-to-many-relationships -between-documents/#data-modeling-example-one-to-many

这些文档描述了在 MongoDB 中创建良好文档模式的决策。这是 MongoDB 中最难做的事情之一,也是最重要的事情之一。它会影响你的表现等。在你的情况下,运行一个包含一系列成绩的学生集合的数据库看起来是最好的选择。{_id:, ...., grades:[{type:”test”,grade:80},...]} 一般来说,给定您的样本数据集,聚合框架是最佳选择。在大多数情况下,聚合框架比 map reduce 更快(当然在执行速度方面,map reduce 是 C++ vs javascript)。
如果您的数据工作集变得如此之大,您必须进行分片,那么聚合和其他所有内容都会变慢。但是,不会比将所有内容放在具有大量页面错误的单台机器上更慢。通常,您需要一个比现代计算机上可用的 RAM 更大的工作集,以便分片是正确的方法,以便您可以将所有内容保存在 RAM 中。(此时,Mongo 的商业支持合同将比硬件成本低,其中包括对模式设计的广泛帮助。)

如果您需要其他任何东西,请随时询问。

最好的,查理

于 2013-09-16T15:09:46.500 回答