Разбивка длинного текста в Rails с MySQL - PullRequest
1 голос
/ 25 марта 2011

Какова текущая лучшая практика для разбиения на страницы длинного текста, например, разбивки длинной статьи на несколько страниц?

Два варианта, которые я могу себе представить:

  • сохранитьстрока в столбце длинного текста, разделить его на массив и разбить на страницы.Тем не менее, я беспокоюсь об использовании памяти и слишком большой обработке при загрузке страницы.
  • разбивает текст на части и сохраняет его в модели страницы (Статья has_many: pages).Должно работать нормально, но мы потеряли бы гибкость изменения длины страницы.

Какой лучший подход?Я что-то упускаю?

Ответы [ 2 ]

0 голосов
/ 25 марта 2011

Если размер текста обычно меньше 10 МБ, вполне разумно разделить текст в действии.Перерасход памяти в Rails намного больше, поэтому не стоит беспокоиться.

Однако, если размер текста обычно превышает 10 МБ, вам следует выбрать подстроку непосредственно из хранилища данных.Например, если вы используете 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

(10МБ, конечно, произвольное число. Выберите подходящее)

0 голосов
/ 25 марта 2011

Мое предложение состояло бы в том, чтобы перейти к первому подходу и поместить нарезанные результаты в кеш (например, memcached), чтобы вы сохраняли гибкость в изменении длины страницы без необходимости разрезать страницу каждый раз, когда ее обслуживаете.

...