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

8 навыков, необходимых в профессии Data Scientist

Светлана Шаповалова, редактор блога «Нетологии», адаптировала статью Dave Holtz, в которой он рассказал о восьми навыках, которые помогут начать карьеру Data Scientist.

Интересна профессия Data Scientist? Самое время начать её изучать: Томас Дэвенпорт и Дж. Патил, известные лидеры области, в статье для Harvard Business Review назвали Data Scientist «самой желанной профессией XXI века».

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

навыки работы с адресными базами данных. Смотреть фото навыки работы с адресными базами данных. Смотреть картинку навыки работы с адресными базами данных. Картинка про навыки работы с адресными базами данных. Фото навыки работы с адресными базами данных

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

Я расскажу вам о восьми важных навыках для Data Scientist.

Базовый инструментарий

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

Базовые знания статистики

Базовое понимание статистики жизненно необходимо в Data Science. Один интервьюер пожаловался мне, что большинство кандидатов, которых он собеседовал, даже не смогли внятно сформулировать определение P-значения. Вы должны понимать, что такое статистические тесты, распределения, метод максимального правдоподобия и т. д.
Вспомните, чему вас учили на парах по статистике. Это также понадобится при работе с машинным обучением.

Однако, самое важное — это чтобы вы точно понимали, когда и какой подход необходимо использовать.

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

Машинное обучение

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

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

Важнее умение видеть всю ситуацию целиком и понимать, когда уместно применять те или иные методы.

Многомерный анализ и линейная алгебра

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

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

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

Обработка данных

Зачастую данные, которые вы анализируете, не организованы, поэтому с ними трудно работать. Поэтому важно знать, как бороться с их разрозненностью. Это могут быть пропущенные значения, непоследовательное форматирование строки (например, «нью-йорк» и «нй» вместо «Нью-Йорк») и форматирование даты (’01 / 01/2014′ вместо ‘2014-01-01’ и т.д.). Этот навык важен как для небольших компаний, где вы только начинаете работать с данными, так и для data-driven компаний.

Визуализация и передача данных

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

Передача данных означает, что вам понадобится описывать свои выводы или методы работы как технической, так и нетехнической аудитории.

Что касается визуализации данных, будет полезно ознакомится с такими инструментами как ggplot и d3.js. Важно не просто узнать, как работать с инструментами визуализации данных, но и понять принципы кодирования данных и передачи информации.

Программная разработка

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

Мышление в мире данных

Компаниям важно знать, что вы умеете решать задачи, основываясь на данных.

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

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

Источник

Работа с базами данных глазами разработчика

навыки работы с адресными базами данных. Смотреть фото навыки работы с адресными базами данных. Смотреть картинку навыки работы с адресными базами данных. Картинка про навыки работы с адресными базами данных. Фото навыки работы с адресными базами данных

Когда вы разрабатываете новый функционал с использованием базы данных, цикл разработки обычно включает следующие этапы (но не ограничивается ими):

Написание SQL миграции → написание кода → тестирование → релиз → мониторинг.

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

Поскольку мы в компании работаем с PostgreSQL, а серверный код пишем на Java, то примеры будут основаны на этом стеке, хотя большинство идей не зависят от используемой БД и языка программирования.

SQL-миграция

Первый этап разработки после проектирования – это написание SQL-миграции. Основной совет – не проводите никаких ручных изменений схемы данных, а всегда делайте это через скрипты и храните их в одном месте.

У нас в компании разработчики сами пишут SQL-миграции, поэтому все миграции хранятся в репозитории с основным кодом. В некоторых компаниях изменением схемы занимаются администраторы БД, в таком случае реестр миграций находится где-то у них. Так или иначе такой подход приносит следующие преимущества:

Мы используем flyway, поэтому дальше будет немного информации о нем:

