12+
Методика эффективного управления данными в IT-проектах

Бесплатный фрагмент - Методика эффективного управления данными в IT-проектах

Введите сумму не менее null ₽, если хотите поддержать автора, или скачайте книгу бесплатно.Подробнее

Объем: 74 бумажных стр.

Формат: epub, fb2, pdfRead, mobi

Подробнее

«Введение

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

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

Цель данного пособия — сформировать понимание основных аспектов работы с базами данных и управления данными. Я стремлюсь помочь вам не только овладеть основами баз данных, но и научить вас разговаривать на «языке данных» с разработчиками, понимать их возможности и ограничения, а также эффективно интегрировать данные в процесс продуктового управления.

Глава I.
Введение в базы данных

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

База данных — это структурированное и организованное хранилище данных, предназначенное для эффективного сбора, хранения, управления и извлечения информации. В базе данных информация организуется в виде таблиц, где каждая строка представляет собой запись, а столбцы содержат атрибуты или поля, описывающие данную запись. Базы данных используются в различных информационных технологиях и приложениях, включая веб-сайты, приложения для управления бизнес-процессами, системы учета, социальные сети и многие другие, обеспечивая надежное хранение и доступ к данным в удобной форме. Они необходимы для решения множества задач, связанных с организацией и обработкой информации. Вот несколько причин, по которым базы данных важны и как их правильное проектирование влияет на IT-продукты:

Хранение данных: Базы данных предназначены для долгосрочного хранения структурированных данных, таких как информация о пользователях, продуктах, заказах, финансах и т. д. Они предоставляют надежное место для сохранения информации, которая может быть легко восстановлена в случае сбоев или потерь.

Управление данными: Базы данных позволяют организовать данные и управлять ими с помощью запросов, обновлений и удалений. Это позволяет эффективно управлять объемами информации и поддерживать актуальность данных.

Обеспечение целостности данных: правильно спроектированная база данных предотвращает возможность вставки некорректных или противоречивых данных. С использованием ограничений, связей и правил целостности можно гарантировать, что данные остаются надежными и точными.

Поддержка множества пользователей: В больших IT-продуктах, таких как социальные сети, интернет-магазины или системы управления ресурсами предприятия, множество пользователей одновременно работает с данными. Базы данных обеспечивают возможность совместного доступа и обновления данных для множества пользователей.

Анализ данных: Многие IT-продукты требуют анализа данных для выявления тенденций, паттернов и инсайтов. Правильно спроектированная база данных может значительно упростить процесс извлечения и обработки данных для аналитики.

Масштабируемость: Базы данных могут быть спроектированы с учетом возможности масштабирования. Это позволяет IT-продуктам расти по мере увеличения объема данных и нагрузки, обеспечивая при этом стабильную производительность.

Проектирование баз данных играет очень важную роль в успешной разработке информационных систем и приложений. Это процесс создания оптимальной структуры для хранения данных, который оказывает глубокое влияние на эффективность, масштабируемость и надежность IT-продуктов. Корректное проектирование баз данных позволяет избежать будущих проблем, таких как медленная производительность запросов, несогласованность данных и затраты на оптимизацию. Оно также обеспечивает удобство разработки и обслуживания, позволяя легко добавлять новые функции, адаптироваться к изменяющимся требованиям и масштабировать продукт по мере роста. В конечном итоге, правильное проектирование баз данных способствует созданию более надежных, эффективных и долгосрочно успешных IT-решений. Правильное проектирование базы данных перед стартом проекта имеет несколько важных причин:

Избежание проблем в будущем: плохо спроектированная база данных может привести к множеству проблем в будущем, таких как медленная производительность, несогласованные данные и сложности в обслуживании. Пересмотр структуры базы данных в уже функционирующем продукте может быть затратным и сложным процессом.

Эффективное использование ресурсов: правильно спроектированная база данных оптимизирована для хранения и обработки данных, что позволяет эффективно использовать аппаратные и программные ресурсы серверов.

