Программная инженерия больших данных

Санкт-Петербург, весна 2018

Описание

Для кого курс

Курс предназначен для программистов, желающих познакомиться с фундаментальными основами и практическими аспектами технологий, связанных с хранением, обработкой, анализом больших данных и использованием их в приложениях.

Входные требования

Необходимым требованием является знание основ реляционных баз данных. Прохождение курса Базы Данных в CSC, Академическом Университете, или онлайн-курса [Погружение в СУБД](https://stepik.org/course/3203/syllabus), или хорошего аналогичного курса в вашем университете этому требованию, скорее всего, удовлетворяет.

В материалах курса и домашних заданиях используется, в основном, язык Java, поэтому от слушателей требуется понимание элементарных конструкций этого языка и способность писать несложные программы, а также знание алгоритмов вообще. Опыт в использовании системы контроля версий, а именно Git и GitHub, существенно облегчит проверку домашних заданий

Для выполнения практических заданий потребуется docker и умение работать с ним. Базовые вещи будут продемонстрированы на первом занятии, но самостоятельный опыт приветствуется.

Приблизительная теоретическая программа

  1. Свойства больших данных, модели использования, встречающиеся сложности. Понятия репликации и партиционирования.
  2. Физическое хранение данных. Распределённые файловые системы.
  3. Хранилища ключ-значение. Партиционирование ключей.
  4. Колоночные СУБД. Эволюция данных.
  5. Репликация данных.
  6. Транзакции в распределённых системах. Модели согласованности.
  7. Алгоритмы консенсуса.
  8. Google Spanner
  9. Пакетная обработка.
  10. Потоковая обработка.
  11. Информационный поиск.

В конце курса проводится теоретический тест.

Практическая работа

На практике нужно будет в несколько итераций реализовать свое хранилище данных, имеющее заданные свойства. Предполагается что хранилище и использующие его приложения будут совершенствоваться от итерации к итерации. Каждая итерация занимает 2 недели.

Практическая работа командная, в командах с идеальным размером 2-3 человека. Мы предполагаем, что члены команды общаются друг с другом в процессе выполнения задания, смотрят и критикуют код коллег, а лучше просто пишут код вместе. Поэтому команды большего размера не приветствуются (у вас не хватит места за компьютером), команды из одного человека не приветствуются тоже (некому будет критиковать ваш код до того, как его раскритикуют преподаватели).

Оценка по курсу

По курсу выставляется оценка по пятибалльной шкале, складывающаяся из выполнения практики и теоретического теста в конце курса.

Оценка за практику едина для всей команды и является целым числом в интервале [-2, +1]. Это число прибавляется к оценке, полученной на теоретическом тесте.

-2 за практику можно получить, вообще её не делая. +1 можно получить, выполнив задания на очень хорошем уровне.

Таким образом, можно получить итоговую оценку выше, чем два, не пройдя практику, но это будет сделать очень сложно.

Контакты:

Преподаватели

Список лекций

Введение в курс
  • Что такое большие данные, какие бывают модели их использования, какие встречаются сложности. Понятия репликации и партиционирования.
  • Основные навыки работы с docker
  • Правила прохождения практики
Хранилища ключ-значение. Партиционирование ключей. Эволюция данных

Занятие из двух мало связанных друг с другом частей. В первой части будет расказано о подходах к партиционированию в хранилищах вида ключ-значение. Во второй части Александр Савин расскажет про проблему эволюции данных и способы ее решения.

Репликация данных

Дмитрий Щитинин с рассказом про реплицацию.

Согласованность и транзакции в распределённых системах

Модели согласованности, CAP теорема, двухфазное подтверждение, что делать если транзакции не поддерживаются