Внимание! Автор не гарантирует, что его шутки будут понятны и смешны.
Есть у нас в Университете такой базовый (core)-курс, который преподается абсолютно всем — Data Modelling and Databases (DMD). Как понятно из названия, в этом курсе нам преподают базы данных: что это такое, для чего это нужно, как этим пользоваться и что бывает еще.
В основном идет работа с СУБД PostgreSQL, то есть мы работаем с реляционной базой данных. Мне, как новичку, эта тема очень интересна, так как база данных – это «хранилище» информации. Ну а кто владеет информацией, тот владеет миром. Преподавательский состав этого курса выглядит так:
- Primary Instructor – Qiang Qu (Китай),
- Secondary Instructor – Sadegh Nobari (Иран),
- Assistant Instructor – Jooyoung Lee (Южная Корея) и Waqas Nawaz (Пакистан),
- Teaching Assistant – Marat Valiev (Россия).
В основном все лекции проводятся Qiang Qu, но иногда лекция разделяется на две части, где к нему присоединяется Sadegh Nobari. У первокурсников семинары проводит Марат Валиев. Также стоит отметить, что лекции проходят на английском языке (даже не смотря на чуть заметный акцент преподавателей, все воспринимается легко и понятно).
В один из солнечных сентябрьских дней инструкторы сообщили нам радостную новость: «Ребята, по нашему курсу вы должны разработать систему управления публикациями (статьями). Это будет Вашим проектом, который оценивается в 15% от вашего итогового результата по предмету». Весь проект поделен на пять частей:
- Разработать и реализовать реляционную модель при помощи существующих СУБД.
- Разработать веб-интерфейс для взаимодействия с созданной в фазе 1 базой данных.
- Разработать свою СУБД и связать ее с использованной в первой фазе
- Разработать веб-приложение, которое в режиме реального времени показывает занятую память, нагрузку CPU и disk I/O.
- Креативная идея
Чтобы начать работу над проектом, необходимо поделиться на команды из своей группы. Требование: в команде не более трех человек. В итоге вышло так, что и один человек оказался серьезной командой.
Итак, мне посчастливилось работать втроем и нас объединяло то, что никто из нас не делал подобных вещей. Надо, так надо (курс-то заваливать не хочется, да и интересно все же). Первокурсникам была поставлена задача: выполнить только две фазы.
Для первой фазы было необходимо: создать ER-model и Relational model нашей будущей базы, нормализовать таблицы, найти сайт с научными статьями и выкачать данные по этим статьям в нашу базу (не менее миллиона статей), написать SQL-запросы для ранжирования этих статей и запросы для поиска похожих статей. Поехали!
Для начала создали ER-model нашей базы (скажу сразу, что хорошая модель вышла где-то после трех-четырех переделываний). Далее преобразовали все это в relational model и нормализовали по BCNF. Вышло все просто замечательно. После долгих и мучительных попыток написания парсера на PHP, было принято решение начать гуглить. В результате был найден граббер на питоне, который выкачивает информацию по статьям с сайта и переводит все это в XML-файлы. В итоге мы получили 1074 XML-файла, где в каждом находится по 1000 записей о статьях. Сайт, с которого все выкачивалось, — arxiv.org. Теперь нам нужно пропарсить все эти файлы в нашу базу. Для обработки XML-файла был использован DOM-parser в Java.В ней же мы подключались к нашей базе данных и отправляли данные при помощи JDBC Driver, любезно предоставленной PostgreSQL. На выходе мы получили базу с 1074000 записями. Wow! Половина фазы завершена. Пришло время запросов, но о них будет написано позже.
Наступило время второй фазы. Команда поделилась на back-end и front-end. Для фронта использовались HTML, CSS и JavaScript. Первым этапом было создание регистрационной формы и подключение к ней базы данных для создания новых пользователей и проверки корректности введенных данных уже зарегистрированными пользователями. Никакой e-mail рассылки, просто всплывающее окошко об успешной регистрации. Для формы регистрации использовались готовые шаблоны на JavaScript и PHP для коннекта с базой. Дальше шло создание основных страниц нашего сайта. Изначально предполагалось 5 страниц, в итоге было создано три – Home, Add (добавление новой статьи) и Search (для поиска статей в базе). На двух последних страницах использовались простые формы поиска и добавления, разбавленные CSS для красивостей. На главной же странице присутствуют две диаграммы, отображающие количество статей с 1996 по 2015 годы и количество статей по 6 основным категориям. Для этого использовались готовые шаблоны на JavaScript и PHP для select’a из базы необходимых данных. На этом front-end завершает свою деятельность и передает себя в руки back’a.
Back поделен на 4 этапа. На первом этапе писались запросы для поиска. Поиск производится по ключевому слову, категории, дате публикации или по различной комбинации вышеперечисленных способов. Поиск по ключевому слову – это поиск по названию, краткому содержанию и категории. Результаты выдаются по релевантности – на первом месте совпадение по названию, на последнем – по категории. Для быстрого получения поиска был реализован полнотекстовой поиск и индекс GIN с типом tsvector. GIN был выбран потому, что производит быстрый и эффективный поиск по базе.
На втором этапе были написаны методы сортировки. По умолчанию установлена сортировка по релевантности (при помощи алгоритма Левенштейна). Также возможна сортировка по дате (пользователь может выбрать этот тип). Третий этап – запросы на добавление статей. Реализованы при помощи простых INSERT’ов. Вроде бы все просто, но нужно было предусмотреть одну вещь – защиту от SQL-инъекций. Для этого была использована PHP функция pg_escape_string для введенных данных. Этот же метод был реализован при создании регистрационной формы.
Последний этап — обновление и удаление статей. Опять же использованы стандартные запросы SQL и предусмотрена защита от инъекций.
На этом две фазы, ну и наш проект, завершены.
Добрых вам дней/ ночей и успехов в учебе/работе! Поступайте в Университет, конкурс на гранты на следующий учебный год уже открыт на apply.innopolis.ru
Марсель Гусманов, студент 1 курса бакалавриата
Общежития
Спорткомплекс
Комментарии (15)
AStek
03.12.2015 12:53Можно подробнее про то что подразумевается как: «Разработать свою СУБД»?
n3d15
03.12.2015 13:39Свой аналог SQLite.
Вообще в статье много пафоса. Проект, особенно у перваков, был достаточно простым. Первые две фазы делаются от силы за неделю, в то время как на выполнение дано было 2 месяца.AStek
03.12.2015 13:43Свой аналог SQLite.
А по подробнее можно?
Хотелось узнать на каком уровне требуется выполнить такое? (поддерживается ли sql? хранение в памяти или на диске? и тп)
sys_int64
03.12.2015 18:18+2Ну на самом деле очень даже хорошая практика, для опытных программистов конечно это не составит труда, но для новичка заставит включить мозг, в отличие от того, чему учат у нас в университете, в котором выпускники программисты не знают даже базового синтаксиса хоть какого-то языка программирования.
keep
07.12.2015 22:56ilena, судя по профилю вам 27 лет. Каким образом вы очутились на первом курсе этого замечательного университета? В небольших городах вроде СПб и МСК многие студенты обычных технических ВУЗов в 27 лет уже имеют 5-7 лет опыта работы по специальности, иногда в топовых компаниях… А вы BCNF, Левинштейн, PostgreSQL и FTS… Попахивает неприкрытой рекламой…
На самом деле феномен Иннополиса меня очень интересует, но беглое изучение доступной информации вокруг данной конторы обдало меня холодом и ввергло в печаль и депрессию. Порекомендуете почитать чего-нибудь ободряющего (и чему можно верить)?keep
07.12.2015 22:57А… в хабре ведь теперь от имени кого-то принято публиковать… мама моя, куда мир катится.
ilena
08.12.2015 11:36keep, не будьте ко мне так строги :) это корпоративный блог, я размещаю материалы от наших студентов, инвайты раздать всем не представляется возможным.
Иннополис — большой проект, моя часть — университет. Возможно вам будет интересно почитать про области нашей научно-исследовательской работы university.innopolis.ru/science
В каждом направлении указаны контакты команды, с участниками которой можно связаться напрямую, чтобы, например, принять участие в работе той или иной лаборатории.
guestfromEarth
Такие вещи и не снились первакам простых технических вузов :)
auine
На втором курсе «простого колледжа», примерно 1 курс универа, унылого, наверное бывшей больницей судя по строению. Стоящего под металлургическим заводом, у меня был предмет и курсовой по нему, он так и назывался — «Построение баз данных».
Наверное, большую работу студент проделал делая альбом «Зимнии фоточки кампуса», ну что же, няшно да, только как-то пустовато.