用/ MySQL在Rails中分页长文本

时间:2011-03-25 16:38:01

标签: mysql ruby-on-rails ruby pagination

目前分页长文本的最佳做法是什么,例如,将长篇文章拆分为多个页面?

我能想到的两个选项:

  • 将字符串存储在longtext列中,将其切片为数组并对其进行分页。但是,我担心内存使用情况以及对页面加载进行过多处理。
  • 将文本切片并将其存储在页面模型中(文章has_many:pages)。应该可以正常工作,但我们会失去更改页面长度的灵活性。

最好的方法是什么?有什么我想念的吗?

2 个答案:

答案 0 :(得分:0)

我的建议是采用第一种方法,并将切片结果放入缓存(如memcached),这样您就可以灵活地更改页面长度,而无需在每次提供页面时对页面进行切片。 / p>

答案 1 :(得分:0)

如果文本通常小于10MB,则在操作中拆分文本是完全合理的。 Rails的内存开销比这大得多,所以你不应该担心。

但是,如果文本通常超过10MB,则应直接从数据存储中选择子字符串。例如,如果您使用的是MySQL和ActiveRecord,则可以执行以下操作:

# assuming fields `id`, and `body`
class Article < ActiveRecord
  def self.find_page(id, page_number, page_size = 10_000)
    page_number = page_number.to_i
    page_size = page_size.to_i
    pos = page_size * (page_number - 1)
    # http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_substring
    find(id, :select => "id, SUBSTRING(body, #{pos}, #{page_size}) AS body")
  end
end

(10MB当然是任意数字。选择一个适合你的人)