Uniвсячина

понемножку о Linux и программировании

MySQL vs PostgreSQL в ActiveRecord

Если вы пишете мультитредовые приложения на Ruby/Rails с использованием ActiveRecord, то вы не должны выбирать между MySQL и PostgreSQL. Выбор известен заранее.

Как известно, Ruby обладает таким противным свойством, как GIL в C-extensions. Драйвер базы данных — это несомненно C-extension (по крайней мере, это утверждения справедливо для MySQL и PostgreSQL). Так что, если вы написали multithreading приложение, которое активно работает с базой через ActiveRecord и ждете, что использование нескольких ниток позволит лучше использовать процессорное время, то тех из вас, кто пользует MySQL, я спешу разочаровать — MySQL-драйвер будет блокировать ваш тред на все время выполнения sql-запроса.

А вот пользователей PostgreSQL спешу поздравить. ActiveRecord будет использовать async-вызовы драйвера и вы в полной мере насладитесь ожидаемым эффектом.

P.S. Да-да, я знаю о такой поделке, как драйвер MySqlPlus. Но лично мне, как-то ссыкотно его запускать на продакшен.

Comments