У меня есть таблица в MySQL, как этогоКак обрабатывать миллионы записей ежедневно с MySQL
CREATE TABLE IF NOT EXISTS `connections` (
`src` int(10) unsigned NOT NULL,
`sport` smallint(5) unsigned NOT NULL,
`dst` int(10) unsigned NOT NULL,
`dport` smallint(5) unsigned NOT NULL,
`time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`src`,`sport`,`dst`,`dport`,`time`),
KEY `time` (`time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
2,5 миллиона записей ежедневно вставленных в этой таблице.
Когда я хочу выбирать записи в течение определенного периода времени, например, дня. это занимает около 7 минут. как я могу улучшить его.
i`m используя рубин на рельсах версии 4.0.0
Мой выбор как этот
connections = Connection.select('src, dst, UNIX_TIMESTAMP(time) as time')
.where(time: timeFrom..timeTo)
.order('time ASC')
После выбора из базы данных У меня есть цикл, как это:
connections.each do |con|
link = getServerID(con['src'])
link = getServerID(con['dst']) if link == 0
@total[link].append [con['time'] * 1000, con['dst']]
end
в этот цикл у меня есть бит процесс на src и dst, тогда я добавляю его в хеш , этот раздел берет и мой компьютер разбился
Мне нужны эти записи, я не хочу выбирать меньше записей. –
Получите более мощный сервер, а затем –
Это похоже на то, что один фрагмент SQL может получить ваш окончательный результат без необходимости циклического перемещения большого количества данных в рубине на рельсах.Предположим, вы можете получить идентификаторы src и/или dst с соединением. Поместите немного тестовых данных и примеры того, что вы хотели бы получить от него. – Kickstart