---
title: Базы данных и системы обработки данных
questionDates:
  q-transfer-0065: '2026-10-01'
  q-transfer-0066: '2026-10-01'
seo:
  description: >-
    Тема «Базы данных и системы обработки данных» для собеседования Data
    Scientist. В чем отличия между нереляционными (NoSQL) и реляционными (SQL)
    базами данных, и для каких целей они обычно применяются? Чем SQLAlchemy Core
    отличается от ORM?
  title: Базы данных и системы обработки данных — Data Scientist
---

[Все темы Data Scientist](/prep/data-scientist)

Подтемы:

- [Реляционные и нереляционные БД](#q-14bee738d69b81ed9160d775888fe482)
- [PostgreSQL](#q-14bee738d69b81ba965dfdd258987e39)
- [План выполнения запроса](#q-14bee738d69b81ba95a9cbee6a83bd98)
- [Apache Spark](#q-14bee738d69b8172b139f26e302dfc13)
- [Работа с данными](#q-transfer-0065)

## <strong>В чем отличия между нереляционными</strong> <code>&#40;NoSQL&#41;</code> <strong>и реляционными</strong> <code>&#40;SQL&#41;</code> <strong>базами данных, и для каких целей они обычно применяются?</strong> [#q-14bee738d69b81ed9160d775888fe482]

Нереляционные <code>&#40;NoSQL&#41;</code> и реляционные <code>&#40;SQL&#41;</code> базы данных отличаются по структуре данных, модели запросов и способу обработки информации&#58;

#### <strong>Реляционные базы данных</strong> <code>&#40;SQL&#41;</code>&#58;

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

- Для доступа и обработки данных используется язык структурированных запросов (SQL).

- Подходят для приложений с жесткими требованиями к структуре данных и целостности, таких как финансовые системы, системы управления заказами и CRM.

#### <strong>Нереляционные базы данных</strong> <code>&#40;NoSQL&#41;</code>&#58;

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

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

- Предоставляют горизонтальное масштабирование и высокую производительность при работе с большими объемами данных.

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

:::note[Ссылки для изучения]

1. [Реляционная, документная, ключ-значение, колоночная и графовая модели данных](https://learn.microsoft.com/ru-ru/azure/architecture/data-guide/technology-choices/understand-data-store-models)
   :::

---

## <strong>Указана база PosgreSQL. Вы ее самостоятельно разворачивали, в контейнере?</strong> [#q-14bee738d69b81ba965dfdd258987e39]

Опишите свой реальный опыт развёртывания PostgreSQL. Если использовали Docker, расскажите об образе, настройках подключения, постоянном томе для данных и запуске через Docker CLI или Compose. Если самостоятельно базу не разворачивали, укажите это прямо.

:::note[Ссылки для изучения]

1. [PostgreSQL 13.3 в Docker: подключение, Compose и постоянное хранение](https://habr.com/ru/articles/578744/)
   :::

---

## Как получить план выполнения запроса <code>&#40;EXPLAIN&#47;EXPLAIN ANALYZE&#41;</code>? [#q-14bee738d69b81ba95a9cbee6a83bd98]

Чтобы получить план выполнения запроса в PostgreSQL, вы можете использовать команду <code>EXPLAIN</code> перед вашим SQL-запросом. Если вы хотите выполнить запрос и получить его план выполнения, используйте команду <code>EXPLAIN ANALYZE</code>.

:::note[Ссылки для изучения]

1. [EXPLAIN и EXPLAIN ANALYZE в PostgreSQL: план и фактическое выполнение](https://postgrespro.ru/docs/postgresql/18/using-explain)
   :::

---

## <strong>Что представляет собой Apache Spark и какие цели он решает?</strong> [#q-14bee738d69b8172b139f26e302dfc13]

Apache Spark - это распределенная вычислительная система, предназначенная для обработки и анализа больших объемов данных. Он предоставляет высокоуровневый <code>API</code> для работы с данными, включая операции над данными в памяти, потоковую обработку, машинное обучение и анализ графов. Spark использует концепцию <code>Resilient Distributed Datasets &#40;RDD&#41;</code>, которая позволяет выполнить операции над данными в распределенной среде с высокой отказоустойчивостью.

Цели Apache Spark&#58;

1. <strong>Ускорение обработки данных</strong>&#58; Spark обеспечивает высокую
   производительность за счет выполнения операций в памяти и оптимизации
   планирования выполнения задач.

1. <strong>Обработка больших данных</strong>&#58; Spark позволяет обрабатывать
   данные, которые не помещаются в память одного узла, путем распределения их на
   кластер узлов.

1. <strong>Многозадачность и гибкость</strong>&#58; Spark поддерживает широкий
   спектр задач обработки данных, включая аналитику, машинное обучение,
   потоковую обработку и анализ графов.

1. <strong>Упрощение разработки</strong>&#58; Spark предоставляет
   высокоуровневые API на разных языках программирования, таких как Scala, Java,
   Python и R, что облегчает разработку и развертывание приложений обработки
   данных.

:::note[Ссылки для изучения]

1. [Apache Spark: возможности и архитектура распределённого кластера на примере Azure HDInsight](https://learn.microsoft.com/ru-ru/azure/hdinsight/spark/apache-spark-overview)
1. [Практика машинного обучения с Apache Spark ML](https://habr.com/ru/companies/otus/articles/653033/)
   :::

---

## Почему join двух таблиц может неожиданно исчерпать память? [#q-transfer-0065]

Главная причина неожиданного роста join состоит в неуникальных ключах. Если одному ключу соответствуют `m` строк слева и `n` справа, результат содержит `m*n` строк. До join проверяют уникальность, распределение multiplicity и оценивают размер результата. Помогают фильтрация и выбор колонок до соединения, подходящие типы, индексы, партиционирование и выполнение join в СУБД. Chunking снижает пиковую память, но не спасает от логически огромного результата. После join проверяют число строк и гранулярность.

:::note[Ссылки для изучения]

1. [Неуникальные ключи JOIN и разрастание результата: fan-out, гранулярность и предварительная агрегация](https://habr.com/ru/companies/otus/articles/1079620/)
   :::

---

## Чем SQLAlchemy Core отличается от ORM? [#q-transfer-0066]

SQLAlchemy Core работает с `Engine`, соединениями, таблицами и expression language и возвращает строки результата. ORM связывает таблицы с Python-классами, управляет identity map, отношениями и unit of work через `Session`. Оба подхода используют parameter binding и общую SQL-базу; ORM не отменяет знания транзакций и запросов. Core удобен для явных bulk-запросов и SQL-подобной логики, ORM для доменных объектов и связей. Их можно сочетать в одной транзакции, контролируя границы `Session`.

:::note[Ссылки для изучения]

1. [SQLAlchemy 2.0: отличие Core от ORM и работа с Session — учебник ТГТУ, с.15–22](https://www.tstu.ru/book/elib1/pdf/2024/EliseevAI2.pdf#page=16)
   :::
