Базы данных: введение

Илья Тетерин
2012-09-10

(use arrow keys or PgUp/PgDown to move slides)

Лектор

Илья Тетерин / ya.pulser@gmail.com / @ya_pulser

A database is an organized collection of data, today typically in digital form.
Wikipedia.org

Цель курса


Принципы построения систем хранения данных

Распространенные проблемы и варианты их решения

Навыки оценки готовых реализаций и работы с ними

Расписание

Формат

Лекция - рассказ, слайды, ссылки для самостоятельной работы.

Домашнее задание - практическое примение знаний, код ревью от лектора.

Зачет

Требования к выпускникам

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

Понимание, что принципы, лежащие в основе базы данных, важнее деталей конкретной реализации.

Синтаксис гуглится в документации мгновенно, понимание приходит с опытом в ходе долгих раздумий.

База данных

В этом курсе "База данных" это организованная коллекция информации, потенциально необходимой в дальнейшем.

... плюс алгоритмы и программы, для работы с этой коллекцией.

Базы вокруг нас

Рассмотрим несколько примеров баз данных вокруг нас

Сотовый телефон

Браузер:

Обычная книга

  • список глав и абзацев
  • оглавление книги как способ быстрого поиска / toc
  • index (список слов в конце книги со ссылкой на страницу)

Обобщение

Любой случай, когда при описании упоминается "список чего либо".

Из чего следует, что даже "список покупок" - тоже база данных.


Список покупок:

Чуть более сложно

Файловая система вашего компьютера
большая БД с очень большой функциональностью (журналируемые, распределенные)
кэш (набор файлов) внутри IntelliJ IDEA
из которого на лету подсказываются имена классов и методов
Google Maps
распределенная база данных содержащая не только текст, но и гео-точки и многомерные объекты
Компьютерная игра
описание уровней, AI скрипты, изображения
(...красиво хранились данные в Doom [WAD файлы]...)

Бумажная телефонная книга

У каждого человека есть бумажная записная книжка...

(хм ... либо такая есть у его мамы или бабушки)

Она лежит где-то дома, извлекается на свет, когда надо позвонить дяде в Воронеж или найти телефон сантехника.

Это организованная коллекция информации, которая нужна, но не прямо сейчас, а потенциально, в будущем.

Это есть база данных...

Разберем внимательно как она устроена и какие алгоритмы используются в ней.

Обычная записная книжка ... Мэрилин Монро

Marilyn Monroe's address book with Frank Sinatra's name by Mario Tama / Getty Images

Имплементация телефонной книги

"Запись" в телефонной книге


может содержать


состав информации определяется хозяином книги

Алгоритм: Добавление записи

нам надо записать телефон тренера по самбо

Алгоритм: Поиск

подтекает кран, нужен телефон сантехника

Алгоритм: Обновление

у дяди Коли сменился адрес

Алгоритм: Удаление

знать не знаю и не хочу больше знать завуча из школы

Итого алгоритмы / операции:

  • добавить запись в книгу
  • получить запись из книги
  • обновить информацию в книге
  • удалить информацию из книги

C R U D

  • create
  • retrieve
  • update
  • delete
wikipedia:Create,_read,_update_and_delete
Базовые операции с данными ...

Общее в алгоритмах (всегда)

Всегда находим книгу, закрываем и бросаем книгу - у нас всегда есть однообразные подготовительные и завершающие шаги работы с базой.

Почти всегда мы сразу позиционируемся на какую-то страницу - факты, содержащиеся в информации позволяют "оптимизировать" процесс поиска

Всегда внутри алгоритма у нас есть действие, описывающееся глаголом "искать" - найти запись, найти свободное место.

Задача: позвонить всем одноклассникам

Нам ни чем не поможет разделение на страницы...

Придется перебрать все страницы...

... и все записи на всех страницах.


Но шаги "найди базу, закрой базу" все равно будут с нами.

С точки зрения инженера

Информация:

Чуть чуть ключевых понятий

An engineer is a professional, concerned with applying scientific knowledge, mathematics and ingenuity to develop solutions for technical, social and economic problems.

Engineers design materials, structures and systems while considering the limitations imposed by practicality, safety and cost.

The word engineer is derived from the Latin roots ingeniare ("to contrive, devise") and ingenium ("cleverness").

Инженер (фр. ingénieur, от лат. ingenium — способность, изобретательность) ...

Ошибки инженеров

 

27 июня 2009-го года, Lotus Riverside, Шанхай

Что такое o(n)

wikipedia:«O» большое и «o» малое wikipedia:Big_O_notation

Пусть наш компьютер делает 1000 операций в секунду...

O1 тыс.1 млн.
o(n)1 сек..1000 сек. = 16 мин.
o(ln(n))0.006 сек0.013 сек
o(n^2)16 мин.31 год
o(n ln(n))7 сек.3.8 часа
o(k * n)9 * 19 * 1 * 1000