Когда Java-код устаревает, миграция может быть удалена, чтобы не плодить legacy (сам Java-класс миграции остаётся, но внутри он пустой). У нас это может произойти не ранее, чем через месяц после вывода миграции на production – мы считаем, что это достаточное время для того, чтобы все тестовые окружения и локальные среды разработчиков обновились. Стоит отметить, что поскольку Java-миграции используются только для DML, то их удаление никак не влияет на создание новых БД с нуля.

Важный нюанс для тех, кто использует pg_bouncer

Flyway во время проведения миграции накладывает блокировку для предотвращения одновременного выполнения нескольких миграций. Упрощенно это работает так:

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

Написание кода

Миграция создана, теперь пишем код.

Можно выделить 3 подхода для работы с БД со стороны приложения:

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

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

DSL-библиотеки

Примерно посередине между этими подходами находится ещё один, который заключается в использовании DSL-библиотек (jOOQ, Querydsl и др.). Они, как правило, гораздо легковеснее, чем ORM, но более удобны, чем полностью ручная работа с БД. Использование DSL-библиотек не так распространено, поэтому в этой статье кратко рассмотрим именно этот подход.

Речь пойдёт про одну из библиотек — jOOQ. Что она предлагает:

При желании можно использовать plain sql:

Очевидно, что в таком случае корректность запроса и разбор результатов полностью лежат на ваших плечах.

jOOQ Record и POJO

BookRecord в примере выше является оберткой над строкой в таблице book и реализует паттерн active record. Поскольку этот класс являются частью слоя доступа к данным (к тому же конкретной его реализации), то вы, возможно, не хотели бы передавать его в другие слои приложения, а использовать какой-то свой pojo-объект. Для удобства конвертации record pojo jooq предлагает несколько механизмов: автоматические и ручной. В документации по ссылкам выше есть разнообразные примеры их использования при чтении, но нет примеров для вставки новых данных и обновления. Восполним этот пробел:

Как можно увидеть, все достаточно просто.

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

Также jooq может генерировать DAO классы с набором базовых методов для упрощения работы с данными таблицы и уменьшения объема ручного кода (это очень похоже на Spring Data JPA):

Мы в компании не используем автогенерацию DAO-классов – генерируем только обертки над объектами БД, а запросы пишем сами. Генерация оберток происходит каждый раз при пересборке отдельного мавен-модуля, в котором хранятся миграции. Чуть далее будут детали о том, как это реализовано.

Тестирование

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

Тоже самое касается и вопроса классификации тестов. В этой статье предлагается использовать следующий вариант разделения:

Интеграционные тесты в отличии от unit-тестов проверяют взаимодействие нескольких модулей между собой. Работа с БД – хороший пример, когда интеграционные тесты имеют смысл, потому что очень сложно качественно «замокать» БД, учитывая все её нюансы. Интеграционные тесты в большинстве случаев являются хорошим компромиссом между скоростью выполнения и гарантиями качества при тестировании БД в сравнении с другими видами тестирования. Поэтому в этой статье поговорим подробнее об этом виде тестирования.

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

Интеграционное тестирование

Когда речь заходит об интеграционном тестировании кода, работающего с БД, большинство разработчиков задаётся вопросами: как запускать БД, как инициализировать её состояние начальными данными и как делать это как можно быстрее?

Какое-то время назад достаточно распространённой практикой в интеграционном тестировании было использование h2. Это in-memory БД, написанная на Java, которая имеет режимы совместимости с большинством популярных БД. Отсутствие необходимости установки БД и универсальность h2 сделали её весьма удобной заменой настоящих БД, особенно если приложение не зависит от конкретной БД и использует только то, что входит в стандарт SQL (что бывает далеко не всегда).

Но проблемы начинаются в тот момент, когда вы используете какой-то хитрый функционал БД (или совсем новый из свежей версии), поддержка которого не реализована в h2. Да и в целом, поскольку это «симуляция» конкретной СУБД, то всегда могут быть некоторые отличия в поведении.

