Data Modelling and Databases для першокурсника

До мене, як до студента першокурсника Університету Иннополис часто звертаються з питанням, чим ми тут займаємося. Спеціально для хабра я написав розповідь про те, як ми проект з DMD «пиляли».



Увага! Автор не гарантує, що його жарти будуть зрозумілі і смішні.

Є у нас в Університеті такий базовий (core)-курс, який викладається абсолютно всім — Data Modelling and Databases (DMD). Як зрозуміло з назви, в цьому курсі нам викладають бази даних: що це таке, для чого це потрібно, як цим користуватися і що буває ще.

В основному йде робота з СУБД PostgreSQL, тобто ми працюємо з реляційною базою даних. Мені, як новачкові, ця тема дуже цікава, так як база даних – це «сховище» інформації. Ну а хто володіє інформацією, той володіє світом. Викладацький склад цього курсу виглядає так:
  1. Primary Instructor – Qiang Qu (Китай),
  2. Secondary Instructor – Sadegh Nobari (Іран),
  3. Assistant Instructor – Jooyoung Lee (Південна Корея) іWaqas Nawaz (Пакистан),
  4. Teaching Assistant – Marat Valiev (Росія).
В основному всі лекції проводяться Qiang Qu, але іноді лекція розділяється на дві частини, де до нього приєднується Sadegh Nobari. У першокурсників семінари проводить Марат Валієв. Також варто відзначити, що лекції проходять англійською мовою (навіть не дивлячись на ледь помітний акцент викладачів, все сприймається легко і зрозуміло).

В один із сонячних вересневих днів інструктори повідомили нам радісну новину: «Хлопці, по нашому курсу ви повинні розробити систему управління публікаціями (статтями). Це буде Вашим проектом, який оцінюється у 15% від вашого підсумкового результату з предмета». Весь проект поділений на п'ять частин:
  1. Розробити і реалізувати реляційну модель за допомогою існуючих СУБД.
  2. Розробити веб-інтерфейс для взаємодії з створеною у фазі 1 базою даних.
  3. Розробити свою СУБД і пов'язати її з використаною в першій фазі
  4. Розробити веб-додаток, який у режимі реального часу показує зайняту пам'ять, навантаження CPU і disk I/O.
  5. Креативна ідея
Щоб розпочати роботу над проектом, необхідно поділитися на команди з своєї групи. Вимога: в команді не більше трьох осіб. У результаті вийшло так, що і одна людина виявилася серйозною командою.

Отже, мені пощастило працювати втрьох і нас об'єднувало те, що ніхто з нас не робив подібних речей. Треба, так треба (курс-то завалювати не хочеться, та й цікаво все ж таки). Першокурсникам було поставлено завдання: виконати тільки дві фази.

Для першої фази було необхідно: створити 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. ДЖИН був обраний тому, що справляє швидкий і ефективний пошук по базі.

На другому етапі були написані методи сортування. За замовчуванням встановлена сортування за відповідністю (за допомогою алгоритму Левенштейна). Також можлива сортування за датою (користувач може вибрати цей тип). Третій етап – запити на додавання статей. Реалізовані за допомогою простих INSERT'ів. Начебто все просто, але потрібно було передбачити одну річ – захист від SQL-ін'єкцій. Для цього була використана PHP функція pg_escape_string для введених даних. Цей метод був реалізований при створенні реєстраційної форми.

Останній етап — оновлення та видалення статей. Знову ж використані стандартні запити SQL і передбачена захист від ін'єкцій.

На цьому дві фази, ну і наш проект, завершені. Нижче ви можете побачити приклади деяких робіт першокурсників



На цьому оповідь про перший досвід у створенні проектів підійшло до кінця. Сподіваюся, що я задовольнив цікавість багатьох, а у нас в майбутньому будуть проекти крутіше, веселіше і масштабніше.

Добрих вам днів/ ночей і успіхів у навчанні/роботі! Вступайте в Університет, конкурс на гранти на наступний навчальний рік вже відкрито на apply.innopolis.ru

Марсель Гусманов, студент 1 курсу бакалаврату

Зимові фоточки кампуса Університету ИннополисУніверситет

Гуртожитки

Спорткомплекс


Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.