Улучшенная производительность: Правильное индексирование, нормализация и структурирование данных помогают достичь высокой производительности запросов, что важно для отзывчивости IT-продукта.

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

Улучшенная масштабируемость: правильно спроектированная база данных легче масштабируется по мере роста продукта и нагрузки.

Итак, знание о базах данных является важной составляющей навыков проектного менеджера, поскольку оно оказывает значительное влияние на успешное выполнение проектов. Во-первых, базы данных играют ключевую роль в большинстве информационных проектов, будь то разработка программного обеспечения, веб-приложений или систем управления. Понимание принципов работы баз данных позволяет проектному менеджеру более точно оценить сложность и объем работ, предусмотреть риски и эффективно распределить ресурсы.

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

Основные понятия и термины

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

База данных (Database) — это структурированное хранилище данных, организованное таким образом, чтобы обеспечить эффективное хранение, поиск и обработку информации. Она включает в себя таблицы, содержащие данные различных типов, такие как текст, числа, даты и другие. Базы данных обеспечивают управление данными и позволяют эффективно извлекать информацию для дальнейшего анализа и использования.

Система Управления Базами Данных (СУБД, DBMS — Database Management System) — это программное обеспечение, предназначенное для создания, управления и обслуживания баз данных. Оно обеспечивает интерфейс между пользователями и базой данных, позволяет выполнять запросы к данным, добавлять новую информацию, обновлять и удалять записи, а также обеспечивает механизмы безопасности, целостности и согласованности данных.

Таблица (Table) Таблица представляет собой основную структуру в базе данных. Она состоит из рядов (записей) и столбцов (полей), где каждый столбец представляет определенный тип данных, а каждая строка — конкретную запись с данными. Таблицы используются для хранения и организации информации об объектах или сущностях, например, таблица пользователей, продуктов и заказов.

Поле (Field) — это отдельная ячейка в таблице, которая содержит конкретное значение определенного типа данных. Например, в таблице пользователей поле «Имя» может содержать текстовые значения, а поле «Возраст» — числовые значения.

Запрос (Query) Запрос представляет собой запрос к данным в базе данных с целью получения определенной информации. Запросы позволяют извлекать, фильтровать и объединять данные из разных таблиц для анализа или отображения. Они играют важную роль в получении нужной информации из больших объемов данных.

Индекс (Index) — это структура данных, создаваемая на базе таблицы, которая ускоряет процесс поиска и сортировки данных. Индексы позволяют быстро находить определенные записи в больших объемах данных, что значительно повышает производительность запросов.

Нормализация (Normalization) — это процесс организации данных в таблицах для устранения избыточности и минимизации аномалий при обновлении данных. Цель нормализации — улучшить структуру данных, обеспечивая эффективное хранение и минимальное дублирование информации.

Реляционная модель данных (Relational Data Model) — это концептуальная модель организации данных в базе данных, основанная на понятии таблиц, отношений между таблицами и операциях для работы с данными. Эта модель обеспечивает логическую и структурную целостность данных.

SQL (Structured Query Language) — это язык структурированных запросов, используемый для взаимодействия с базами данных. Он позволяет создавать, изменять и управлять данными, а также выполнять запросы для извлечения информации.

Глава II.
Основы баз данных

Типы баз данных и их применение

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

Реляционные базы данных

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

Применение:

Управление данными о клиентах, заказах и продуктах.

Финансовая и бухгалтерская отчетность.

Системы управления отношениями с клиентами (CRM).

Документоориентированные базы данных

Документоориентированные базы данных хранят данные в формате документов, таких как JSON или XML. Это особенно полезно для хранения сложных иерархических данных, где каждый документ может иметь различные поля.

Применение:

Управление контентом и мультимедийными данными.

Хранение и анализ больших объемов полуструктурированных данных.

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

Колоночные базы данных

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

Применение:

