Содержание
- 2. Правильно называть – СУБД В разговорной речи часто СУБД = БД (DB) БД — хранит данные,
- 3. Солянка алгоритмов и структур данных Hash-таблицы Деревья поиска Бинарный поиск Чтение из файла по offset и
- 4. Администрирование БД != Использование БД ИСПОЛЬЗОВАТЬ ПРОСТО, НО ЕСТЬ НЮАНСЫ
- 5. КЛАССИФИКАЦИЯ БД
- 6. МНОГО РАЗНЫХ ЦЕЛЕЙ — МНОГО РАЗЛИЧНЫХ БАЗ ДАННЫХ
- 7. Распределенные Централизованные ПО МАСШТАБАМ
- 8. В оперативной памяти На жестких дисках ПО СРЕДЕ ХРАНЕНИЯ
- 9. Распределенный кеш (данные могут потеряться) Полнотекстовый поиск Хранилища под метрики (специальная математика) Хранилища под географию (геометрия)
- 10. Реляционные NoSQL: Документные: MongoDB) Колоночные: HBase, Cassandra Ключ-значение: Amazon DynamoDB) SQL VS NOSQL
- 11. ТРЕБОВАНИЯ К БД
- 12. Нельзя прочитать/записать половину записи («мама мыла ра») ATOMICITY
- 13. Данные не должны теряться после успешного сохранения Как? Репликация, рейд дисков, operation log, … DURABILITY
- 14. После успешного или неуспешного выполнения запроса данные должны быть согласованы Если Фред переводит Барни 100$, то
- 15. Параллельно выполняемые запросы не должны оказывать влияние на результат Один запрос распределяет материальную помощь в размере
- 16. Запрос 1: Распределение матпомощи X для группе A var count = students.Count(s => s.Group == "A");
- 17. Параллельно выполняемые запросы не должны оказывать влияние на результат Один запрос распределяет материальную помощь в размере
- 18. Atomicity Consistency Isolation Durability Желаемый набор требований Сложно обеспечить, особенно в распределенных БД ACID
- 19. БД должна быть доступна 99.(9)% времени AVAILABILITY
- 20. Распределенная БД должна быть устойчива к brain-split PARTITION TOLERANCE
- 21. Распределенная БД должна быть устойчива к brain-split PARTITION TOLERANCE
- 22. Распределенная БД должна быть устойчива к brain-split PARTITION TOLERANCE
- 23. В распределенной системе невозможно обеспечить одновременное выполнение: Consistency (Целостности) Availability (Доступности) Partition Tolerance (Устойчивости к сбоям
- 24. Система рассчитывает, что сеть надежна, либо не распределенная ПРИМЕР C+A
- 25. Система с несколькими мастер-базами, которые обновляются синхронно Всегда доступна на чтение, но запрещает запись при разрывах
- 26. Система с несколькими серверами, каждый из которых может принимать данные, но не обязуется в тот же
- 27. Теорема доказана с конкретными формулировками понятий C, A и PT Можно попытаться ослабить формулировки, получив что-то
- 28. Брюер предложил оказаться от Consistency, но мягко: Basically Available Soft state Eventual consistency BASE
- 29. Basically Available = Availability в CAP Soft state состояние меняется даже без внешних воздействий, чтобы прийти
- 30. BASE ВМЕСТО ACID
- 31. Обычно, самое важное: Данные не должны теряться (ACID) Данные должны быть согласованы (ACID, CAP, BASE) Устойчива
- 32. БД должна работать быстро Это сильно зависит в том числе и от того, как ей пользоваться
- 33. ПРОЕКТИРОВАНИЕ СТРУКТУРЫ БД
- 34. О чем поговорим: Коллекции, поиск по индексам Примеры на БД «MongoDB» ТОЛЬКО ОСНОВЫ
- 35. Документная Масштабируемая Гибкая MONGODB
- 36. Users: {”Login”: ”Ciceron”, ”Role”: ”Owner”} {”Login”: ”Popper”, ”Role”: ”Admin”, ”BanHammer”: ”true”} {”Login”: ”Freid”, ”Role”: ”User”, ”Status”:
- 37. А как их искать? Найти пользователя с заданным логином А быстро? КАК ХРАНИТЬ ДОКУМЕНТЫ?
- 38. Рядом с файлом данных коллекции хранить HashTable: Login → смещение в файле данных, по которому записан
- 39. Найти все сообщения с января по февраль Любая ordered структура ПОИСК ПО ДИАПАЗОНУ
- 40. Может быть много индексов у одной коллекции Занимает дополнительное место Замедляет операции обновления данных Создаются под
- 41. Пользователь ввел логин и пароль, нужно его аутентифицировать ForumDB: Users: Index on Login ЗАДАЧА «ФОРУМ»
- 42. Пользователь прошел по ссылке на конкретное сообщение, нужно его отобразить ForumDB: Users: Index on Login Messages:
- 43. Показать список самых популярных сообщений ForumDB: Users: Unordered index on Login Messages: Unordered index on MessageId
- 44. 1 2 3 4 50 60 70 ORDERED INDEX ≈ СОРТИРОВАННЫЙ СПИСОК
- 45. Задан порядок (collation) Поиск левой / правой границы O(logN) Переход к предыдущему/следующему в среднем O(1) Поиск
- 46. 1 2 3 4 50 60 70 skip 1, take 3, с конца SKIP/TAKE
- 47. SKIP/TAKE 2 60 50 70 1 3 4 skip 1, take 3, с конца
- 48. 1, cat 2 3 4 50 60, cat 70 ФИЛЬТРАЦИЯ
- 49. ФИЛЬТРАЦИЯ 2 60, cat 50 70 1, cat 3 4
- 50. ORDERED INDEX + ФИЛЬТРАЦИЯ Топ М сообщений = взять первое и M раз перейти к следующему:
- 51. Показать последние T сообщений из заданного треда обсуждений Тредов много Могут обратиться как к старому треду,
- 52. СОСТАВНЫЕ ИНДЕКСЫ TopicId, PublicationDate 1, 2019-02-10 1, 2019-02-15 6, 2019-01-01 6, 2019-02-02 7, 2019-02-18 9, 2019-01-05
- 53. ForumDB: Users: Unordered index on Login Messages: Unordered index on MessageId Ordered index on Likes Ordered
- 54. Стратегия поиска в БД Стратегия проектирования структуры БД Стратегия выбора БД ВЫВОДЫ ПО ПРОЕКТИРОВАНИЮ
- 55. Максимально сильно сузить выборку с помощью поиска по индексу до малого числа документов Отфильтровать оставшееся Идеально,
- 56. Заранее выяснить какие запросы БД должна уметь обрабатывать эффективно Понять, какие будут коллекции Спланировать, где нужны
- 57. Понимать специфику своих потребностей Понимать ограничения и сильные стороны разных СУБД Возможно, даже использовать несколько СУБД
- 58. ПРАКТИКА ПРОЕКТИРОВАНИЯ БД
- 59. СЕРВИС ДЛЯ ОТЕЛЕЙ public interface IHotelRepository { HotelId AddHotel(string name); void RemoveHotel(HotelId hotelId); RoomId AddRoom(HotelId hotelId,
- 60. Фиксируем результат проектирования в документе Описываем коллекцию как набор полей Если над полем надо построить индекс,
- 61. Нам понадобится коллекция «отели» Пусть у каждого отеля будет уникальный индекс Флаг «удалено» Где хранить комнаты?
- 62. RoomId AddRoom( HotelId hotelId, RoomDescription roomDescription); Добавить комнату в коллекцию «комнаты» Привязать комнату к отелю ПРИМЕР:
- 63. void RentRoom( RoomId roomId, DateTime from, DateTime to, Guest[] guests); http://bit.ly/db-shpora Скопируйте лист преподавателя и переименуйте
- 64. Guest[] GetArrivedGuests(DateTime day) ЗАДАЧА: ОТЧЕТНОСТЬ В МВД
- 65. Можно попросить СУБД отдать не весь документ, а только отдельные его поля = проекцию ПРОЕКЦИИ
- 66. (From, To, Guest[])[] GetRoomSchedule( RoomId roomId, DateTime from, DateTime to); Запрос должен работать быстро! ЗАДАЧА: ИСТОРИЯ
- 67. Можно ли одновременно искать с условиями на From и на To? С нашей моделью упорядоченного индекса
- 68. RoomDescription[] GetFreeRooms( HotelId hotelId, DateTime from, DateTime to); ЗАДАЧА: СВОБОДНЫЕ КОМНАТЫ
- 69. (RoomId, To) (HotelId, To) А нельзя ли вместо двух, иметь один такой? (HotelId, RoomId, To) НУЖНО
- 70. HotelId, RoomId, To 1, 100, 2019-01-10 2, 200, 2019-01-02 2, 200, 2019-01-05 2, 201, 2019-01-03 …
- 71. Один «родитель», много «детей» Полностью в родителе Guests в Rent Идентификаторы в родителе RoomIds в Hotel
- 72. В реляционных БД принято «нормализовать», хранить связи в отдельной таблице с записями вида (Id, ParentId, ChildId)
- 73. ОТЛИЧИЯ РЕЛЯЦИОННЫХ БД
- 74. MONGO VS SQL Хранит коллекцию документов Структура документов не фиксирована Табличная структура Поля заранее зафиксированы, изменение
- 75. MONGO VS SQL Документы могут иметь произвольную вложенность Денормализация для уменьшения числа запросов Простые клиенты, простая
- 76. MONGO VS SQL uniq – индексы в рамках шарда Распределенная система Транзакции, триггеры, ограничения, каскадные операции
- 77. ПРАКТИКА ИСПОЛЬЗОВАНИЯ БД
- 78. ЗАДАЧА: GAME 2 игрока Несколько туров Уже реализована Хранит всё в памяти
- 79. Зарегистрировать нового пользователя Отредактировать / удалить пользователя Создать планируемую игру Добавить пользователя в игру Начать /
- 80. Пользователь: логин, имя, статистика, … Игра: игроки, статус, номер тура, текущий счёт, … Тур: в какой
- 81. Game – реализация предметной области Tests – тесты ConsoleApp – реализация логики приложения DEMO GAME
- 82. Создание БД Создание документа Поиск документа Индексы DEMO MONGODB COMPASS
- 83. https://github.com/kontur-web-courses/db/blob/main/README.md ФОРМУЛИРОВКА ЗАДАНИЯ
- 84. Bson-based язык запросов MongoDB Специализированные методы репозиториев Отвязывание сущностей БД от классов, реализующих логику предметной области
- 86. Скачать презентацию