【问题标题】:Mongo DB relations between objectsMongoDB对象之间的关系
【发布时间】:2011-03-08 21:03:48
【问题描述】:

我正在尝试使用 mongo db 实现博客文章存储。

我有两个域实体:

“博文”和“作者”

目前我已将 AuthorId 属性添加到博客文章实体。这是存储对象之间关系的正确方法吗?

【问题讨论】:

    标签: mongodb document-oriented-db nosql


    【解决方案1】:

    我认为这篇文章适合你http://www.mongodb.org/display/DOCS/Schema+Design

    用例

    客户/订单/订单行项目

    订单应该是一个集合。客户收藏。 line-items 应该是嵌入在 order 对象中的 line-items 数组。

    博客系统。

    帖子应该是一个集合。帖子作者可能是一个单独的集合,或者只是帖子中的一个字段,如果只是一个电子邮件地址。 cmets 应嵌入在帖子中以提高性能。

    架构设计基础

    Kyle Banker,10 代

    http://www.10gen.com/presentation/mongosf2011/schemabasics

    索引和查询优化 Alvin Richards,企业工程高级总监

    http://www.10gen.com/presentation/mongosf-2011/mongodb-indexing-query-optimization

    **这两个视频是 mongoddb 上见过的最好的 imho*

    【讨论】:

    • 感谢视频链接!从关系型数据库过渡到 noSQL 真的很有帮助。
    【解决方案2】:

    目前我已将 AuthorId 属性添加到博客文章实体。这是存储对象之间关系的正确方法吗?

    我会说不。您“应该”以 非规范化 方式将所需的所有内容存储在博客文档中(例如博客文章、cmets、标签等)。所以如果你想显示作者的名字,你应该把它添加到博客文档中。这将允许通过单个查询获取整个页面的数据,这有点像面向文档的数据库。

    【讨论】:

    • 重命名用户成为一个非常昂贵的电话!
    • @Blankman:是的。尽管如此,我认为面向文档的数据库的理念是在一个查询中获取整个文档。顺便问一下,[重命名用户]/[显示博文]的比例是多少?我认为它非常低。
    • 帕斯卡,是的,在这种情况下它很低,但是说你必须显示用户的当前点。你必须再次调用它,因为它可能会很快变得陈旧。
    • @Blankman,的确如此,就像用户的声誉点经常变化,但陈旧通常是可以接受的。
    • TTT 陈旧是可以接受的,但不是积分!假设您正在阅读 John Skeet 发表的 1 个月大的帖子,他的分数将大大降低。积分必须接近实时,可能是 1 小时过时(如果这是你的意思,我同意的话)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-08
    • 2021-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-11
    • 1970-01-01
    相关资源
    最近更新 更多