Аналитические приложения, требующие быстрого выполнения сложных запросов.

Обработка больших объемов данных для агрегированных отчетов и анализа.

Нереляционные (NoSQL) базы данных

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

Применение:

Веб-приложения, работающие с большими объемами данных.

Системы управления содержимым и социальные сети.

Интернет вещей (IoT) и сенсорные данные.


Графовые базы данных

Графовые базы данных специализируются на хранении данных в виде узлов и связей между ними. Это подходит для моделирования сложных отношений и сетей.

Применение:

Социальные сети и рекомендательные системы.

Анализ связей в сетях и графах.

Биоинформатика и анализ геномных данных.

Временные ряды и временные базы данных

Временные базы данных специализируются на хранении и анализе данных, упорядоченных по времени. Они подходят для данных, требующих отслеживания изменений во времени.

Применение:

Финансовые данные и торговля на бирже.

Мониторинг и анализ производственных процессов.

Сбор и анализ данных о клиентской активности.

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

Реляционные vs. Нереляционные базы данных

В мире баз данных существует постоянное противостояние между реляционными и нереляционными базами данных, каждая из которых имеет свои уникальные преимущества и области применения.

Реляционные базы данных находят широкое применение в сценариях, где структура данных стабильна и требуется высокая точность в отношениях. Примерами могут служить системы управления клиентскими данными (CRM), финансовая бухгалтерия и приложения, где информация о клиентах, заказах и продуктах должна быть четко организована и взаимосвязана. Реляционные базы данных также применяются в ситуациях, где требуется выполнение сложных аналитических запросов и представление структурированных данных.

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

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

Рассмотрим следующие факторы:

Структура данных: если структура данных стабильна и хорошо определена, реляционные базы данных могут быть предпочтительными.

Гибкость: если требуется гибкость в изменении схемы данных и работе с неструктурированными данными, нереляционные базы данных могут быть лучшим выбором.

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

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

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

Преимущества и недостатки различных типов баз данных

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

Реляционные базы данных

Преимущества:

Структурированные данные: реляционные базы данных обеспечивают четкую и структурированную организацию данных, что упрощает запросы и анализ.

Целостность данных: системы управления базами данных (СУБД) обеспечивают контроль над целостностью данных с помощью ограничений, связей и транзакций.

Мощный язык запросов: SQL предоставляет мощный язык для выполнения сложных запросов и агрегирования данных.

Сложные отношения: реляционные базы данных позволяют выразить сложные отношения между данными с использованием внешних ключей и операций соединения.

Недостатки:

Жесткая схема данных: изменение структуры данных требует тщательного планирования и может быть затруднительным.

Масштабируемость: горизонтальное масштабирование может быть сложным, особенно для больших проектов с высокой нагрузкой.

Сложные запросы: Сложные запросы могут быть медленными и требовать оптимизации.

Сложности с неструктурированными данными: Реляционные базы данных не подходят для эффективного хранения и обработки неструктурированных данных.

Документоориентированные базы данных

Преимущества:

Гибкость схемы данных: Документоориентированные базы данных позволяют гибко изменять схему данных, что удобно для динамических проектов.

Хранение сложных данных: Они поддерживают хранение иерархических и сложных структур данных, таких как JSON или XML.

Быстродействие при чтении: Запросы на чтение данных часто выполняются быстрее из-за хранения данных в близкой к их нативному формату.

Недостатки:

Ограниченные запросы: Сложные аналитические запросы могут быть более сложными в сравнении с реляционными базами данных.

Неоднородность данных: Гибкая структура может привести к неоднородности данных, что затрудняет выполнение согласованных запросов.

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

Колоночные базы данных

Преимущества:

Высокая производительность: Колоночные базы данных обеспечивают быстрый доступ к данным при аналитических запросах и агрегациях.

Сжатие данных: Данные в колоночных базах данных могут быть более эффективно сжаты, что позволяет уменьшить объем хранимой информации.

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

