ГОРМ самореференции деревьев и производительности - PullRequest
2 голосов
/ 17 апреля 2011

Я реализую объект 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 : []
  }
}

Итак, на моем локальном компьютере это работает нормально, но будет ли оно масштабироваться на сайте с тысячами ежедневных уникальных сообщений - моя забота.

С момента презентации Бёрта Беквита http://www.infoq.com/presentations/GORM-Performance и я склонен не использовать hasMany / ownTo.

Это будет в первую очередь чтение сообщений против добавления новых.

Я мог бы кэшировать вызовы getDescendants и getAncestors.

Я мог бы добавить новое логическое значение с именем "hasChildren". Этим полем можно манипулировать с помощью методов переопределения addToChildren и removeFromChildren. Использование hasChildren может предотвратить такие вещи, как

if (article.children.size() > 0) // show replies

вместо

if (article.hasChildren) // show replies

Мысли? Предложения?

Заранее спасибо, Тодд

1 Ответ

0 голосов
/ 17 апреля 2011

Я бы просто попробовал с входом SQL на .Кстати, почему бы вам не использовать mappedBy ?

...