У нас есть несколько счетчиков, которые считывают ряд параметров за данный интервал и загружают данные (в формате CSV) в базу данных MYSQL.Оптимизация большого количества строк в базе данных приложений Rails
Я смоделировал это в Rails следующим образом:
Meter
has_many :parameters
Parameter
belongs_to :meter
has_many :readings
Reading
belongs_to :parameter
(я использовал обычные внешние ключи - meter_id и parameter_id - связать таблицы)
Это работает большим с моими данными семян и я использую self.readings.pluck(:value).latest
в моей модели параметров, чтобы получить последнее значение и передать его в представление.
Единственная проблема заключается в том, что счетчики загружают данные каждые 30 секунд. Это означает, что, поскольку в настоящее время существует 20 параметров, данные в течение нескольких месяцев оставили мне более 20 000 000 строк в моей таблице Readings, и это означает, что запросы для захвата последних берут около 500 мс каждый.
Я после предложений о способах оптимизации этого. Я добавил индекс в поле parameter_id, но, кроме этого, я не уверен в наилучшем способе продолжения ...
Возможно, мне нужно переосмыслить, как структурирована моя база данных , но это, по-видимому, имело наибольший смысл, поскольку я хочу динамически добавлять новые параметры в линию (следовательно, почему я не мог просто сделать мои столбцы именами параметров), и это похоже на то, что Rails сохраняет данные по умолчанию ,
Заранее спасибо.
Ваша схема базы данных кажется прекрасной, но реляционные базы данных имеют свои ограничения. У вас есть отличный случай (временные ряды) для использования NoSQL (например, 'Cassandra'), и поэтому я предлагаю начать с этого момента. Кассандра также читает из CSV. – blelump