【问题标题】:Basic database (MongoDB) performance question基本数据库(MongoDB)性能问题
【发布时间】:2011-05-22 20:45:51
【问题描述】:

我正在构建一个带有目录系统的书签存储网络应用程序。 我已经设置了这些集合:

  • 路径
    ---> 目录(嵌入文档)
    ---> 链接(嵌入文档)

  • 用户

所以性能方面,我应该:
- 将用户 ID 添加到创建的路径
- 将整个 Paths 集合嵌入到特定用户中

我想选择选项 2,但是是的,我不知道...

编辑:
我也在考虑让整个界面ajaxified。因此,这意味着我将通过 ajax 从特定路径(来自登录用户)加载目录和链接。这样,它更快,我不必触摸用户集合。也许这会改变一些事情?

就像我在 cmets 中所说的那样,整个数据库中有 1 个巨大的集合似乎有点奇怪。对吧?

【问题讨论】:

    标签: ruby-on-rails ruby mongodb mongoid database


    【解决方案1】:

    嗯,mongoDB 的主要目的是支持冗余数据。我会推荐 second 选项更好,因为在您的场景中,我觉得如果您将路径集合嵌入到特定用户中,然后使用只有一个查询,您可以获得有关用户以及与路径集合相关的所有数据。

    如果您遵循第一个选项,那么您必须触发两个单独的查询以获取所有数据,这将在一定程度上增加您的工作量。

    由于 mongodb 将数据带入 RAM,因此在从一个集合中获取数据后,您可以将其存储到游标中,然后从该游标数据中您可以从另一个集合中获取数据。因此,如果我们从性能方面来看,我认为这不会有太大影响。

    【讨论】:

    • 感谢您的回答。似乎有点奇怪,数据库中只有一个巨大的集合。不是吗?哦,还有其他事情......我会编辑问题......
    • @Icid 从逻辑上讲,您的数据库可以根据您的存储大小增长到任何大小,所以不要担心这一点,如果您执行索引,那么您将更快地获得结果。如果您想这样做索引然后使用 solr 之类的东西,因为 mongodb 也提供索引,但这会突然增加数据库的操作负载。如果您仍然对第二种方法有疑问,那么您可以使用第一种方法并在光标上进行第二次查询,这是我之前解释的。
    【解决方案2】:

    RE:编辑。如果您要将所有内容存储在单个文档中并使用嵌入式文档,那么在进行查询时请确保您只选择所需的数据,否则您将加载包括嵌入式文档在内的整个文档。

    【讨论】:

    • 喜欢这个? current_user.paths.where( :location => '/directory' ).first
    • 取决于您的 OM,例如使用 mongoid current_user.paths.where( :location => '/directory' ).only(:id, :name)
    猜你喜欢
    • 1970-01-01
    • 2011-10-16
    • 2022-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多