Что такое объектно-реляционное сопоставление?
Что такое объектно-реляционное сопоставление?
Объектно-реляционное сопоставление (ORM) – это процесс абстрагирования связи между сущностями (объектами) языка программирования и соответствующими им элементами базы данных.
При создании приложений программисты определяют объекты в коде, соответствующие реальным концепциям. Объектные данные обрабатываются в коде, но хранятся в базе данных, как определено проектом системы данных. Например, в вашем коде может быть объект клиента, содержащий информацию о клиенте, но стандартная база может хранить эти данные в нескольких таблицах.
Объектно-реляционное сопоставление – это программный слой, который преобразует объектные данные в формат базы данных, скрывая детали работы с базой данных от разработчика. Таким образом, код останется неизменным, даже если стандартные базы данных будут заменены новыми или иными проектами. Объектно-реляционное сопоставление позволяет создавать модульные приложения, простые в управлении и обслуживании.
Как работают объектно-реляционные сопоставления?
Объектно-реляционное отображение (ORM) связывает приложения, написанные на объектно-ориентированных языках программирования (OOP), с базой данных. Эти типы приложений и баз данных часто используются вместе, но каждый из них обрабатывает данные по-разному. Добавление объектно-реляционного сопоставления между ними позволяет каждому отправлять данные в понятном для другого формате. Одно можно изменить, не влияя на другое.
Объектно-ориентированный язык программирования
Языки OOP организуют данные в объекты, представляющие собой структуры кода с одним или несколькими атрибутами. Например, в приложении ООП можно определить объект, представленный в виде класса с постоянными данными, например автомобиль, с такими атрибутами, как марка, модель, VIN-код, цвет и пробег.
Некоторые из самых популярных языков объектно-ориентированного программирования (OOP) включают Python, Java, JavaScript и .NET/C#.
Реляционные базы данных
Реляционные базы данных структурируют данные в таблицы, подобно серии связанных электронных таблиц. Каждая таблица состоит из набора столбцов с уникальными записями в каждой строке.
Например, ваша база данных автомобилей может содержать несколько таблиц. Один из них может содержать данные бренда, такие как марка, модель и VIN-код. В другой таблице можно хранить атрибуты отдельных автомобилей, такие как владелец, цвет и пробег. Одними из самых популярных реляционных баз данных являются MySQL, PostgreSQL и SQL Server.
В веб-разработке инструмент объектно-реляционного картирования (ORM) преобразует данные, отправленные из объектно-ориентированного приложения, в реляционную базу данных, не требуя от приложения знания структуры этих данных в базе.
Объектно-реляционные сопоставления
Можно создать объектно-реляционное сопоставление, которое иногда называют менеджером объектно-реляционных связей. Оно указывает базе данных, где хранить все данные, запрошенные приложением, даже если разные структуры данных сохраняются по-разному. Когда приложение запрашивает все атрибуты конкретного автомобиля, ORM инструктирует базу данных, как извлечь эти данные из нескольких таблиц.
Поскольку сопоставления являются абстрактными, при изменении структуры базы данных или переходе на другую базу данных ORM сможет корректно указать на нужные данные с минимальными изменениями в коде.
Распространенные платформы ORM
Инструменты и фреймворки ORM доступны для моделирования данных на многих популярных объектно-ориентированных языках программирования. Некоторые из самых распространенных включают:
- Hibernate для Java
- SQLAcademy для Python
- Entity Framework для .NET / C#
Можно ли использовать ORM с нереляционной базой данных?
Нет, нереляционные базы данных хранят данные в разных форматах и взаимодействуют с приложениями по-другому. Наиболее распространенным типом нереляционной базы данных является документо-ориентированная база. Документы могут иметь множество атрибутов, похожих на объекты, но с различной программной структурой.
Некоторые из самых популярных нереляционных баз данных включают MongoDB и NoSQL.
В чем разница между ORM и ORDBMS?
Объектно-реляционная система управления базами данных (ORDBMS) – это тип базы данных, который объединяет элементы реляционной и объектно-ориентированной моделей. Она может хранить записи, структурированные как объекты – аналогично тому, как это реализуется в объектно-ориентированных языках программирования. При этом вы также можете выполнять реляционные запросы, похожие на SQL, к этим записям. Такая комбинация возможностей позволяет хранить более широкий спектр типов данных, чем это возможно в стандартной реляционной базе данных.
Если объектно-реляционное отображение (ORM) представляет собой уровень абстракции данных на уровне приложения, то объектно-реляционная (ORDBMS) предоставляет объектно-ориентированные возможности непосредственно на уровне базы данных.
ORM работает внутри приложения и генерирует SQL-запросы в фоновом режиме. ORDBMS управляет хранением данных и выполнением запросов на уровне самой базы данных, обеспечивая нативную поддержку расширенных объектных типов.
В чем разница между ORM и SQL?
SQL (язык структурированных запросов) – это стандартный язык, используемый для взаимодействия с реляционными базами данных. Он позволяет создавать схемы баз данных и управлять ими, вставлять и обновлять данные, а также запрашивать записи с помощью декларативных команд.
SQL обеспечивает прямой низкоуровневый контроль над базой данных. ORM предоставляет более высокоуровневый, абстрактный интерфейс, который часто ускоряет разработку и упрощает обслуживание кода.
ORM идеально подходит для упрощения стандартных задач баз данных и согласования с кодом приложения, но SQL по-прежнему необходим для настройки производительности, сложных запросов или полного контроля над доступом к данным.
Зачем использовать ORM вместо SQL-запросов?
SQL требует ручного написания команд для взаимодействия с базой данных, тогда как ORM автоматически преобразует объектно-ориентированный код в SQL за кулисами.
ORM помогают сократить объем кода, необходимого для разработки объектно-ориентированной программы, которая должна выполнять множество запросов к базе данных. Вместо того чтобы вручную программировать множество запросов к базе данных, которые необходимо будет обслуживать, ваши разработчики программируют, как отправлять запросы в ORM.
Работа на более понятном языке программирования также облегчает чтение и отладку кода.
Каковы преимущества использования ORM?
Системы ORM обеспечивают перечисленные далее преимущества.
Ускоренная разработка приложений
ORM помогают извлекать сложные данные с помощью понятного кода на языке OOP, который лучше всего знаком вашим разработчикам. Они могут выполнять обычные операции с базами данных, такие как создание, чтение, обновление и удаление записей (CRUD), поэтому разработчикам не придется постоянно программировать эти операции в приложении.
Упрощенное обслуживание приложений
Абстрагируя запросы к базе данных с помощью ORM, разработчики могут работать в рамках одного языка программирования, что делает код более понятным и удобным для сопровождения.
Улучшенная безопасность
Атака через внедрение SQL-кода – это злонамеренная попытка получить доступ к конфиденциальным данным путем отправки SQL-запросов через пользовательские формы в приложении. ORM используют параметризованные запросы, которые сначала отправляют вашей базе данных запрос со значениями-заполнителями, а не реальными данными (например,? или :param). Реальные данные отправляются отдельно. Это гарантирует, что пользовательский ввод будет рассматриваться как данные, а не исполняемый SQL-код. Таким образом, использование инструмента ORM предотвращает несанкционированный доступ к данным с помощью внедрения SQL-кода.
Повышение производительности
ORM может повысить производительность системы за счет прозрачного кэширования объектов на уровне приложения. Это позволяет сохранять часто запрашиваемые данные ближе к приложению для более быстрого доступа.
В чем сложность использования объектно-реляционных сопоставлений?
ORM создают указанные далее проблемы.
Несоответствие моделей
Сложные структуры данных может быть трудно отобразить между объектно-ориентированным кодом и базой данных. Иерархии, которые легко реализуются в объектно-ориентированном программировании, зачастую крайне сложно отразить в структуре базы данных, независимо от уровня сложности используемого ORM.
Проблемы с производительностью при повышенной сложности
Прямой запрос к базе данных более эффективен с вычислительной точки зрения, чем использование ORM. Для очень сложных запросов может быть эффективнее использовать SQL-код, а не инструмент объектно-реляционного сопоставления (ORM).
Сложность обучения
Хотя ORM помогают избежать необходимости изучать сложный SQL-код, вашим разработчикам все равно придется научиться использовать инструменты ORM.
Когда следует использовать объектно-реляционные сопоставления?
Поскольку ORM абстрагирует и автоматизирует запросы к базе данных, разработчики могут сосредоточиться на логике приложения, а не на написании сложных SQL-запросов. Рассмотрите возможность использования ORM в перечисленных ниже случаях.
В вашем приложении много объектов.
Создавать запросы вручную для сложных интерфейсов и структур объектов трудоемко. ORM помогает ускорить и повысить надежность извлечения данных, сопоставляя объекты с данными в базе.
Ваше приложение выполняет повторяющиеся запросы к базе данных.
ORM упрощает автоматизацию рутинных операций CRUD (создание, чтение, обновление, удаление), сокращая количество SQL-кода.
Модель данных продолжает развиваться
Если ваша модель данных все еще развивается, ORM поможет упростить управление изменениями схемы базы данных. Многие ORM содержат инструменты миграции, которые позволяют структурированно версионировать и применять изменения, снижая риск несогласованности в разных средах.
Переносимость баз данных имеет значение
ORM – это уровень абстракции, который целенаправленно отделяет операции, вызываемые вашим приложением, от любой конкретной базы данных. Хотя эта абстракция и не гарантирует полной портативности, она снижает трудозатраты при переходе между системами. Так, например, если вашему автомобильному приложению необходимо переключиться с базы данных MySQL на PostgreSQL, не нужно будет переписывать все приложение. Вам просто нужно внести небольшие изменения в свой ORM, если какая-либо из таблиц изменится.
Когда не следует использовать объектно-реляционные сопоставления?
Хотя это мощные инструменты, все же существуют ситуации, когда объектно-реляционные сопоставления не являются лучшим решением.
Для простого взаимодействия с базами данных
Если вы создаете приложение, выполняющее только простые операции CRUD, время и усилия на поддержку ORM могут превысить затраты на ручное обслуживание запросов в приложении.
Когда важны высокопроизводительные вычисления
Для многих приложений дополнительные вычислительные ресурсы, затрачиваемые ORM, не критичны. Но для задач, таких как аналитика в реальном времени, где важны миллисекунды, использование ORM может быть неприемлемым.
Когда нужно использовать денормализованные схемы
Иногда разработчики сохраняют избыточные данные в нескольких таблицах (денормализованные схемы) для повышения производительности при сложных реляционных запросах, объединяющих множество таблиц. Сопоставление таких запросов с помощью ORM не всегда эффективно.
Как AWS может помочь вам в выполнении ваших требований к управлению данными?
AWS предлагает ряд облачных решений для баз данных, которые делают управление данными эффективным и экономичным.
Amazon Relational Database Service (Amazon RDS) – это управляемый сервис, обеспечивающий простую настройку, эксплуатацию и масштабирование реляционной базы данных в облаке. Этот сервис предоставляет экономичные масштабируемые ресурсы и одновременно управляет трудоемкими задачами администрирования баз данных. Благодаря этому пользователь может сосредоточиться на приложениях и ведении бизнеса.
Amazon Aurora – это современный сервис реляционных баз данных, обеспечивающий высокую производительность и доступность в любом масштабе. Он предлагает версии с полностью открытым исходным кодом, совместимые с MySQL и PostgreSQL, а также набор инструментов для разработчиков для создания бессерверных приложений и приложений на основе машинного обучения (МО).
Amazon Redshift обеспечивает масштабируемую современную аналитику данных с трехкратным улучшением соотношения цена/производительность и семикратным увеличением пропускной способности по сравнению с другими облачными хранилищами данных.
Amazon DocumentDB (совместимость с MongoDB) – это быстрая, масштабируемая, высокодоступная и полностью управляемая корпоративная документо-ориентированная база данных, в которой данные хранятся в документах, похожих на объекты JSON. Документы используют драйверы, которые преобразуют нативные объекты в язык программирования разработчика, что устраняет необходимость в использовании ORM-инструментов.
Начните работу с базами данных на AWS, создав бесплатный аккаунт уже сегодня.