Недостатки:

Неэффективность при обновлениях: Обновления данных могут быть медленными из-за необходимости пересоздания колоночных структур.

Сложности при вставке данных: Вставка новых данных может быть замедлена из-за оптимизации для чтения и агрегации.

Ограниченная поддержка сложных запросов: Они могут быть менее эффективны при выполнении операций связей и соединений между данными.

Нереляционные (NoSQL) базы данных

Преимущества:

Гибкая структура данных: Нереляционные базы данных позволяют гибко изменять схему данных, что удобно для проектов с изменчивыми требованиями.

Масштабируемость: Они обеспечивают хорошую масштабируемость, особенно горизонтальное масштабирование.

Работа с неструктурированными данными: Они подходят для хранения и обработки неструктурированных и полуструктурированных данных.

Высокая производительность: Нереляционные базы данных могут обеспечивать высокую производительность при правильной настройке.

Недостатки:

Ограниченные запросы: Сложные аналитические запросы могут быть сложными для выполнения из-за гибкой структуры данных.

Неоднородность данных: Гибкая схема данных может привести к неоднородности данных и сложностям в их агрегации.

Ограниченная поддержка транзакций: Некоторые нереляционные базы данных могут иметь ограниченную поддержку для транзакций и согласованности данных.

Графовые базы данных

Преимущества:

Моделирование отношений: графовые базы данных идеально подходят для моделирования и анализа сложных отношений и связей между данными.

Эффективность запросов: они обеспечивают высокую эффективность при выполнении запросов, связанных с анализом связей.

Поддержка семантики: графовые базы данных специализируются на семантическом поиске и анализе данных.

Недостатки:

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

Сложность запросов в ширину: Выполнение запросов, связанных с анализом данных в ширину (например, путь между узлами), может потребовать значительных ресурсов.

Глава III:
Проектирование баз данных
для продуктов и проектов

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

Анализ требований к данным с учетом функциональности продукта и потребностей пользователей

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

Вот более подробное объяснение этапов анализа требований:

1. Понимание функциональности

продукта/проекта:

— Идентификация функций: рассмотрите, какие функции будет выполнять продукт или проект. Например, если это интернет-магазин, функции могут включать в себя добавление товаров в корзину, оформление заказов и т. д.

— Определение данных: определите, какие данные нужны для выполнения каждой функции. Какие атрибуты товара, клиента или заказа требуются для правильной работы функций?

2. Потребности пользователей:

— Определение типов пользователей: Разбейте пользователей на группы с разными потребностями. Например, для интернет-магазина это могут быть покупатели, администраторы и менеджеры.

— Определение требований: рассмотрите, какие данные каждая группа пользователей будет использовать. Какие данные интересуют покупателей, какие — администраторов, и какие — менеджеров?

3. Оценка объема данных и производительности:

— Объем данных: оцените, сколько данных будет храниться. Это важно для выбора типов данных и оценки производительности базы данных.

— Частота операций: оцените, как часто будут выполняться операции добавления, изменения и удаления данных, а также какие запросы будут часто выполняться (например, поиск товаров по имени).

4. Доступ и безопасность:

— Уровни доступа: рассмотрите, какие данные доступны разным пользователям. Например, администраторам может понадобиться доступ к дополнительной информации по сравнению с обычными пользователями.

— Защита данных: определите, какие меры безопасности необходимо применить для защиты данных. Какие данные должны быть конфиденциальными, а какие — общедоступными?

5. Определение связей между данными:

— Сущности и атрибуты: определите, какие сущности (таблицы) будут использоваться для хранения данных. Какие атрибуты (столбцы) будут у каждой сущности?

— Связи: определите, какие связи существуют между сущностями. Например, какие заказы принадлежат определенному клиенту.

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

Моделирование данных и использование диаграмм сущность-связь

Моделирование данных и использование диаграмм сущность-связь (Entity-Relationship (ER) -диаграмм) — это методология, которая позволяет визуализировать структуру данных и связи между ними в базе данных с помощью графических схем. Она основана на концепции сущностей и их атрибутов, а также связей между сущностями.

Вот как происходит процесс моделирования данных с использованием ER-диаграмм:


1. Сущности и атрибуты:

— Сущности: Сущности представляют объекты или понятия, о которых будет храниться информация в базе данных. Например, для интернет-магазина сущностями могут быть «Товар», «Клиент», «Заказ».

— Атрибуты: — это характеристики, которые описывают сущности. Например, атрибутами товара могут быть «Название», «Цена», «Описание». Каждая сущность имеет свой набор атрибутов.

2. Связи между сущностями:

— Определение связей: Связи показывают, какие сущности связаны друг с другом и каким образом. Связи могут быть однозначными (One-to-One), однонаправленными или двунаправленными.

— Типы связей: существуют различные типы связей, такие как One-to-One (один к одному), One-to-Many (один ко многим) и Many-to-Many (многие ко многим). Например, связь между «Заказом» и «Товарами» в интернет-магазине будет типа One-to-Many.

3. Рисование ER-диаграмм:

— Инструменты: для создания ER-диаграмм можно использовать специальные инструменты, такие как CASE-системы (Computer-Aided Software Engineering) или онлайн-приложения.

— Рисование сущностей и атрибутов: Сущности обычно представляются в виде прямоугольников, внутри которых перечисляются атрибуты. Например, сущность «Товар» будет иметь атрибуты «Название», «Цена» и т. д.

— Рисование связей: Связи обозначаются линиями, которые соединяют сущности. На линии указывается тип связи (One-to-One, One-to-Many и т.д.).

4. Нормализация:

После создания ER-диаграммы следует выполнить нормализацию данных. Это процесс разбиения данных на более мелкие и связанные части для обеспечения целостности и устранения избыточности. В результате получается структура данных, готовая для реализации в базе.

Чем выше нормальная форма, тем более оптимизированной и структурированной становится база данных:

— Первая нормальная форма (1NF): Разделение повторяющихся групп атрибутов в отдельные таблицы.

— Вторая нормальная форма (2NF): Устранение частичной зависимости атрибутов от первичного ключа.

— Третья нормальная форма (3NF): Устранение транзитивной зависимости между атрибутами.

Преимущества моделирования данных с использованием ER-диаграмм:

Визуализация: ER-диаграммы позволяют наглядно представить структуру данных и связи между ними. Это облегчает понимание и коммуникацию между членами команды.

Выявление ошибок: Визуализация данных позволяет рано выявить возможные ошибки в структуре данных или связях, что позволяет избежать проблем на более поздних этапах разработки.

Документация: ER-диаграммы могут служить документацией для проекта, описывая структуру данных, ключевые атрибуты и связи между сущностями.

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

Индексы

это структуры данных, создаваемые в базе данных для ускорения операций поиска, сортировки и фильтрации данных. Они представляют собой дополнительные структуры, которые позволяют базе данных быстро находить записи, соответствующие определенным условиям.

Вот как индексы работают и как они помогают оптимизировать запросы:

Ускорение операций поиска: когда вы выполняете запрос, содержащий условие в операторе WHERE (например, SELECT * FROM users WHERE username = ’john’), индексы позволяют базе данных быстро найти строки, удовлетворяющие этому условию. Без индексов база данных должна была бы просматривать все строки таблицы, что для больших таблиц может занять значительное время.

Улучшение сортировки: если вы выполняете запросы с оператором ORDER BY (например, SELECT * FROM products ORDER BY price DESC), индексы помогают ускорить сортировку данных, предоставляя уже отсортированный порядок в индексе.

Бесплатный фрагмент закончился.

Купите книгу, чтобы продолжить чтение.

Введите сумму не менее null ₽, если хотите поддержать автора, или скачайте книгу бесплатно.Подробнее