diff --git a/README.md b/README.md index 64ef33813a..f3103e52ed 100644 --- a/README.md +++ b/README.md @@ -1,117 +1,72 @@ -# Домашнее задание к занятию "`Название занятия`" - `Фамилия и имя студента` - - -### Инструкция по выполнению домашнего задания - - 1. Сделайте `fork` данного репозитория к себе в Github и переименуйте его по названию или номеру занятия, например, https://github.com/имя-вашего-репозитория/git-hw или https://github.com/имя-вашего-репозитория/7-1-ansible-hw). - 2. Выполните клонирование данного репозитория к себе на ПК с помощью команды `git clone`. - 3. Выполните домашнее задание и заполните у себя локально этот файл README.md: - - впишите вверху название занятия и вашу фамилию и имя - - в каждом задании добавьте решение в требуемом виде (текст/код/скриншоты/ссылка) - - для корректного добавления скриншотов воспользуйтесь [инструкцией "Как вставить скриншот в шаблон с решением](https://github.com/netology-code/sys-pattern-homework/blob/main/screen-instruction.md) - - при оформлении используйте возможности языка разметки md (коротко об этом можно посмотреть в [инструкции по MarkDown](https://github.com/netology-code/sys-pattern-homework/blob/main/md-instruction.md)) - 4. После завершения работы над домашним заданием сделайте коммит (`git commit -m "comment"`) и отправьте его на Github (`git push origin`); - 5. Для проверки домашнего задания преподавателем в личном кабинете прикрепите и отправьте ссылку на решение в виде md-файла в вашем Github. - 6. Любые вопросы по выполнению заданий спрашивайте в чате учебной группы и/или в разделе “Вопросы по заданию” в личном кабинете. - -Желаем успехов в выполнении домашнего задания! +# Домашнее задание к занятию «Базы данных, их типы»" - `Скрыпников Илья` + + +### Задание 1. СУБД +Крупная строительная компания, которая также занимается проектированием и девелопментом, решила создать правильную архитектуру для работы с данными. Ниже представлены задачи, которые необходимо решить для каждой предметной области. + +Какие типы СУБД, на ваш взгляд, лучше всего подойдут для решения этих задач и почему? + +1.1. Бюджетирование проектов с дальнейшим формированием финансовых аналитических отчётов и прогнозирования рисков. СУБД должна гарантировать целостность и чёткую структуру данных. +Ответ : Здесь стоит обратить внимание на использование реляционных СУБД, которые отличаются чётким структурированием данных и обеспечивают их сохранность. С помощью SQL-запросов можно эффективно создавать отчёты и управлять аналитикой. +1.1.* Хеширование стало занимать длительно время, какое API можно использовать для ускорения работы? +Ответ : Для ускорения хеширования БД возжожно использовать API MurmurHash. Это быстрый алгоритм хеширования, который может быть использован для ускорения работы с базами данных. + +1.2. Под каждый девелоперский проект создаётся отдельный лендинг, и все данные по лидам стекаются в CRM к маркетологам и менеджерам по продажам. Какой тип СУБД лучше использовать для лендингов и для CRM? СУБД должны быть гибкими и быстрыми. +Ответ : как вариант обротить свой взор на NoSQL - MongoDB + +1.2.* Можно ли эту задачу закрыть одной СУБД? И если да, то какой именно СУБД и какой реализацией? +Ответ : Я думаю что как минимум подайдет еще и Cassandra +1.3. Отдел контроля качества решил создать базу по корпоративным нормам и правилам, обучающему материалу и так далее, сформированную согласно структуре компании. СУБД должна иметь простую и понятную структуру. +Ответ : Думаю возможно использовать реляционной SQL PostgreSQL или mySQL +1.3.* Можно ли под эту задачу использовать уже существующую СУБД из задач выше и если да, то как лучше это реализовать? + +1.4. Департамент логистики нуждается в решении задач по быстрому формированию маршрутов доставки материалов по объектам и распределению курьеров по маршрутам с доставкой документов. СУБД должна уметь быстро работать со связями. +Ответ : Я думаю что реляционной SQL PostgreSQL здесь сможет прегодится для этого у БД есть нужный функционал, но возможно и использование графовой - Neo4j +1.4.* Можно ли к этой СУБД подключить отдел закупок или для них лучше сформировать свою СУБД в связке с СУБД логистов? +Ответ : Возможно, но на мой вкус пусть у отделов будут свои разные БД отвечающии их запросам, да и вопрос с безопасностью будет закрыт +1.5.* Можно ли все перечисленные выше задачи решить, используя одну СУБД? Если да, то какую именно? +Ответ : возможна реляционная SQL PostgreSQL подойдет для всех задачь компании +### Задание 2 Транзакции +2.1. Пользователь пополняет баланс счёта телефона, распишите пошагово, какие действия должны произойти для того, чтобы транзакция завершилась успешно. Ориентируйтесь на шесть действий. + +Ответ: +1. Процесс идентификации пользователя +2. Подтверждение транзакции со стороны Пользователя +3. Оброботка транзакции (отклонение или потверждение) +4. Списание средств Пльзователя +5. Зачисление средств Оператору +6. Получение подтверждения о зачислении средств на счет и закрытие транзакции со статусом "успешно" + +2.1.* Какие действия должны произойти, если пополнение счёта телефона происходило бы через автоплатёж? + +Ответ: Думаю так же, только инициатором транзакции (пункт 1) будет не пользователь, а сервис автоплатежа (просто сервис направит запрос на транзакцию в запланированное время, а не когда захотел пользователь + +### Задание 3 SQL vs NoSQL +3.1. Напишите пять преимуществ SQL-систем по отношению к NoSQL. +Ответ: +1. Строгая типизация: SQL-системы предоставляют строгую типизацию, что облегчает управление данными и предотвращает ошибки. +2. Стандартизация: SQL является стандартным языком, что облегчает обучение и разработку. +3. Поддержка транзакций: SQL-системы обеспечивают поддержку транзакций, что гарантирует целостность данных. +4. Масштабируемость: SQL-системы могут масштабироваться вертикально, что позволяет обрабатывать большие объемы данных. +5. Инструменты и экосистема: SQL-системы имеют богатую экосистему инструментов и фреймворков, что облегчает разработку и анализ данных. +3.1.* Какие, на ваш взгляд, преимущества у NewSQL систем перед SQL и NoSQL. +Ответ : +1. Транзакционная целостность: NewSQL системы обеспечивают поддержку ACID-транзакций, что гарантирует целостность данных и консистентность базы данных. +2. Горизонтальная масштабируемость: NewSQL системы могут масштабироваться горизонтально, позволяя обрабатывать большие объемы данных и обеспечивая высокую доступность. +3. Простота разработки: NewSQL системы используют SQL-подобные языки запросов, что упрощает разработку и снижает порог входа для разработчиков. +4. Производительность: NewSQL системы способны достигать высокой производительности благодаря использованию технологий распределенных транзакций и партиционирования данных. +5. Гибкость: NewSQL системы предлагают гибкие модели данных, позволяющие хранить как структурированные, так и полуструктурированные данные. +6. Надежность: NewSQL системы обеспечивают высокий уровень надежности и отказоустойчивости, что делает их привлекательными для критически важных приложений. -### Дополнительные материалы, которые могут быть полезны для выполнения задания - -1. [Руководство по оформлению Markdown файлов](https://gist.github.com/Jekins/2bf2d0638163f1294637#Code) - ---- - -### Задание 1 - -`Приведите ответ в свободной форме........` - -1. `Заполните здесь этапы выполнения, если требуется ....` -2. `Заполните здесь этапы выполнения, если требуется ....` -3. `Заполните здесь этапы выполнения, если требуется ....` -4. `Заполните здесь этапы выполнения, если требуется ....` -5. `Заполните здесь этапы выполнения, если требуется ....` -6. - -``` -Поле для вставки кода... -.... -.... -.... -.... -``` - -`При необходимости прикрепитe сюда скриншоты -![Название скриншота 1](ссылка на скриншот 1)` - - ---- - -### Задание 2 - -`Приведите ответ в свободной форме........` - -1. `Заполните здесь этапы выполнения, если требуется ....` -2. `Заполните здесь этапы выполнения, если требуется ....` -3. `Заполните здесь этапы выполнения, если требуется ....` -4. `Заполните здесь этапы выполнения, если требуется ....` -5. `Заполните здесь этапы выполнения, если требуется ....` -6. - -``` -Поле для вставки кода... -.... -.... -.... -.... -``` - -`При необходимости прикрепитe сюда скриншоты -![Название скриншота 2](ссылка на скриншот 2)` - - ---- - -### Задание 3 - -`Приведите ответ в свободной форме........` - -1. `Заполните здесь этапы выполнения, если требуется ....` -2. `Заполните здесь этапы выполнения, если требуется ....` -3. `Заполните здесь этапы выполнения, если требуется ....` -4. `Заполните здесь этапы выполнения, если требуется ....` -5. `Заполните здесь этапы выполнения, если требуется ....` -6. - -``` -Поле для вставки кода... -.... -.... -.... -.... -``` - -`При необходимости прикрепитe сюда скриншоты -![Название скриншота](ссылка на скриншот)` - -### Задание 4 - -`Приведите ответ в свободной форме........` - -1. `Заполните здесь этапы выполнения, если требуется ....` -2. `Заполните здесь этапы выполнения, если требуется ....` -3. `Заполните здесь этапы выполнения, если требуется ....` -4. `Заполните здесь этапы выполнения, если требуется ....` -5. `Заполните здесь этапы выполнения, если требуется ....` -6. - -``` -Поле для вставки кода... -.... -.... -.... -.... -``` - -`При необходимости прикрепитe сюда скриншоты -![Название скриншота](ссылка на скриншот)` +### Задание 4 Кластеры +Необходимо производить большое количество вычислений при работе с огромным количеством данных, под эту задачу выделено 1000 машин. + +На основе какого критерия будете выбирать тип СУБД и какая модель распределённых вычислений здесь справится лучше всего и почему? +Ответ : +При выборе типа СУБД следует обратить внимание на следующие критерии: +1. Скорость обработки данных: СУБД должна быть способна обрабатывать большие объемы данных с высокой скоростью. +2. Масштабируемость: СУБД должна быть способна масштабироваться вместе с ростом объема данных и увеличением нагрузки. +3. Надежность: СУБД должна быть способна обеспечить высокую доступность и надежность хранения данных. +4. Простота управления: СУБД должна быть легкой в управлении и обслуживании. +5. Стоимость: СУБД должна быть доступна по цене и не требовать значительных затрат на обслуживание. +На основе этих критериев можно рекомендовать использование таких СУБД, как Apache Hadoop (с использованием HDFS и MapReduce), Apache Cassandra, Google Bigtable или Amazon DynamoDB. Все эти СУБД обладают высокой производительностью, масштабируемостью и надежностью, а также поддерживают распределенную архитектуру, что делает их идеальными для работы с большим объемом данных и множеством машин.