Ещё один вариант – использование embedded postgres. Это настоящий Postgres, поставляемый в виде архива и не требующий установки. Он позволяет работать как с обычной версией Postgres.

Есть несколько реализаций, самые популярные от Yandex и openTable. Мы в компании использовали версию от Yandex. Из минусов – он достаточно медленный при запуске (каждый раз происходит распаковка архива и запуск БД – занимает 2-5 секунд в зависимости от мощности компьютера), также есть проблема с отставанием от официальной релизной версии. Ещё сталкивались с проблемой, что после попытки остановки из кода происходила какая-нибудь ошибка и процесс Postgres оставался висеть в ОС – приходилось убивать его вручную.

testcontainers

Третий вариант – использование docker. Для Java существует библиотека testcontainers, которая предоставляет api для работы с docker-контейнерами из кода. Таким образом, любая зависимость в вашем приложении, которая имеет docker-образ, может быть заменена в тестах с помощью testcontainers. Также для для многих популярных технологий есть отдельные готовые классы, которые предоставляют более удобный api в зависимости от используемого образа:

Если для образа нет отдельного класса в testcontainers, то создание контейнера выглядит примерно так:

Если вы используете JUnit4, JUnit5 или Spock, то в testcontainers есть доп. поддержка для этих фреймворков, которая упрощает написание тестов.

Ускорение тестов с testcontainers

Несмотря на то, что переход с embedded postgres на testcontainers ускорил наши тесты за счёт более быстрого запуска Postgres, со временем тесты стали снова замедляться. Причиной этого послужило увеличение количества SQL-миграций, которые flyway выполняет при запуске. Когда количество миграций перевалило за сотню, время их выполнения было порядка 7-8 секунд, что значительно замедляло тесты. Это работало примерно так:

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

Далее немного технических деталей о том, как это реализовать

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

Важный нюанс, что команда не сохраняет данные примонтированных разделов. Но если взять официальный docker-образ Postgres, то директория PGDATA, в которой хранятся данные, располагается в отдельном разделе (чтобы после перезапуска контейнера данные не терялись), следовательно при выполнении commit состояние самой БД не сохраняется.

Решение простое – не использовать раздел для PGDATA, а держать данные в памяти, что для тестов вполне нормально. Есть 2 способа как добиться этого – использовать свой dockerfile (примерно вот такой) без создания раздела, либо переопределить переменную PGDATA при запуске официального контейнера (раздел останется, но использоваться не будет). Второй путь выглядит значительно проще:

Перед выполнением commit рекомендуется выполнить checkpoint для postgres, чтобы сбросить изменения из shared buffers на «диск» (который соответствует переопределенной переменной PGDATA):

Сам коммит выполняется примерно так:

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

Еще пара слов об оптимизации времени сборки

Как уже было сказано ранее, при сборке отдельного мавен-модуля с миграциями помимо прочего выполняется генерация java-оберток над объектами БД. Для этого используется самописный мавен-плагин, который запускается перед компиляцией основного кода и выполняет 3 действия:

Плагин (метод «start»):

Методы save-state и stop реализованы аналогичным образом и поэтому здесь не представлены.

Релиз

Код написан и протестирован – пора релизить. В целом, сложность релиза зависит от следующих факторов:

Размер БД влияет на время миграции – чем больше база, тем больше вероятность, что вам потребуется провести длительную миграцию.

Бесшовность отчасти является результирующим фактором – если релиз проводится с выключением (downtime), то тогда первые 3 пункта не так важны и влияют только на время недоступности приложения.

Если говорить про наш сервис, то это:

Каждый сервер приложения при запуске сверяет версию БД с версиями скриптов, которые есть в исходном коде (в терминах flyway это называется validation). Если они различаются, сервер не будет запущен. Это гарантирует совместимость кода и базы данных. Не может возникнуть такая ситуация, когда, например, код работает с таблицей, которую еще не создали, потому что миграция находится в другой версии сервера.

