Как создать правильный БД - PullRequest
0 голосов
/ 05 марта 2012

Итак, я начал работать над проектом, в который мне нужно импортировать тонну записей из электронной таблицы xls excel.

Электронная таблица содержит более 105 столбцов и 1750 строк, из которых я использовал консоль rails для создания сценариев по 1 записи на запись в столбце / строке ... ну, это было чуть севернее 183 000 записей, и теперь rails вялый, как весь ад , Даже просто пытаюсь загрузить Record.last(30) в действии / контроллере, который я пытаюсь загрузить, требуется более 5 минут.

Это новая проблема, с которой я столкнулся с тех пор, как начал рисковать, мне никогда раньше не приходилось работать с большим количеством записей.

Данные из электронных таблиц состоят только из столбца (даты) и строки (метрика). Записи являются дочерними по отношению к объекту Video, поэтому в основном я просто пытаюсь вести запись метрики просмотра по неделям для Video. Моя проблема в том, что на каждом видео записано более 1700 видеороликов, в среднем 90 записей.

Моя идея на завтра (уже поздно) заключается в том, чтобы просто создать атрибут date и views для записи и сохранить массив дат внутри: даты и массив представлений внутри: представления, а затем в модели создать метод для дат. ZIP (просмотров) и конвертировать их в хэши. Затем просто вызовите этот метод, когда пора отобразить их для просмотра.

Я ищу предложения о том, как правильно обрабатывать и хранить большие данные ... что я делаю не так?

Также, чтобы прояснить это, в этом приложении нет видео или изображений. Только необработанные данные.

1 Ответ

1 голос
/ 05 марта 2012

После исследования этого я на самом деле понял, что это просто отсутствие индексация внешних ключей для записей. Иногда я могу позвонить 60 Видео с 70-130 + Связанными Записывает часть, приводящую к моему db отсеивание всех 180 000 записей для внешнего ключа каждого видео 60 раз.

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

Создана новая миграция AddIndexToVideos с:

class AddIndexToVideos < ActiveRecord::Migration
  def self.up
    add_index :records, :video_id, :name => 'video_id_ix'
  end

  def self.down
    remove_index :records, :video_id, :name => 'video_id_ix'
  end
end

обстреляли его, затем пошли от загрузки записей следующим образом:

... Загрузка записей (400,5 мс) ВЫБЕРИТЕ «records». * ИЗ «историй» WHERE "records". "video_id" = 6081 AND (creation_at> '2012-02-27 16: 12: 44.164356 ') ORDER BY созданный_ASC LIMIT 1 ... (их было намного больше). Время загрузки каждого из них составляет около 400 мс:

... Загрузка записей (0,3 мс) ВЫБРАТЬ «записи». * ИЗ «историй» ГДЕ "records". "Video_id" = 6084 AND (creation_at> '2012-02-27 17: 32: 17.377215 ') ЗАКАЗАТЬ СОЗДАНО_ ПРЕДЕЛА ASC 1 ...

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...