Какой тип подключения к базе данных вы используете? Некоторые базы данных позволяют вам подключаться «напрямую», а не через сетевое соединение TCP, которое проходит через сетевой стек. Другими словами, если вы подключаетесь к Интернету и отправляете данные таким способом, это может замедлить работу.
Еще один способ повысить производительность соединения с базой данных - объединить операторы SQL в одну команду.
Например, создание единственного оператора SQL из 6000 строк, который выглядит следующим образом
"update words set count = count + 1 where word = 'the'
update words set count = count + 1 where word = 'in'
...
update words set count = count + 1 where word = 'copacetic'"
и запустите его одной командой, производительность будет намного лучше. По умолчанию MySQL имеет ограничение «размер пакета» в 1 мегабайт, но вы можете изменить его в файле my.ini, чтобы увеличить его, если хотите.
Поскольку вы абстрагируете вызовы вашей базы данных через ActiveRecord, вы не имеете большого контроля над тем, как выполняются команды, поэтому может быть сложно оптимизировать ваш код.
Еще один тонкий момент, который вы могли бы сделать, состоял бы в том, чтобы вести подсчет слов в памяти, а затем вставлять только итоговую сумму в базу данных, а не делать обновление каждый раз, когда вы встречаете слово. Это, вероятно, значительно сократит количество вставок, потому что, если вы делаете обновление каждый раз, когда сталкиваетесь со словом «,», это огромная, огромная трата. Слова имеют «длинный хвост», и наиболее распространенные слова встречаются гораздо чаще, чем более неясные слова. Тогда базовый SQL будет выглядеть примерно так:
"update words set count = 300 where word = 'the'
update words set count = 250 where word = 'in'
...
update words set count = 1 where word = 'copacetic'"
Если вы беспокоитесь о том, чтобы занимать слишком много памяти, вы можете считать слова и периодически «сбрасывать» их. Так что прочитайте пару мегабайт текста, затем потратьте несколько секунд на обновление итогов, а не обновляйте каждое слово каждый раз, когда вы сталкиваетесь с ним. Если вы хотите еще больше повысить производительность, вам следует подумать о том, чтобы напрямую вводить команды SQL