Но это конечно не решает проблемы, когда, например, в новой версии приложения есть миграция, удаляющая столбец в таблице, который может использоваться в старой версии сервера. Сейчас мы проверяем такие ситуации только на этапе ревью (оно обязательно), но по-хорошему необходимо внедрить доп. этап с такой проверкой в CI/CD-цикл.

Иногда миграции могут выполняться долго (например, при обновлении данных большой таблицы) и чтобы не замедлять при этом релизы, мы используем технику комбинированных миграций. Комбинированность заключается в ручном прогоне миграции на запущенном сервере (через панель администрирования, без flyway и, соответственно, без фиксирования в истории миграций), а затем «штатный» вывод такой же миграции в следующей версии сервера. На такие миграции накладываются следующие требования:

навыки работы с адресными базами данных. Смотреть фото навыки работы с адресными базами данных. Смотреть картинку навыки работы с адресными базами данных. Картинка про навыки работы с адресными базами данных. Фото навыки работы с адресными базами данных

Мониторинг

После релиза цикл разработки не заканчивается. Чтобы понять работает ли новый функционал (и как он работает) необходимо «обкладываться» метриками. Их можно разделить на 2 группы: бизнесовые и системные.

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

Метрики второй группы примерно одинаковы для всех – они определяют техническое состояние сервера: cpu, памяти, сети, БД и пр.

Что конкретно нужно мониторить и как это делать – это тема огромного множества отдельных статей и здесь она затрагиваться не будет. Хочется напомнить лишь самые базовые (даже капитанские) вещи:

определяйте метрики заранее

Необходимо определить перечень основных метрик. И сделать это стоит заранее, до релиза, а не после первого инцидента, когда вы не понимаете, что происходит с системой.

настраивайте автоматические алерты

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

собирайте метрики со всех узлов

Метрик, как и логов, много не бывает. Наличие данных с каждого узла вашей системы (сервер приложения, БД, пулер соединений, балансировщик и пр.) позволяет иметь полную картину о её состоянии, и в случае необходимости вы сможете быстрее локализовать проблему.

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

Источник

Путеводитель по базам данных в 2021 г

Данные — это один из наиболее важных компонентов геопространственных технологий и, пожалуй, любой другой отрасли. К управлению данными сейчас относятся серьезно во всех отраслях, поэтому знания по этой дисциплине имеют важное значение для карьеры ИТ-специалистов. Этот цикл статей задуман как универсальное руководство, в котором мы рассмотрим тему от и до, начиная с вопроса «Что такое данные?» и заканчивая изучением и применением геопространственных запросов.

навыки работы с адресными базами данных. Смотреть фото навыки работы с адресными базами данных. Смотреть картинку навыки работы с адресными базами данных. Картинка про навыки работы с адресными базами данных. Фото навыки работы с адресными базами данных

Основные понятия баз данных

Что такое данные?

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

Что такое база данных?

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

Зачем нужна база данных?

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

Система управления базами данных (СУБД)

Итак, мы уже знаем, что данные и базы данных важны, но как осуществляется работа с базами данных в компьютерных системах? Вот тут на сцену и выходит СУБД. СУБД — это программное обеспечение, предоставляющее нам способ взаимодействия с базами данных на компьютере для выполнения различных операций, таких как создание, редактирование, вставка данных и т. д. Для этого СУБД предоставляет нам соответствующие API. Редко какие программы не используют СУБД для работы с данными, хранящимися на диске.Помимо операций с данными СУБД также берет на себя резервное копирование, проверку допуска, проверку состояния базы данных и т. д. Поэтому рекомендуется всегда использовать СУБД при работе с базами данных.

Пространственные данные и база данных

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

Типы баз данных

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

Реляционные базы данных и РСУБД

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

навыки работы с адресными базами данных. Смотреть фото навыки работы с адресными базами данных. Смотреть картинку навыки работы с адресными базами данных. Картинка про навыки работы с адресными базами данных. Фото навыки работы с адресными базами данныхОбразец таблицы с информацией

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

