GORM自我引用树木和性能

时间:2011-04-16 20:01:42

标签: grails gorm

我正在为留言板实现一个自引用GORM对象。到目前为止,伪GORM类:

class Article {
  String title
  Article parent
  static belongsTo = [parent: Article]
  static hasMany = [children: Article] 

  static constraints = {
    parent(nullable: true)
  }

  static transients = ['descendants', 'ancestors']

  def getDescendants() {
     return children ? children*.descendants.flatten() + children : []
  }

  def getAncestors() {
     return parent ? parent.ancestors.flatten() + this : []
  }
}

所以,这在我的本地方框上工作得很好,但是它会在网站上扩展,每天都会有成千上万的独立内容。

自从Burt Beckwith的演讲http://www.infoq.com/presentations/GORM-Performance以来,我倾向于不使用hasMany / belongsTo。

主要是阅读消息与添加新消息。

我可以缓存getDescendants和getAncestors调用。

我可以添加一个名为“hasChildren”的新布尔值。可以使用override addToChildren和removeFromChildren方法操作此字段。使用“hasChildren”可能会阻止像

这样的事情
if (article.children.size() > 0) // show replies

代替:

if (article.hasChildren) // show replies

思考?建议?

提前致谢, 托德

1 个答案:

答案 0 :(得分:0)

我会用SQL logging on尝试一下。 BTW为什么不使用mappedBy