ORM для SQLite

Писал тут небольшое приложение для сервера, решил что MySQL будет избыточно. Что можно использовать из легкого и быстрого? Правильно, SQLite 3, который по умолчанию идет вместе с PHP. На запись, он, конечно, тормозной, но приложение будет в основном читать и мало-мало записывать.

Для управления базой поставил phpLiteAdmin — простенько, но для моих целей более чем достаточно. Встал вопрос использования ORM для разработки, и тут я призадумался.

Использовать ORM — значит, облегчить себе жизнь, но все говорят, что лишний слой абстракции замедляет приложение раза так в 2 (и это по минимальным оценкам). Решил проверить. Doctrine отпала сразу же в силу своей избыточности. Для теста взял чистый SQLite3, PDO и RedBeanPHP, который подкупил меня тем, что создает и изменяет структуру БД «на лету» без необходимости лезть в конфигурационные файлы (на самом деле, очень удобно на маленьких проектах, и очень неудобно на больших).

Сначала проверяем создание и заполнение таблиц БД — создаем две таблицы, в каждой по 1000 записей, между таблицами отношение «один-ко-многим». С результатами все понятно — SQLite традиционно медлителен на запись, SQLite3 и PDO показали сопоставимые результаты, а RedBeanPHP ожидаемо примерно в 2 раза худшие (что не удивительно, поскольку при каждом сохранении он перепроверяет структуру БД).

Следующий шаг — чтение всех записей из связанных таблиц (LEFT JOIN). И здесь результаты были удивительны — RedBeanPHP идет на уровне PDO, а чистый SQLite3 показал себя примерно в два раза медленнее! Прогнал тест 10 раз подряд, чтобы исключить случайную ошибку — все верно, цифры варьируются, но чистый SQLite3 стабильно медленнее. Потребление памяти не измерялось, но, думаю, что ORM в любом случае будет «кушать» больше.

Выводы:
1) не стоит бездумно использовать любой доступный инструмент — всегда необходимо выбирать инструмент исходя из своих (клиента) запросов;
2) не стоит слепо слушать все, что приводится в интернете — всегда необходимо проверять пригодность инструмента для своих целей;
3) никогда не используйте PHP SQLite3, если у вас есть PDO.