Базы данных: введение
Илья Тетерин
2011-09-14
(use arrow keys or PgUp/PgDown to move slides)
Цель курса
Познакомить слушателей с принципами построения систем хранения данных.
Показать распространенные проблемы и варианты их решения
Дать навыки оценки готовых реализаций и работы с ними
Лектор
Илья Тетерин / ya.pulser@gmail.com
- Работаю с базами данных с 92-го года, в основном с Oracle / MS SQL / DBase.
- Пишу на Java, немного знаю другие языки.
- с 2007-го года в СПб Яндексе
- приложил руку к проектам Маркет / Книги / Авто / Адреса etc.
Требования
Приходящие на работу люди знают наборы ключевых слов и понятий, связанных с базами данных, но совершенно не могут делать из них практических выводов и, следовательно, эффективно реализовывать проекты, связанные с базами данных.
Важнее понимание вами принципов происходящего внутри и вокруг базы данных, чем ваши знания особенностей синтаксиса специфической реализации.
Подробности синтаксиса легко ищутся за секунды в поисковиках. Принципы процессов из википедии поднимаются долго и с большим трудом.
Расписание
- занятия в физ-мат лицее 239 по средам
- с 18:30 до 20:00 лекция, потом до 21.00 ответы на вопросы
- у нас 12 занятий потом зачетное мероприятие
Зачет
- основа зачета - написанная вами работающая база данных + текстовое описание что и почему в ней сделано (курсовик)
- язык реализации может быть любым (если он Java/Scala/Python/Ruby)
- курсовик можно писать в одиночестве, можно группой до 3-х человек включительно
База данных
В пределах этого курса "База данных" это некий набор информации, потенциально необходимой в дальнейшем.
... плюс алгоритмы и программы, для работы с этим набором.
Вокруг нас
Рассмотрим несколько примеров баз данных вокруг нас
Сотовый телефон
- список контактов в адресной книге
- список совершенных звонков
- список полученных и отправленных смс
Браузер:
- список закладок
- список посещенных страниц
- набор cookies, установленных разными сайтами
Книга
- список глав и абзацев
- оглавление книги как способ быстрого поиска / toc
- index (список слов в конце книги со ссылкой на страницу)
Обобщение
Любой случай, когда при описании упоминается "список чего либо".
Из чего следует, что даже "список покупок" - тоже база данных.
Список покупок:
- перечисление в произвольном порядке имя товара и количество
Чуть более сложно
- Файловая система вашего компьютера
- большая БД с очень большой функциональностью (журналируемые, распределенные)
- кэш (набор файлов) внутри IntelliJ IDEA
- из которого на лету подсказываются имена классов и методов
- Google Maps
- распределенная база данных содержащая не только текст, но и точки и многомерные объекты
- Компьютерная игра
- описание уровня и наборы графики, для их отображения
- (... как красиво внутри хранились данные в Doom ...)
Бумажная телефонная книга
У каждого человека есть бумажная записная книжка
... либо такая есть у его мамы или бабушки.
Она лежит где-то дома, извлекается на свет, когда надо позвонить дяде Коле в Воронеж или найти телефон сантехника.
В ней находится информация, которая нужна, но не прямо сейчас, а потенциально, в будущем.
Имплементация телефонной книги
- носителем информации является бумага
- информация вносится ручкой (затратно стирается)
- удалить информацию невозможно - можно только зачеркнуть
- на одной странице книги может быть от 0 до N записей
- каждая страница книги имеет свою букву
- для букв Й и Ы и ряда других страницы нет
"Запись" в телефонной книге
содержит обычно
- номер телефона (с префиксом города или без)
- имя человека
может содержать дополнительную информацию
- время работы
- дату рождения
- номер автомобиля
- ... да что угодно, вплоть до имени её таксы
Добавление
нам надо записать телефон тренера по самбо
- находим нашу записную книжку
- находим страницу на букву С (самбо)
- ищем свободное место
- делаем запись
- закрываем книгу
- бросаем где лежала
Поиск
нам надо найти телефон сантехника
- находим нашу записную книжку
- открываем страницу на букву С (сантехник)
- начиная сверху просматриваем записи, пока не найдем нужную
- копируем во временное место (набираем в телефон или записываем на бумажку или на руку)
- закрываем книгу
- бросаем где лежала
- идем звонить
Обновление
у дяди Коли сменился адрес и телефон
- находим нашу записную книжку
- открываем страницу на букву К (Коля)
- ищем запись про дядю Колю
- зачеркиваем запись
- ищем свободное место
- делаем запись
- закрываем книгу
- бросаем где лежала
Удаление
знать не знаю, не хочу знать завуча из школы
- находим нашу записную книжку
- открываем страницу на букву Ш (школа)
- ищем запись про завуча
- зачеркиваем (тщательно)
- закрываем книгу
- бросаем где лежала
Итого мы знаем как:
- добавить запись в книгу
- получить запись из книги
- обновить информацию в книге
- удалить информацию из книги
C R U D
- create
- retrieve
- update
- delete
С точки зрения инженера
Информация:
- поступает в произвольном порядке
- классифицируется по первый букве
- заносится на страницу своего класса
- классы доступны по первой букве фамилии
- внутри страницы данные записываются последовательно, в порядке поступления
Скорость поиска в такой структуре
- ищем нужную страницу - линия от А до Я с О(n=28)
- открываем (загружаем) нужную страницу с O(C)
- линейно, начиная сверху, перебираем записи, пока не найдем нужную - O(n малое)
Сравнение с простым списком
- заносим в конец списка
- скорость поиска места вставки О(N)
- скорость поиска - O(N)
Достоинства
В полностью отсортированным списке было бы О(ln(n))
А нас получается для 100 элементов: ln(28) + 100/28 = 3.3 + 3.6 = 7 по сравнению с ln(100) = 4.6
Что на самом деле очень неплохо, так как список букв - пресортирован и не меняется.
За счет структуры (особенности имплементации) книжки
- сложность уменьшается в 15 раз, по сравнению с простой записью
O(n) vs O(ln(28)) + O(n/28)
Почему имплементация именно такова
Ограничения физического мира накладывают ограничение на доступные решения.
Сложность использования полностью оптимального решения (посортируйте от руки на бумаге).
- бумага (носитель)
- скорость человека (вычислительная мощность)
Итого
Бумажная телефонная книга:
- хорошее
- эффективное
- понятное (и маме и папе и бабушке)
- надежное решение
- проверенное временем
Для инженера
При работе с данными нас могут удовлетворить значительно упрощенные структуры.
Понятная имплементация позволяет получать данные достаточно быстро.
Добавление новой информации экономно,
т.к. не требует перекладывания уже существующих данных,
которое бы требовалось при полной сортировки.
Я хочу, дабы вы смотрели на мир с такой стороны.
Вопросы?