Примеры o(n)

Скорость поиска в телефонной книге структуре


Если хранить без деления на страницы, т.е. простым списком

Достоинства телефонной книги

Храним 100 номеров

В простом списке - o(n) ~100/2 ~50 операций

В полностью отсортированным списке было бы О(ln(n)) ~6.6 операций


А у нас получается для 100 элементов:
ln(28) + 100/28/2 ~ 4.8 + 1.8 ~6.6

Что на самом деле очень неплохо, так как список букв - пресортирован и не меняется, не требует пересортировки.


За счет структуры (особенности имплементации базы данных) книжки - сложность уменьшается в 15 раз, по сравнению с простой записью:

O(100) vs O(ln(28)) + O(n/28)

Ограничения физического мира

Вопрос:

Блог Романа Елизарова: Память: последовательный доступ vs случайный доступ. Как замерить?

Latency Comparison Numbers

L1 cache reference                          0.5 ns
Branch mispredict                             5 ns
L2 cache reference                            7 ns             14x L1 cache
Mutex lock/unlock                            25 ns

Main memory reference                       100 ns            20x L2 / 200x L1 cache

Compress 1K bytes with Zippy              3,000 ns

Send 1K bytes over 1 Gbps network        10,000 ns   0.01 ms

Read 4K randomly from SSD*              150,000 ns   0.15 ms

Read 1 MB sequentially from memory      250,000 ns   0.25 ms

Round trip within same datacenter       500,000 ns   0.5  ms

Read 1 MB sequentially from SSD*      1,000,000 ns   1    ms  4X memory

Disk seek                            10,000,000 ns  10    ms 20x datacenter roundtrip

Read 1 MB sequentially from disk     20,000,000 ns  20    ms 80x memory, 20X SSD

Send packet CA->Netherlands->CA     150,000,000 ns 150    ms
source: Numbers everyone should know by Jeff Dean (version 1 / version 2)

source: Numbers everyone should know by Jeff Dean (version 1 / version 2)

Умножим на 1 миллиард

### Minute:
    L1 cache reference                  0.5 s       One heart beat (0.5 s)
    Branch mispredict                   5 s         Yawn
    L2 cache reference                  7 s         Long yawn
    Mutex lock/unlock                   25 s        Making a coffee
### Hour:
    Main memory reference               100 s       Brushing your teeth
    Compress 1K bytes with Zippy        50 min      A TV show (including ad breaks)
### Day:
    Send 2K bytes over 1 Gbps network   5.5 hr      From lunch to end of work day
### Week
    SSD random read                     1.7 days    A normal weekend
    Read 1 MB sequentially from memory  2.9 days    A long weekend
    Round trip within same datacenter   5.8 days    A medium vacation
    Read 1 MB sequentially from SSD    11.6 days    Almost 2 weeks for a delivery
### Year
    Disk seek                           16.5 weeks  A semester in university
    Read 1 MB sequentially from disk    7.8 months  Almost a new human being
    The above 2 together                1 year
### Decade
    Send packet CA->Netherlands->CA     4.8 years   A bachelor's degree
source: Numbers everyone should know by Jeff Dean (version 2)

Почему имплементация книги такова

Ограничения физического мира накладывают ограничение на доступные решения.

Полностью оптимальное решение сложно (посортируйте от руки на бумаге).

Итого

Бумажная телефонная книга:

... настоящая база данных

Заметки для инженера

Простые структуры могут дать хороший результат.

Быстрая имплементация может понятной.

Сохраненные данные статичны и добавление новой информации экономно.


Я хочу, дабы вы смотрели на мир с инженерной стороны - почему и как совершаются процессы в привычных вещах.

Вопросы?

Домашнее задание, часть #1

Своя база данных на Java (Ruby/Python/etc)

Домашнее задание, часть #1

Скучно? ... тогда что-нить побольше ...

IMDB dataset: http://www.imdb.com/interfaces - база данных фильмов, актеров етс.

actors.list.gz - 198Mb gz, 687Mb ungzip, 13М строк о 1.5М актеров

actresses.list.gz - 109Mb gz, 400Mb ungzip, 7М строк о 0.8М актрис

Clooney, George 'Ocean's Eleven': The Look of the Con (2002) (V)  [Himself]
                'Solaris': Behind the Planet (2003) (V)  [Himself]
                101 Biggest Celebrity Oops (2004) (TV)  (archive footage)  [Himself - #57 Batman & Robin]
                101 Sexiest Celebrity Bodies (2005) (TV)  (archive footage)  [Himself - Place #80]
                13th Annual Critics' Choice Awards (2008) (TV)  [Himself]
                13th Annual Critics' Choice Awards Red Carpet Premiere (2008) (TV)  [Himself]
 

Что-нить другое?

Quora: Where can I get large datasets open to the public?