В данной лабораторной работе будут рассмотрены 4 библиотеки для работы с базами данных (Psycopg2,SQLite, DuckDB, Pandas) на примере создания бенчмарка "4 queries".
Запуск осуществляется через один файл main.py, при этом используемые в запуске библиотеки могут изменяться в файле config.py.
1) Установите python с официального сайта https://www.python.org/downloads/, а так же PostgreSQL при необходимости
2) Установите используемые библиотеки (и gdown для скачивания датасета) через терминал, используя следующую команду: pip install duckdb pandas psycopg2 gdown
3) Клонируйте репозиторий в нужную директорию, используя следующую команду:
git clone https://github.com/Sonenka/dblab3.git
4) Измените настройки под себя в файле config.py.
5) Запускайте программу.
Вывод программы:
Гистограмма и график, построенные на основе полученных данных (в папке files вы можете найти файл Excel со всеми графиками):
По полученным данным можно сделать выводы о каждой из библиотек:
По моему мнению, это самая неудобная в использовании библеотека из представленных, так как помимо написания самого кода, необходимо было подключаться к PostgreSQL. Что же касается времени выполнения запросов, то эта библиотека является самой долгой, это скорее всего связано с тем, что ей нужно подтверждение каждого запроса, а еще она работает с удаленной базой данных, и скорость операций может зависеть от сетевой задержки и нагрузки на сервере базы данных. Однако, ее функционал очень обширный, что может быть полезно, но не в этой лабораторно, поэтому от меня эта библиотека получает -rep.
Достаточно удобная библиотека, которая (в отличие от предыдущей) не требует дополнительных приложений. По скороти работы она самую малость отстает от Pandas на 2 и 3 query, но быстрее на 1 и 4. Благодаря своей легковесной и встроенной природе, может стать хорошим выбором для небольших приложений или задач, требующих локальной базы данных. Однако ее не очень быстрая работа (хотя и намного быстрее Psycopg2) объясняется недостаточной оптимизированностью. Вцелом, достаточно приятная библиотека для работы.
При работе с этой библиотекой я несколько раз переписывала часть лабораторной заново, думая, что работа далась слишком легко, и таких маленьких данных быть просто не может, однако, это реально. Данная библиотека в десятки (а иногда даже в сотни!) раз быстрее, чем ее конкуренты. В использовании она очень удобна, но я знаю, что у нее достаточно небольшой функционал, которого может не хватит при каких-то сложных задачах, однако в рамках этого курса мы не лезем в особые дебри, поэтому, DuckDB пока что хватает. Ее быстрота объясняется тем, что она способна параллельно обрабатывать строки. Кстати, эта библиотека создана только в середине июня этого года, но уже успела получить гранд на 100млн долларов, что означает дальнейшее ее развитие. Ура!
Достаточно быстрая (наравне с SQLite) библиотека с широким функционалом. Удобна в использовании, хорошо комбинируется с остальными библиотеками, может применяться ко множеству сценариев, включая загрузку данных из различных источников и их обработку. Помимо векторизованных операций и параллельной обработки, она использует NumPy, что позволяет ей эффективно работать с массивами данных и выполнять быстрые и оптимизированные операции.
Поработав с этими четырьмя библиотеками, могу сказать, что моим любимчиком стала DuckDB. Думаю, ее функционала для "повседневных" задач должно хватить. Но при необходимости я была бы не прочь поработать с Pandas или SQLite, так как они тоже достаточно просто в освоении. Про Psycopg2 просто нет слов, потому что работать с ней было очень не очень. Надеюсь, она никогда мне не понадобится.