навыки работы с адресными базами данных. Смотреть фото навыки работы с адресными базами данных. Смотреть картинку навыки работы с адресными базами данных. Картинка про навыки работы с адресными базами данных. Фото навыки работы с адресными базами данныхСвязь между двумя столбцами

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

По сравнению с базами данных NoSQL, недостатком реляционных баз данных является относительно медленное получение результатов, когда количество данных стремительно увеличивается (по мнению автора статьи — прим. пер.). Еще один недостаток заключается в том, что при добавлении каждой записи нужно следовать определенным правилам (типы столбцов, количество столбцов и т. д.), — мы не можем просто добавить отдельный столбец только для одной записи.В реляционных базах данных используется SQL (Structured Query Language — язык структурированных запросов), с помощью которого пользователи могут взаимодействовать с данными, хранящимися в таблицах. SQL стал одним из наиболее широко используемых языков для этой цели. Мы подробнее поговорим об SQL чуть позже.Вот примеры некоторых известных и часто используемых реляционных баз данных: PostgreSQL, MySQL, MS SQL и т. д. У каждой крупной компании, занимающейся реляционными базами данных, есть собственная версия SQL. В большинстве аспектов они выглядят одинаково, но иногда требуется немного изменить какой-нибудь запрос, чтобы получить те же результаты в другой базе данных (например, при переходе из PostgreSQL в MySQL).

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

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

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

навыки работы с адресными базами данных. Смотреть фото навыки работы с адресными базами данных. Смотреть картинку навыки работы с адресными базами данных. Картинка про навыки работы с адресными базами данных. Фото навыки работы с адресными базами данныхБаза данных NoSQL реального времени в Google Firebase

База данных NoSQL реального времени в Google Firebase

При использовании баз данных NoSQL пользователям иногда приходится прописывать собственную логику, чтобы добавить уникальный ключ к каждой записи и тем самым обеспечить доступ к записям. В большинстве стандартных баз данных NoSQL, таких как Firebase и MongoDB, для хранения данных используется формат JSON. Благодаря этому очень легко и удобно выполнять операции с данными из веб-приложений, используя JavaScript, Python, Ruby и т. д.

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

Очевидно, что нам хотелось бы сохранить точку, линию, многоугольник, растры и т. д. так, чтобы это имело смысл, вместо того чтобы сохранять просто координаты. Нам нужна СУБД, которая позволяет не только сохранять данные, но и запрашивать их пространственными методами (буфер, пересечение, вычисление расстояния и т. д.). На сегодняшний день для этого лучше всего подходят реляционные базы данных, поскольку в SQL есть функции, помогающие выполнять подобные операции. Использование таких дополнительных средств, как PostGIS для PostgreSQL, открывает разработчикам возможности для написания сложных пространственных запросов. С другой стороны, NoSQL тоже работает в области геопространственных технологий: например, MongoDB предоставляет кое-какие функции для выполнения геопространственных операций. Однако реляционные базы данных все же лидируют на рынке с большим отрывом.

Работа с РСУБД

Основное внимание мы уделим РСУБД, так как именно эти системы в большинстве случаев мы будем использовать для хранения пространственных данных и работы с ними. В качестве примера мы будем использовать PostgreSQL, поскольку это самая перспективная реляционная база данных с открытым исходным кодом, а ее расширение PostGIS позволяет работать и с пространственными данными. Вы можете установить PostgreSQL, следуя инструкциям из документации. Помимо PostgreSQL рекомендуется также загрузить и установить pgAdmin. Платформа pgAdmin предоставляет веб-интерфейс для взаимодействия с базой данных. Также для этого можно загрузить и установить какое-либо другое совместимое ПО или использовать командную строку.

навыки работы с адресными базами данных. Смотреть фото навыки работы с адресными базами данных. Смотреть картинку навыки работы с адресными базами данных. Картинка про навыки работы с адресными базами данных. Фото навыки работы с адресными базами данныхpgAdmin 4 на Mac

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

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

навыки работы с адресными базами данных. Смотреть фото навыки работы с адресными базами данных. Смотреть картинку навыки работы с адресными базами данных. Картинка про навыки работы с адресными базами данных. Фото навыки работы с адресными базами данныхСоздание новой базы данных для проекта

В инструменте запросов (Query Tool) база данных создается следующим образом:

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

pgAdmin позволяет нам выбрать в таблице различные ключи и ограничения, например Not Null (запрет на отсутствующие значения), Primary Key (первичный ключ) и т. д. Обсудим это подробнее чуть позже.

навыки работы с адресными базами данных. Смотреть фото навыки работы с адресными базами данных. Смотреть картинку навыки работы с адресными базами данных. Картинка про навыки работы с адресными базами данных. Фото навыки работы с адресными базами данныхСоздание таблицы пользователей

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

CRUD-операции с данными в таблицах

CRUD-операции (создание, чтение, обновление и удаление — Create, Retrieve, Update, Delete) — это своего рода hello world в мире СУБД. Поскольку эти операции используются наиболее часто, команды для их выполнения одинаковы во всех РСУБД. Мы будем писать и выполнять запросы в инструменте запросов в pgAdmin, который вызывается следующим образом:

навыки работы с адресными базами данных. Смотреть фото навыки работы с адресными базами данных. Смотреть картинку навыки работы с адресными базами данных. Картинка про навыки работы с адресными базами данных. Фото навыки работы с адресными базами данныхИнструмент запросов (Query Tool) в pgAdmin

1. Создание новой записи

Для добавления новой записи в таблицу используйте следующую команду:

INSERT, INTO, VALUE являются ключевыми словами в SQL, поэтому их нельзя использовать в качестве переменных, значений и т. д. Чтобы добавить новую запись в нашу таблицу пользователей, мы напишем в инструменте запросов следующий запрос:

навыки работы с адресными базами данных. Смотреть фото навыки работы с адресными базами данных. Смотреть картинку навыки работы с адресными базами данных. Картинка про навыки работы с адресными базами данных. Фото навыки работы с адресными базами данных

Обратите внимание: строки всегда следует заключать в ‘ ‘ (одинарные кавычки), а не в » » (двойные кавычки).

2. Получение записей (всех или нескольких)

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

Этот код извлекает весь набор данных. Если вы хотите получить только 20 записей, напишите:

Если вы хотите получить данные из всех столбцов, то вместо перечисления названий всех столбцов можно написать:

Если вы хотите получить результат с определенным условием, используйте ключевое слово WHERE, как показано ниже:

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

навыки работы с адресными базами данных. Смотреть фото навыки работы с адресными базами данных. Смотреть картинку навыки работы с адресными базами данных. Картинка про навыки работы с адресными базами данных. Фото навыки работы с адресными базами данных

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

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

В нашем случае мы обновим таблицы с помощью следующих запросов:

навыки работы с адресными базами данных. Смотреть фото навыки работы с адресными базами данных. Смотреть картинку навыки работы с адресными базами данных. Картинка про навыки работы с адресными базами данных. Фото навыки работы с адресными базами данныхОбновление записей

4. Удаление записей (всех или нескольких)Удалять записи в SQL легко. Пользователь может удалить либо все строки, либо только определенные строки, добавив условие WHERE.

навыки работы с адресными базами данных. Смотреть фото навыки работы с адресными базами данных. Смотреть картинку навыки работы с адресными базами данных. Картинка про навыки работы с адресными базами данных. Фото навыки работы с адресными базами данныхУдаление записей из таблицы

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

Перевод подготовлен в рамках курса «Базы данных». Все желающих приглашаем на бесплатный двухдневный онлайн-интенсив «Бэкапы и репликация PostgreSQL. Практика применения». Цели занятия: настроить бэкапы; восстановить информацию после сбоя. Регистрация здесь.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *