HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-21
1 <p><a>#статьи</a></p>
1 <p><a>#статьи</a></p>
2 <ul><li>23 апр 2021</li>
2 <ul><li>23 апр 2021</li>
3 <li>0</li>
3 <li>0</li>
4 </ul><p>SQL или NoSQL - вот в чём вопрос. Чем они различаются? Это конкуренты или сотрудники? Что о них спрашивают на собеседовании?</p>
4 </ul><p>SQL или NoSQL - вот в чём вопрос. Чем они различаются? Это конкуренты или сотрудники? Что о них спрашивают на собеседовании?</p>
5 <p>Программист, консультант, специалист по документированию. Легко и доступно рассказывает о сложных вещах в программировании и дизайне.</p>
5 <p>Программист, консультант, специалист по документированию. Легко и доступно рассказывает о сложных вещах в программировании и дизайне.</p>
6 <p>Про реляционные и нереляционные СУБД на техническом интервью спрашивают часто, причём не только администраторов баз данных, но и бэкенд-разработчиков, тестировщиков, специалистов по кибербезопасности, аналитиков и много кого ещё.</p>
6 <p>Про реляционные и нереляционные СУБД на техническом интервью спрашивают часто, причём не только администраторов баз данных, но и бэкенд-разработчиков, тестировщиков, специалистов по кибербезопасности, аналитиков и много кого ещё.</p>
7 <p>В одной статье мы не сможем глубоко погрузиться в эту тему - материал слишком объёмный. Поэтому просто дадим начальные знания или освежим прежние.</p>
7 <p>В одной статье мы не сможем глубоко погрузиться в эту тему - материал слишком объёмный. Поэтому просто дадим начальные знания или освежим прежние.</p>
8 <p>Поговорим про основные типы баз данных, их достоинства и недостатки. А отталкиваться будем от реляционных баз, поэтому их рассмотрим чуть подробнее.</p>
8 <p>Поговорим про основные типы баз данных, их достоинства и недостатки. А отталкиваться будем от реляционных баз, поэтому их рассмотрим чуть подробнее.</p>
9 <p>Это такие базы, в основе которых лежит реляционная модель.</p>
9 <p>Это такие базы, в основе которых лежит реляционная модель.</p>
10 <p>Реляционную модель данных придумал Эдгар Кодд ещё в семидесятых годах прошлого века.</p>
10 <p>Реляционную модель данных придумал Эдгар Кодд ещё в семидесятых годах прошлого века.</p>
11 <p>Математик по образованию, он предложил использовать для обработки данных аппарат теории множеств.</p>
11 <p>Математик по образованию, он предложил использовать для обработки данных аппарат теории множеств.</p>
12 <p>Кодд доказал, что любое представление данных сводится к совокупности двумерных таблиц особого вида, который в математике называется отношением (relation) - отсюда и слово "реляционная" в переводе названия.</p>
12 <p>Кодд доказал, что любое представление данных сводится к совокупности двумерных таблиц особого вида, который в математике называется отношением (relation) - отсюда и слово "реляционная" в переводе названия.</p>
13 <p>Он же вывел<a>12 правил Кодда</a>, которым должна подчиняться любая реляционная база данных. Они помогли бороться с устаревшими базами, которые недобросовестные поставщики пытались выдать за реляционные.</p>
13 <p>Он же вывел<a>12 правил Кодда</a>, которым должна подчиняться любая реляционная база данных. Они помогли бороться с устаревшими базами, которые недобросовестные поставщики пытались выдать за реляционные.</p>
14 <p>А ещё Эдгар Кодд дал жизнь языку SQL.</p>
14 <p>А ещё Эдгар Кодд дал жизнь языку SQL.</p>
15 <p><strong>Отношение</strong> - это двумерная таблица с уникальным именем. Она состоит из строк (записей) и столбцов (атрибутов).</p>
15 <p><strong>Отношение</strong> - это двумерная таблица с уникальным именем. Она состоит из строк (записей) и столбцов (атрибутов).</p>
16 <p>Каждая строка таблицы представляет некоторый объект реального мира (экземпляр сущности) или соотношения между объектами.</p>
16 <p>Каждая строка таблицы представляет некоторый объект реального мира (экземпляр сущности) или соотношения между объектами.</p>
17 <p>Столбцы - это<strong>атрибуты</strong>сущности, для сущности каждого типа они свои.</p>
17 <p>Столбцы - это<strong>атрибуты</strong>сущности, для сущности каждого типа они свои.</p>
18 <p>Итак, реляционная БД - это ограниченный набор особых таблиц с данными. Эти таблицы называются отношениями. Отношения используются для представления сущностей, а также связей между ними.</p>
18 <p>Итак, реляционная БД - это ограниченный набор особых таблиц с данными. Эти таблицы называются отношениями. Отношения используются для представления сущностей, а также связей между ними.</p>
19 <p>Разберём устройство реляционной БД подробнее на примере. Позже это поможет нам понимать и сравнивать базы разных типов.</p>
19 <p>Разберём устройство реляционной БД подробнее на примере. Позже это поможет нам понимать и сравнивать базы разных типов.</p>
20 <p>Допустим, у нас есть база данных, в которой всего одна таблица -<strong>Messages</strong><em>.</em>В ней хранится информация о телефонных разговорах клиентов и операторов компании по ремонту техники.</p>
20 <p>Допустим, у нас есть база данных, в которой всего одна таблица -<strong>Messages</strong><em>.</em>В ней хранится информация о телефонных разговорах клиентов и операторов компании по ремонту техники.</p>
21 <p>Каждая строка этой таблицы содержит данные о звонке клиента по его проблеме и ответ оператора, а также дату обращения.</p>
21 <p>Каждая строка этой таблицы содержит данные о звонке клиента по его проблеме и ответ оператора, а также дату обращения.</p>
22 <p>Телефон у компании многоканальный. Поэтому одному и тому же оператору могут звонить разные клиенты, а один и тот же клиент может попадать на разных операторов с разными вопросами.</p>
22 <p>Телефон у компании многоканальный. Поэтому одному и тому же оператору могут звонить разные клиенты, а один и тот же клиент может попадать на разных операторов с разными вопросами.</p>
23 <p><strong>Messages</strong></p>
23 <p><strong>Messages</strong></p>
24 <strong>client</strong><strong>client_phone</strong><strong>operator</strong><strong>operator_phone</strong><strong>question</strong><strong>answer</strong><strong>date</strong>Вася8 (902) 111-11-11Оператор 18 (800) 111-11-11<strong>Когда принтер готов будет?!</strong><strong>Готов, забирайте.</strong>10.02.2021Лера8 (910) 222-22-22Оператор 18 (800) 111-11-11<strong>На планшете стекло поменяете?</strong><strong>Конечно, приносите.</strong>10.02.2021Вася8 (902) 111-11-11Оператор 28 (800) 222-22-22<strong>Принтер не работает ваще!!!</strong><strong>Приносите, посмотрим.</strong>20.02.2021<p>А теперь представьте, что записей в такой таблице десятки тысяч. И возникает такая ситуация: в компанию звонит самый любимый клиент и говорит, что сменил номер телефона. А нерешённых вопросов по этому клиенту в базе, скажем, сотня. Значит, придётся заменить номер телефона на новый по крайней мере в 100 записях, то есть внести изменения сразу во много строк таблицы<strong>Messages</strong>.</p>
24 <strong>client</strong><strong>client_phone</strong><strong>operator</strong><strong>operator_phone</strong><strong>question</strong><strong>answer</strong><strong>date</strong>Вася8 (902) 111-11-11Оператор 18 (800) 111-11-11<strong>Когда принтер готов будет?!</strong><strong>Готов, забирайте.</strong>10.02.2021Лера8 (910) 222-22-22Оператор 18 (800) 111-11-11<strong>На планшете стекло поменяете?</strong><strong>Конечно, приносите.</strong>10.02.2021Вася8 (902) 111-11-11Оператор 28 (800) 222-22-22<strong>Принтер не работает ваще!!!</strong><strong>Приносите, посмотрим.</strong>20.02.2021<p>А теперь представьте, что записей в такой таблице десятки тысяч. И возникает такая ситуация: в компанию звонит самый любимый клиент и говорит, что сменил номер телефона. А нерешённых вопросов по этому клиенту в базе, скажем, сотня. Значит, придётся заменить номер телефона на новый по крайней мере в 100 записях, то есть внести изменения сразу во много строк таблицы<strong>Messages</strong>.</p>
25 <p>Конечно, это делается с помощью запроса, а не вручную. Однако даже запрос будет выполнять 99 лишних операций - из-за дублирования информации.</p>
25 <p>Конечно, это делается с помощью запроса, а не вручную. Однако даже запрос будет выполнять 99 лишних операций - из-за дублирования информации.</p>
26 <p>О подобном заботятся ещё на этапе проектирования базы, а предотвращают это путём нормализации отношений.</p>
26 <p>О подобном заботятся ещё на этапе проектирования базы, а предотвращают это путём нормализации отношений.</p>
27 <p>Чтобы уменьшить размер реляционной базы (не хранить избыточные данные) и избежать противоречивости (аномалий) при работе с ними, отношения в базе<a>нормализуют</a>. Проще говоря - разбивают их на взаимосвязанные таблицы. Это называется декомпозицией.</p>
27 <p>Чтобы уменьшить размер реляционной базы (не хранить избыточные данные) и избежать противоречивости (аномалий) при работе с ними, отношения в базе<a>нормализуют</a>. Проще говоря - разбивают их на взаимосвязанные таблицы. Это называется декомпозицией.</p>
28 <p>Избыточность данных - это когда одни и те же данные хранятся в базе сразу в нескольких местах.</p>
28 <p>Избыточность данных - это когда одни и те же данные хранятся в базе сразу в нескольких местах.</p>
29 <p>Каждая строка таблицы<strong>Messages</strong>содержит имя клиента и никнейм оператора, а также их телефоны. Причём в 1-й и 3-й строках мы видим звонки от одного и того же клиента, а в 1-й и во 2-й - ответы одного и того же менеджера. То есть в 1-й и 3-й строках дублируются имя и телефон клиента - Васи, а в 1-й и 2-й - никнейм менеджера "Оператор1".</p>
29 <p>Каждая строка таблицы<strong>Messages</strong>содержит имя клиента и никнейм оператора, а также их телефоны. Причём в 1-й и 3-й строках мы видим звонки от одного и того же клиента, а в 1-й и во 2-й - ответы одного и того же менеджера. То есть в 1-й и 3-й строках дублируются имя и телефон клиента - Васи, а в 1-й и 2-й - никнейм менеджера "Оператор1".</p>
30 <p>Чтобы избавиться от дублирования информации, выделим сущности<strong>Клиент</strong>и <strong>Оператор</strong>.<strong></strong>И вынесем специфичные для каждой атрибуты в отдельные таблицы.</p>
30 <p>Чтобы избавиться от дублирования информации, выделим сущности<strong>Клиент</strong>и <strong>Оператор</strong>.<strong></strong>И вынесем специфичные для каждой атрибуты в отдельные таблицы.</p>
31 <p>В первой (<strong>Clients</strong>) будут храниться имена и телефоны клиентов, а во второй (<strong>Operators</strong>) - операторов. Кроме того, каждой записи в этих таблицах мы присвоим атрибут<strong>id</strong> - так называемый первичный ключ (его значение уникально, то есть не может повторяться в пределах таблицы). С его помощью мы установим связь с записями таблицы<strong>Messages</strong>.</p>
31 <p>В первой (<strong>Clients</strong>) будут храниться имена и телефоны клиентов, а во второй (<strong>Operators</strong>) - операторов. Кроме того, каждой записи в этих таблицах мы присвоим атрибут<strong>id</strong> - так называемый первичный ключ (его значение уникально, то есть не может повторяться в пределах таблицы). С его помощью мы установим связь с записями таблицы<strong>Messages</strong>.</p>
32 <p>Для этого к каждой записи в <strong>Messages</strong>(напомним, она всё ещё представляет сущность "звонок") добавим два новых атрибута (внешних ключа):<strong>id_client</strong>и <strong>id_oper</strong>. Они будут ссылаться на первичные ключи из таблиц<strong>Clients</strong>и <strong>Operators</strong>соответственно. Столбцы с именами и телефонами из таблицы<strong>Messages</strong>уберём.</p>
32 <p>Для этого к каждой записи в <strong>Messages</strong>(напомним, она всё ещё представляет сущность "звонок") добавим два новых атрибута (внешних ключа):<strong>id_client</strong>и <strong>id_oper</strong>. Они будут ссылаться на первичные ключи из таблиц<strong>Clients</strong>и <strong>Operators</strong>соответственно. Столбцы с именами и телефонами из таблицы<strong>Messages</strong>уберём.</p>
33 <p>И вот что получим:</p>
33 <p>И вот что получим:</p>
34 <p>В такой базе, чтобы поменять телефон клиента сразу для всех записей, достаточно изменить всего одно поле в таблице<strong>Clients</strong>.</p>
34 <p>В такой базе, чтобы поменять телефон клиента сразу для всех записей, достаточно изменить всего одно поле в таблице<strong>Clients</strong>.</p>
35 <p>Всего существует<a>шесть форм нормализации</a>реляционных баз данных - в порядке уменьшения избыточности отношений. Все они описаны формальными правилами. Наше отношение мы привели ко <a>второй нормальной форме</a>.</p>
35 <p>Всего существует<a>шесть форм нормализации</a>реляционных баз данных - в порядке уменьшения избыточности отношений. Все они описаны формальными правилами. Наше отношение мы привели ко <a>второй нормальной форме</a>.</p>
36 <p>Данные в таблицах не лежат мёртвым грузом - с ними работают системы управления базами данных (СУБД).</p>
36 <p>Данные в таблицах не лежат мёртвым грузом - с ними работают системы управления базами данных (СУБД).</p>
37 <p>С их помощью создают базы (метасхемы), заполняют их данными и проводят операции над всем этим: добавляют, удаляют, меняют структуру, анализируют и так далее.</p>
37 <p>С их помощью создают базы (метасхемы), заполняют их данными и проводят операции над всем этим: добавляют, удаляют, меняют структуру, анализируют и так далее.</p>
38 <p>Основное средство для общения с реляционными базами данных - язык структурированных запросов SQL.</p>
38 <p>Основное средство для общения с реляционными базами данных - язык структурированных запросов SQL.</p>
39 <p>Это декларативный язык. То есть инструкции в нём не идут одна за другой (не как в императивных языках). Каждый оператор SQL описывает только необходимое действие, а СУБД сама принимает решение, как его выполнить.</p>
39 <p>Это декларативный язык. То есть инструкции в нём не идут одна за другой (не как в императивных языках). Каждый оператор SQL описывает только необходимое действие, а СУБД сама принимает решение, как его выполнить.</p>
40 <p>Например, чтобы выбрать все данные из таблицы<strong>Messages</strong>за 10.11.2020, делается запрос:</p>
40 <p>Например, чтобы выбрать все данные из таблицы<strong>Messages</strong>за 10.11.2020, делается запрос:</p>
41 <p>SELECT * FROM messages WHERE date = ‘10.11.2020’</p>
41 <p>SELECT * FROM messages WHERE date = ‘10.11.2020’</p>
42 <p>Язык структурированных запросов делится на несколько частей (группы операторов) и позволяет:</p>
42 <p>Язык структурированных запросов делится на несколько частей (группы операторов) и позволяет:</p>
43 <ul><li>определять данные (DDL),</li>
43 <ul><li>определять данные (DDL),</li>
44 <li>манипулировать ими (DML),</li>
44 <li>манипулировать ими (DML),</li>
45 <li>контролировать доступ к данным (DCL)</li>
45 <li>контролировать доступ к данным (DCL)</li>
46 <li>и управлять транзакциями (TCL).</li>
46 <li>и управлять транзакциями (TCL).</li>
47 </ul><p>В SQL изначально нет средств для создания печатных отчётов, экранных форм и других инструментов для разработки программ. Хотя SQL сам по себе не является полноценным (Тьюринг-полным) языком программирования, но его стандарт позволяет создавать процедурные расширения. Они доводят его функциональность до полноценного языка программирования.</p>
47 </ul><p>В SQL изначально нет средств для создания печатных отчётов, экранных форм и других инструментов для разработки программ. Хотя SQL сам по себе не является полноценным (Тьюринг-полным) языком программирования, но его стандарт позволяет создавать процедурные расширения. Они доводят его функциональность до полноценного языка программирования.</p>
48 <p>При этом синтаксис SQL в разных СУБД может различаться. Кое-где даже используются его отдельные диалекты, например:</p>
48 <p>При этом синтаксис SQL в разных СУБД может различаться. Кое-где даже используются его отдельные диалекты, например:</p>
49 <ul><li>T-SQL - для работы с Microsoft SQL Server;</li>
49 <ul><li>T-SQL - для работы с Microsoft SQL Server;</li>
50 <li>на PL / SQL пишут хранимые процедуры и функции в Oracle;</li>
50 <li>на PL / SQL пишут хранимые процедуры и функции в Oracle;</li>
51 <li>на PL / pgSQL - в PostgreSQL.</li>
51 <li>на PL / pgSQL - в PostgreSQL.</li>
52 </ul><p>Это такие базы, в которые включены средства работы с объектными типами данных. А возникли они в связи с развитием объектно-ориентированных языков программирования.</p>
52 </ul><p>Это такие базы, в которые включены средства работы с объектными типами данных. А возникли они в связи с развитием объектно-ориентированных языков программирования.</p>
53 <p>В структуре таких баз и языке запросов используются классы, объекты, наследование. В этом направлении развиваются, например, Oracle и PostgreSQL.</p>
53 <p>В структуре таких баз и языке запросов используются классы, объекты, наследование. В этом направлении развиваются, например, Oracle и PostgreSQL.</p>
54 <p>Это открытая СУБД, купленная Oracle в придачу к Sun Microsystems. С ней работают более половины (55,6%) всех разработчиков (по <a>результатам</a>опроса, который в 2020 году провёл сайт StackOverflow.com среди 65 тысяч респондентов).</p>
54 <p>Это открытая СУБД, купленная Oracle в придачу к Sun Microsystems. С ней работают более половины (55,6%) всех разработчиков (по <a>результатам</a>опроса, который в 2020 году провёл сайт StackOverflow.com среди 65 тысяч респондентов).</p>
55 <p>Главные её преимущества - бесплатность и высокая скорость работы с данными. MySQL создавалась для обработки огромных массивов информации в промышленных масштабах, но благодаря доступности и быстродействию оккупировала Всемирную паутину, заслужив звание "СУБД всея интернета". И сегодня MySQL всё ещё самая удобная СУБД для работы с интернет-страницами и веб-приложениями.</p>
55 <p>Главные её преимущества - бесплатность и высокая скорость работы с данными. MySQL создавалась для обработки огромных массивов информации в промышленных масштабах, но благодаря доступности и быстродействию оккупировала Всемирную паутину, заслужив звание "СУБД всея интернета". И сегодня MySQL всё ещё самая удобная СУБД для работы с интернет-страницами и веб-приложениями.</p>
56 <p>MySQL пользуется мощной поддержкой у создателей языков программирования: практически во всех популярных языках есть интерфейс для работы с ней.</p>
56 <p>MySQL пользуется мощной поддержкой у создателей языков программирования: практически во всех популярных языках есть интерфейс для работы с ней.</p>
57 <p>Эта СУБД использует большую часть стандартного языка SQL.</p>
57 <p>Эта СУБД использует большую часть стандартного языка SQL.</p>
58 <p>Главное преимущество SQlight - встраиваемость. Это объясняется тем, что SQlight не приложение типа "клиент-сервер" (в отличие от других реляционных СУБД), а библиотека, которую подключают непосредственно к программе.</p>
58 <p>Главное преимущество SQlight - встраиваемость. Это объясняется тем, что SQlight не приложение типа "клиент-сервер" (в отличие от других реляционных СУБД), а библиотека, которую подключают непосредственно к программе.</p>
59 <p>И она тоже весьма популярна: достаточно сказать, что SQLite есть в каждом смартфоне. Например, в смартфонах на Android там хранятся контакты и медиа, а в iOS её используют многие приложения.</p>
59 <p>И она тоже весьма популярна: достаточно сказать, что SQLite есть в каждом смартфоне. Например, в смартфонах на Android там хранятся контакты и медиа, а в iOS её используют многие приложения.</p>
60 <p>Её можно назвать самой продвинутой. Это не просто реляционная, а объектно-реляционная свободная СУБД.</p>
60 <p>Её можно назвать самой продвинутой. Это не просто реляционная, а объектно-реляционная свободная СУБД.</p>
61 <p>PostgreSQL поддерживает не только типы данных, которые есть в других реляционных СУБД. Помимо числовых, текстовых, булевых и других стандартных типов, в ней можно хранить и обрабатывать геометрические и денежные данные, сетевые адреса, JSON, XML, массивы, а также создавать собственные типы данных.</p>
61 <p>PostgreSQL поддерживает не только типы данных, которые есть в других реляционных СУБД. Помимо числовых, текстовых, булевых и других стандартных типов, в ней можно хранить и обрабатывать геометрические и денежные данные, сетевые адреса, JSON, XML, массивы, а также создавать собственные типы данных.</p>
62 <p>Реляционные СУБД просты, удобны и предсказуемы. А их рынок один из самых консервативных в IT-отрасли. Поэтому даже при появлении множества NoSQL реляционные базы остаются самым востребованным инструментом в очень разных отраслях.</p>
62 <p>Реляционные СУБД просты, удобны и предсказуемы. А их рынок один из самых консервативных в IT-отрасли. Поэтому даже при появлении множества NoSQL реляционные базы остаются самым востребованным инструментом в очень разных отраслях.</p>
63 <p>По данным<a>DB-Engines</a>за февраль 2021 года, мировая доля реляционных СУБД составляет 74% от всех:</p>
63 <p>По данным<a>DB-Engines</a>за февраль 2021 года, мировая доля реляционных СУБД составляет 74% от всех:</p>
64 <p>Однако реляционные БД не лишены недостатков.</p>
64 <p>Однако реляционные БД не лишены недостатков.</p>
65 <p>Реляционную базу данных трудно масштабировать горизонтально, то есть распределять таблицы по разным серверам. В этом случае очень сложно строить запросы и связывать таблицы.</p>
65 <p>Реляционную базу данных трудно масштабировать горизонтально, то есть распределять таблицы по разным серверам. В этом случае очень сложно строить запросы и связывать таблицы.</p>
66 <p>Поэтому растущую базу приходится помещать на более мощный и дорогой сервер, то есть масштабировать вертикально.</p>
66 <p>Поэтому растущую базу приходится помещать на более мощный и дорогой сервер, то есть масштабировать вертикально.</p>
67 <p>Но возможности даже самой мощной машины ограничены, поэтому реляционные базы плохо приспособлены для хранения действительно больших данных.</p>
67 <p>Но возможности даже самой мощной машины ограничены, поэтому реляционные базы плохо приспособлены для хранения действительно больших данных.</p>
68 <p>Из-за нормализации реляционная база данных имеет сложную структуру. А скорость обработки запроса зависит от числа таблиц, к которым запрос обращается.</p>
68 <p>Из-за нормализации реляционная база данных имеет сложную структуру. А скорость обработки запроса зависит от числа таблиц, к которым запрос обращается.</p>
69 <p>Представьте себе, что таблиц 100, 200, 1000, - СУБД будет работать медленно, а код запроса будет очень громоздким.</p>
69 <p>Представьте себе, что таблиц 100, 200, 1000, - СУБД будет работать медленно, а код запроса будет очень громоздким.</p>
70 <p>Реляционные СУБД подходят для обработки данных с чёткой структурой. Например, сообщений, информации о товарах, сведений о пользователях и так далее. Но в них сложно организовать хранение и обработку сущностей с произвольным набором атрибутов или иерархических данных.</p>
70 <p>Реляционные СУБД подходят для обработки данных с чёткой структурой. Например, сообщений, информации о товарах, сведений о пользователях и так далее. Но в них сложно организовать хранение и обработку сущностей с произвольным набором атрибутов или иерархических данных.</p>
71 <p>Мир меняется. В ходе цифровой трансформации перед бизнесом встают новые задачи. Компании решают их с помощью новых баз данных. Во-первых, чтобы не перегружать имеющиеся, во-вторых, не для всех современных задач подходят классические реляционные СУБД.</p>
71 <p>Мир меняется. В ходе цифровой трансформации перед бизнесом встают новые задачи. Компании решают их с помощью новых баз данных. Во-первых, чтобы не перегружать имеющиеся, во-вторых, не для всех современных задач подходят классические реляционные СУБД.</p>
72 <p>И вот, в начале 2000-х появились нереляционные базы. Помимо решения новых задач, их разработчики сделали упор на исправление главных недостатков реляционных баз - проблем с гибкостью, низкой производительностью и масштабируемостью.</p>
72 <p>И вот, в начале 2000-х появились нереляционные базы. Помимо решения новых задач, их разработчики сделали упор на исправление главных недостатков реляционных баз - проблем с гибкостью, низкой производительностью и масштабируемостью.</p>
73 <p>В NoSQL нет таких понятий, как строки, столбцы, таблицы и их соединения. Данные в нереляционных базах хранятся как объекты с произвольными атрибутами: это могут быть пары "ключ-значение", документы в формате<a>JSON</a>, графы и так далее.</p>
73 <p>В NoSQL нет таких понятий, как строки, столбцы, таблицы и их соединения. Данные в нереляционных базах хранятся как объекты с произвольными атрибутами: это могут быть пары "ключ-значение", документы в формате<a>JSON</a>, графы и так далее.</p>
74 <p>Базы NoSQL делятся на четыре основные категории (в зависимости от решаемых с их помощью задач).</p>
74 <p>Базы NoSQL делятся на четыре основные категории (в зависимости от решаемых с их помощью задач).</p>
75 <p>Такую базу можно представить как огромную таблицу. В каждой её ячейке хранятся данные произвольного типа, а каждому значению присвоен уникальный ключ, по которому это значение можно найти.</p>
75 <p>Такую базу можно представить как огромную таблицу. В каждой её ячейке хранятся данные произвольного типа, а каждому значению присвоен уникальный ключ, по которому это значение можно найти.</p>
76 <p>Такая СУБД не поддерживает связи между объектами, выполняет лишь операции поиска значений по ключу, добавления и удаления записи.</p>
76 <p>Такая СУБД не поддерживает связи между объектами, выполняет лишь операции поиска значений по ключу, добавления и удаления записи.</p>
77 <p>Например:</p>
77 <p>Например:</p>
78 keyvalueuser1{Кузнецов В., отдел маркетинга}user2{name:Лена, position:секретарь}user3{ООО "Вектор"}user4{Трофимова Таня, отд.2, дизайнер}user5{Галина Николаевна, гл. бух.}user6{65,84,236}<p>Базы "ключ-значение" часто используют для кэширования данных и организации очередей.</p>
78 keyvalueuser1{Кузнецов В., отдел маркетинга}user2{name:Лена, position:секретарь}user3{ООО "Вектор"}user4{Трофимова Таня, отд.2, дизайнер}user5{Галина Николаевна, гл. бух.}user6{65,84,236}<p>Базы "ключ-значение" часто используют для кэширования данных и организации очередей.</p>
79 <p>Их достоинства - быстрый поиск и простое масштабирование.</p>
79 <p>Их достоинства - быстрый поиск и простое масштабирование.</p>
80 <p>Их недостаток - нельзя производить операции со значениями. Например - сортировать их или анализировать.</p>
80 <p>Их недостаток - нельзя производить операции со значениями. Например - сортировать их или анализировать.</p>
81 <p>Базы "ключ-значение" применяют в поисковой системе Google, "Википедии", "Фейсбуке*", интернет-магазине Amazon.</p>
81 <p>Базы "ключ-значение" применяют в поисковой системе Google, "Википедии", "Фейсбуке*", интернет-магазине Amazon.</p>
82 <p>Одна из самых популярных -<a>Redis</a>. Её используют Uber, Slack, Stack Overflow, сайты гостиниц и туристические, социальная сеть Twitter.</p>
82 <p>Одна из самых популярных -<a>Redis</a>. Её используют Uber, Slack, Stack Overflow, сайты гостиниц и туристические, социальная сеть Twitter.</p>
83 <p>В таких данные хранятся в виде иерархических структур (документов) с произвольным набором полей и их значений. Документы объединяются в коллекции.</p>
83 <p>В таких данные хранятся в виде иерархических структур (документов) с произвольным набором полей и их значений. Документы объединяются в коллекции.</p>
84 <p>Если провести аналогию с реляционными СУБД, то коллекциям соответствуют таблицы, а документам - строки в них.</p>
84 <p>Если провести аналогию с реляционными СУБД, то коллекциям соответствуют таблицы, а документам - строки в них.</p>
85 <p>Например, фрагмент документа с информацией о фильмах:</p>
85 <p>Например, фрагмент документа с информацией о фильмах:</p>
86 [ { "year" : 2020, "title" : "Душа!", "produced" : "Pixar Animation Studios", "directors" : [ "Пит Доктер", " Кемп Пауэрс"], "tagline" : "Everybody has a soul. Joe Gardner is about to find his", "rating" : 8.3, "genres" : ["Мультфильм", "Комедия"] }, { "year": 2020, "title": "Ход королевы", "created" : "Allan Scott", "book" : "Уолтер Тевис", "actors" : ["Аня Тейлор-Джой", "Мариэль Хеллер", "Моусес Ингрэм"], "rating" : 8.4, "genres" : ["Драма", "Спорт"] }, { "year": 1972, "title": "Зита и Гита", "рroduced" : "Sippy Films", "actors" : ["Хема Малини", "Санджив Кумар"], "genres" : ["Драма", “Мюзикл”, "Мелодрама"] } ]<p>Документоориентированные базы используют в <a>системах управления содержимым</a>(CMS) - для хранения каталогов и пользовательских профилей.</p>
86 [ { "year" : 2020, "title" : "Душа!", "produced" : "Pixar Animation Studios", "directors" : [ "Пит Доктер", " Кемп Пауэрс"], "tagline" : "Everybody has a soul. Joe Gardner is about to find his", "rating" : 8.3, "genres" : ["Мультфильм", "Комедия"] }, { "year": 2020, "title": "Ход королевы", "created" : "Allan Scott", "book" : "Уолтер Тевис", "actors" : ["Аня Тейлор-Джой", "Мариэль Хеллер", "Моусес Ингрэм"], "rating" : 8.4, "genres" : ["Драма", "Спорт"] }, { "year": 1972, "title": "Зита и Гита", "рroduced" : "Sippy Films", "actors" : ["Хема Малини", "Санджив Кумар"], "genres" : ["Драма", “Мюзикл”, "Мелодрама"] } ]<p>Документоориентированные базы используют в <a>системах управления содержимым</a>(CMS) - для хранения каталогов и пользовательских профилей.</p>
87 <p>Одна из самых популярных -<a>MongoDB</a>(там можно создавать процедуры на JavaScript).</p>
87 <p>Одна из самых популярных -<a>MongoDB</a>(там можно создавать процедуры на JavaScript).</p>
88 <p>Эти базы отличаются от реляционных лишь способом хранения данных на накопителе.</p>
88 <p>Эти базы отличаются от реляционных лишь способом хранения данных на накопителе.</p>
89 <p>Если реляционная база создаёт для каждой таблицы по файлу, то в колоночной отдельный файл создаётся для каждого столбца таблицы.</p>
89 <p>Если реляционная база создаёт для каждой таблицы по файлу, то в колоночной отдельный файл создаётся для каждого столбца таблицы.</p>
90 <p>Например, если реляционная таблица выглядит так:</p>
90 <p>Например, если реляционная таблица выглядит так:</p>
91 <strong>name</strong><strong>color</strong><strong>property</strong>волксерыйзубастыйкозабелаярогатаякапустазелёная<p>То те же записи колоночной базы будут выглядеть примерно так:</p>
91 <strong>name</strong><strong>color</strong><strong>property</strong>волксерыйзубастыйкозабелаярогатаякапустазелёная<p>То те же записи колоночной базы будут выглядеть примерно так:</p>
92 <p><strong>Что это даёт?</strong>Представьте, что вам нужны только названия объектов, а их свойства вас не интересуют.</p>
92 <p><strong>Что это даёт?</strong>Представьте, что вам нужны только названия объектов, а их свойства вас не интересуют.</p>
93 <p>При выполнении запроса в реляционной таблице просматривается каждая запись и из неё выбираются нужные данные. В колоночной базе с диска будет считана только одна колонка с названиями. Это сокращает время выполнения запроса, причём намного.</p>
93 <p>При выполнении запроса в реляционной таблице просматривается каждая запись и из неё выбираются нужные данные. В колоночной базе с диска будет считана только одна колонка с названиями. Это сокращает время выполнения запроса, причём намного.</p>
94 <p>Колоночные базы применяются в различных каталогах и архивах данных, работа с которыми основана на подобных выборках.</p>
94 <p>Колоночные базы применяются в различных каталогах и архивах данных, работа с которыми основана на подобных выборках.</p>
95 <p>Одна из самых популярных СУБД такого типа -<a>Apache Cassandra</a>.</p>
95 <p>Одна из самых популярных СУБД такого типа -<a>Apache Cassandra</a>.</p>
96 <p>В некоторых предметных областях данные удобно представлять в виде графов. Для их хранения лучше всего подходят графовые базы.</p>
96 <p>В некоторых предметных областях данные удобно представлять в виде графов. Для их хранения лучше всего подходят графовые базы.</p>
97 <p>Вершины (или узлы графа) - это объекты (сущности), а рёбра графа - взаимосвязи между ними.</p>
97 <p>Вершины (или узлы графа) - это объекты (сущности), а рёбра графа - взаимосвязи между ними.</p>
98 <p>Например, информация о друзьях в социальных сетях просто идеальна для представления в виде графа:</p>
98 <p>Например, информация о друзьях в социальных сетях просто идеальна для представления в виде графа:</p>
99 <p>Графовые базы применяют в социальных сетях, сервисах рекомендаций, системах выявления мошенничества и им подобных.</p>
99 <p>Графовые базы применяют в социальных сетях, сервисах рекомендаций, системах выявления мошенничества и им подобных.</p>
100 <p>Одна из популярнейших графовых СУБД с открытым кодом и собственным языком запросов - это<a>Neo4j</a>.</p>
100 <p>Одна из популярнейших графовых СУБД с открытым кодом и собственным языком запросов - это<a>Neo4j</a>.</p>
101 <p>Приходите к нам на курс "<a>Базы данных для разработчиков</a>". Вы изучите проектирование баз данных и язык SQL, узнаете, как выбрать СУБД для своего проекта и выжать из неё максимум. Сможете работать с базами в банковской сфере, бэкенд-разработке веб- и мобильных приложений.</p>
101 <p>Приходите к нам на курс "<a>Базы данных для разработчиков</a>". Вы изучите проектирование баз данных и язык SQL, узнаете, как выбрать СУБД для своего проекта и выжать из неё максимум. Сможете работать с базами в банковской сфере, бэкенд-разработке веб- и мобильных приложений.</p>
102 <p>* Решением суда запрещена "деятельность компании Meta Platforms Inc. по реализации продуктов - социальных сетей Facebook и Instagram на территории Российской Федерации по основаниям осуществления экстремистской деятельности.</p>
102 <p>* Решением суда запрещена "деятельность компании Meta Platforms Inc. по реализации продуктов - социальных сетей Facebook и Instagram на территории Российской Федерации по основаниям осуществления экстремистской деятельности.</p>
103 <a><b>Бесплатный курс по Python ➞</b>Мини-курс для новичков и для опытных кодеров. 4 крутых проекта в портфолио, живое общение со спикером. Кликните и узнайте, чему можно научиться на курсе. Смотреть программу</a>
103 <a><b>Бесплатный курс по Python ➞</b>Мини-курс для новичков и для опытных кодеров. 4 крутых проекта в портфолио, живое общение со спикером. Кликните и узнайте, чему можно научиться на курсе. Смотреть программу</a>