我正在我的博客上工作,这是一个使用Datamapper作为其ORM的Sinatra应用程序。我刚刚为hash-tags添加了一个功能。哈希标签就是这样,它与“故事”的多对多关系。我需要在侧栏上显示最常用/最常用的5个哈希标签。
以下是我感兴趣的模态的摘要。
哈希标记模型
class Hashtag
include DataMapper::Resource
has n, :stories, through: Resource
def self.default_repository_name
:default
end
property :id, Serial
property :created_at, DateTime
property :updated_at, DateTime
property :hashtag, String
end
故事模型:
# File: models/story.rb
class Story
include DataMapper::Resource
def self.default_repository_name
:default
end
belongs_to :person
belongs_to :category
has 1, :story_content
has n, :comments
has n, :hashtags, through: Resource
property :id, Serial
property :created_at, DateTime
property :updated_at, DateTime
property :published, Boolean, default: false
property :privacy_level, Enum[ :private, :friends, :public ] # SNS access control for Twitter/FB only
end
需要:获得最常用n
哈希标记的最有效方法。
对于n = 2,我需要〜> [标签2,标签3]
我正在考虑维持一个柜台并为某些事情做过这样的事情,比如喜欢'。不知道是否有任何其他方式缓存Stories
每HashTag
的数量。
答案 0 :(得分:1)
由于top标签不太可能频繁更改,因此您可以选择计算并缓存它们更长的时间,例如一天。然后,您可以在夜间工作中重新计算前五名。
优点:
缺点: