Главная страница
Навигация по странице:

  • Что такое Maven Для чего он нужен Как добавлять в проект библиотеки без него

  • Добавление библиотек без Maven

  • Как добавить dependency в Maven Для чего они нужны Откуда они скачиваются

  • Основные фазы проекта под управлением Maven

  • Что такое JDBC Какие классы/интерфейсы относятся к JDBC

  • Для чего нужен DriverManager

  • Что такое Statement, PreparedStatement, CallableStatement

  • Что такое sql-injection

  • Что такое ResultSet Как с ним работать

  • Рассказать про паттерн DAO.

  • Какие требования JPA к Entity классам вы можете перечислить (не менее шести требований)

  • В чем разница между JPA и Hibernate Как связаны все эти понятия

  • Какие классы/интерфейсы относятся к JPA/Hibernate

  • Основные аннотации Hibernate, рассказать.

  • Чем HQL отличается от SQL HQL(Hibernate Query Language)

  • Что такое Query Как передать в объект Query параметры

  • Какие можно устанавливать параметры в hbm2ddl, рассказать про каждый из них.

  • Жизненный цикл Entity в Hibernate Рассказать.

  • ACID принципы транзакций

  • ПП 1. Жизненный цикл проекта Maven


    Скачать 24.78 Kb.
    НазваниеЖизненный цикл проекта Maven
    Дата01.02.2023
    Размер24.78 Kb.
    Формат файлаdocx
    Имя файлаПП 1.docx
    ТипДокументы
    #915814
    • Жизненный цикл проекта Maven.


    Жизненный цикл проекта — это список поименованных фаз построения проекта.

    1. arhetype

    Создание шаблона проекта, скачивание и подключение зависимостей.

    2. compile

    Компиляция проекта

    3. test

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

    4. package

    Создание jar или war файлов

    5. install

    Инсталляция в удаленном Maven-репозитории. Теперь проект доступен как модуль для других локальных проектов.

    6. deploy

    Инсталляция в удаленном Maven-репозитории (теперь стабильная версия проекта доступна широкому кругу разработчиков).
    Maven имеет также стандартный жизненный цикл для чистки (cleaning) и для генерации его страницы (site). Если бы 'clean' было частью обычного жизненного цикла, проект подвергался бы чистке при каждом построении, что нежелательно.

    Стандартные жизненные циклы могут быть существенно дополнены Maven-плагинами и Maven-архетипами.
    • Что такое Maven? Для чего он нужен? Как добавлять в проект библиотеки без него?



    Apache Maven - это фреймворк для автоматизации сборки проекта на основе описания их структуры в файлах на языке POM (это подмножество языка XML)
    Добавление библиотек без Maven
    Если на компьютере только одна версия Джавы — всё просто. Чтобы подключить .jar, достаточно положить его в папку lib директории Java на жестком диске. Виртуальная машина при ближайшем запуске сама возьмет код из библиотеки.
    Когда вы используете одновременно несколько версий Java-машины, раскладывать файлы библиотек для каждой из них утомительно. Лучше указать путь к нужным классам с помощью ключа -classpath.
    Открываем терминал и пишем:
    java -classpath ./classes ru.аuthor.libname.Main
    ru.аuthor.libname.Main — наша библиотека

    • Как добавить dependency в Maven? Для чего они нужны? Откуда они скачиваются?


    Для подключения зависимости в maven используется тег dependency. Теги dependency должны находиться внутри тега dependencies. В Maven библиотека является артефактом, а значит имеет groupId, artifactId и version. Чтобы подключить библиотеку к проекту с помощью maven достаточно указать её groupId, artifactId и version.
    Dependency – это зависимости от библиотек, а если точней, то это и есть библиотека, которую вы бы хотели подключить к проекту.
    Скачиваются зависимости из удаленного репозитория


    • Основные фазы проекта под управлением Maven?

    1.compile - компилирование проекта;

    2. test - тестирование с помощью JUnit тестов;

    3. package - создание jar файла или war, ear в зависимости от типа проекта;

    4. integration-test - запуск интеграционных тестов;

    5. install - копирование jar (war, ear) в локальный репозиторий;

    6. deploy - публикация файла в удалённый репозиторий.


    • Что такое JDBC? Какие классы/интерфейсы относятся к JDBC?

    JDBC — платформенно независимый промышленный стандарт взаимодействия Java-приложений с различными СУБД, реализованный в виде пакета java.sql, входящего в состав Java SE. JDBC основан на концепции так называемых драйверов, позволяющих получать соединение с базой данных по специально описанному URL.
    java.sql.DriverManager - позволяет загрузить и зарегистрировать необходимый JDBC-драйвер, а затем получить соединение с базой данных.
    javax.sql.DataSource - решает те же задачи, что и DriverManager, но более удобным и универсальным образом. Существуют также javax.sql.ConnectionPoolDataSource и
    javax.sq1.XADataSource задача которых - обеспечение поддержки пула соединений.
    java.sql.Connection - обеспечивает формирование запросов к источнику данных и управление транзакциями.

    Также предусмотрены интерфейсы
    javax.sql.PooledConnection и javax.sql.XAConnection.
    java.sql.Statement , java.sql.PreparedStatement и java.sql.CallableStatement - эти интерфейсы позволяют отправить запрос к источнику данных.

    java.sql.ResultSet - объявляет методы, которые позволяют перемещаться по набору данных и считывать значения отдельных полей в текущей записи.
    java.sql.ResultSetMetaData - позволяет получить информацию о структуре набора данных.
    java.sql.DatabaseMetaData - позволяет получить информацию о структуре источника данных.

    • Для чего нужен DriverManager?

    Класс DriverManager является уровнем управления JDBC, отслеживает все доступные драйверы и управляет установлением соединений между БД и соответствующим драйвером. Прежде чем подключаться к серверу БД необходимо определиться с соответствующим драйвером JDBC, который представляет собой *. jar файл.


    • Что такое Statement, PreparedStatement, CallableStatement?

    Как только соединение установлено, мы можем взаимодействовать с базой данных. Интерфейсы JDBC Statement, CallableStatement и PreparedStatement определяют методы и свойства, которые позволяют отправлять команды SQL или PL / SQL и получать данные из вашей базы данных.
    Statement - Используйте это для общего доступа к вашей базе данных. Полезно, когда вы используете статические операторы SQL во время выполнения. Интерфейс оператора не может принимать параметры.
    PreparedStatement - Используйте это, когда вы планируете использовать операторы SQL много раз. Интерфейс PreparedStatement принимает входные параметры во время выполнения.
    CallableStatement - Используйте это, когда вы хотите получить доступ к хранимым процедурам базы данных. Интерфейс CallableStatement также может принимать входные параметры времени выполнения.


    • Что такое sql-injection?

    SQL-инъекция или SQLi – уязвимость, которая позволяет атакующему использовать фрагмент вредоносного кода на языке структурированных запросов (SQL) для манипулирования базой данных и получения доступа к потенциально ценной информации.


    • Что такое ResultSet? Как с ним работать?

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

    Существует три варианта объектов типа ResultSet: Standard, Scrollable и Updateable. При использовании стандартного варианта обновление полученного результата запроса невозможно, а перемещение по строкам результата запроса возможно только в одном направлении: от первой к последней записи. Вариант Scrollable позволяет перемещаться по строкам запроса как в прямом, так и в обратном направлении, а также позиционировать курсор как на абсолютную, так и на относительную текущей позицию. Вариант Updateable позволяет изменять данные результата запроса, вставлять и удалять строки. Оба последних варианта будут выполняться более медленно, чем стандартный вариант использования объекта типа ResultSet. По этому их лучше использовать только в необходимых для этого случаях.

    При работе со стандартным вариантом использования объектов типа ResultSet используются следующие методы:

    next() - перемещает курсор на следующую строку результата запроса;

    isBeforeFirst() - Возвращает true если курсор находится на позиции “до первой записи” (BFR);

    isFirst() - Возвращает true если курсор указывает на первую запись;

    isAfterLast() - Возвращает true если курсор находится на позиции “после последней записи” (ALR);

    isLast() - Возвращает true если курсор указывает на последнюю запись;

    getRow() - Возвращает integer значение номера строки в результате запроса. 1 – первая строка; 2 – вторая строка и т.д. Метод возвращает 0 если строк не существует либо курсор находится в позиции BFR либо ALR.

    Два других варианта использования объектов типа ResultSet требуют указания дополнительных параметров методам createStatement(), prepareStatement() и prepareCall():

    createStatement(int resultSetType, int resultSetConcurrency);

    prepareStatement(String sql, int resultSetType, int resultSetConcurrency);

    prepareCall(String sql, int resultSetType, int resultSetConcurrency).

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

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

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

    TYPE_FORWARD_ONLY – параметр по умолчанию, стандартный ResultSet.

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

    CONCUR_UPDATABLE – позволяет вносить изменения в данные;

    CONCUR_READ_ONLY – параметр по умолчанию, стандартный ResultSet.

    При работе со Scrollable и Updateable вариантами объектов типа ResultSet используются следующие методы:

    next() - перемещает курсор на следующую строку результата запроса;

    previous() - перемещает курсор на предыдущую строку результата запроса;

    beforeFirst() - устанавливает курсор на позицию “до первой строки”; если сразу после выполнения этого метода выполнить метод getXXX() будет выдано исключение типа SQLException;

    afterLast() - устанавливает курсор на позицию “после последней строки”; если сразу после выполнения этого метода выполнить метод getXXX() будет выдано исключение типа SQLException;

    first() - устанавливает курсор на первую строку результата запроса;

    last() - устанавливает курсор на последнюю строку результата запроса;

    absolute() - устанавливает курсор на указанную строку относительно первой строки результата запроса;

    relative() - устанавливает курсор на указанную строку относительно текущей строки;

    moveToCurrentRow() - устанавливает курсор на строку, номер которой был запомнен в результате выполнения метода moveToInsertRow();

    moveToInsertRow() - устанавливает курсор в специальную свободную позицию для заполнения пустой строки значениями с помощью методов updateXXX() и последующей вставки этой строки в базу данных с помощью метода insertRow();

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


    • Рассказать про паттерн DAO.

    При проектировании информационной системы выявляются некоторые слои, которые отвечают за взаимодействие различных модулей системы. Соединение с базой данных является одной из важнейшей составляющей приложения. Всегда выделяется часть кода, модуль, отвечающающий за передачу запросов в БД и обработку полученных от неё ответов. В общем случае, определение Data Access Object описывает его как прослойку между БД и системой. DAO абстрагирует сущности системы и делает их отображение на БД, определяет общие методы использования соединения, его получение, закрытие и (или) возвращение в Connection Pool.
    Вершиной иерархии DAO является абстрактный класс или интерфейс с описанием общих методов, которые будут использоваться при взаимодействии с базой данных. Как правило, это методы поиска, удаление по ключу, обновление и т.д.

    Реализация DAO на уровне класса подразумевает использование одного единственного коннекта для вызова более чем одного метода унаследованного DAO класса. В этом случае, в вершине иерархии DAO AbstractController, в качестве поля объявляется connection.



    • Что такое JPA?

    JPA (Java Persistence API) это спецификация Java EE и Java SE, описывающая систему управления сохранением java объектов в таблицы реляционных баз данных в удобном виде. Сама Java не содержит реализации JPA, однако есть существует много реализаций данной спецификации от разных компаний (открытых и нет). Это не единственный способ сохранения java объектов в базы данных (ORM систем), но один из самых популярных в Java мире.
    Например JPA описывает, а Hibernate реализует.


    • Что такое ORM?

    ORM — Object-Relational Mapping или в переводе на русский объектно-реляционное отображение. Это технология программирования, которая связывает базы данных с концепциями объектно-ориентированных языков программирования. Если упростить, то ORM это связь Java объектов и записей в БД.
    ORM — это по сути концепция о том, что Java объект можно представить как данные в БД (и наоборот). Она нашла воплощение в виде спецификации JPA — Java Persistence API.



    • Что такое Hibernate?

    Hibernate — библиотека для языка программирования Java, предназначенная для решения задач объектно-реляционного отображения (ORM), самая популярная реализация спецификации JPA. Распространяется свободно на условиях GNU Lesser General Public License.
    Библиотека не только решает задачу связи классов Java с таблицами базы данных (и типов данных Java с типами данных SQL), но и также предоставляет средства для автоматической генерации и обновления набора таблиц, построения запросов и обработки полученных данных и может значительно уменьшить время разработки, которое обычно тратится на ручное написание SQL- и JDBC-кода. Hibernate автоматизирует генерацию SQL-запросов и освобождает разработчика от ручной обработки результирующего набора данных и преобразования объектов, максимально облегчая перенос (портирование) приложения на любые базы данных SQL.



    • Какие требования JPA к Entity классам вы можете перечислить (не менее шести требований)?

    1) Entity класс должен быть отмечен аннотацией Entity или описан в XML файле конфигурации JPA,

    2) Entity класс должен содержать public или protected конструктор без аргументов (он также может иметь конструкторы с аргументами),

    3) Entity класс должен быть классом верхнего уровня (top-level class),

    4) Entity класс не может быть enum или интерфейсом,

    5) Entity класс не может быть финальным классом (final class),

    6) Entity класс не может содержать финальные поля или методы, если они участвуют в маппинге (persistent final methods or persistent final instance variables),

    7) Если объект Entity класса будет передаваться по значению как отдельный объект (detached object), например через удаленный интерфейс (through a remote interface), он так же должен реализовывать Serializable интерфейс,

    8) Поля Entity класс должны быть напрямую доступны только методам самого Entity класса и не должны быть напрямую доступны другим классам, использующим этот Entity. Такие классы должны обращаться только к методам (getter/setter методам или другим методам бизнес-логики в Entity классе),

    9) Enity класс должен содержать первичный ключ, то есть атрибут или группу атрибутов которые уникально определяют запись этого Enity класса в базе данных,


    • В чем разница между JPA и Hibernate? Как связаны все эти понятия?

    JPA описывает API, а Hibernate реализует.
    Hibernate одна из самых популярных открытых реализаций последней версии спецификации (JPA 2.1). Даже скорее самая популярная, почти стандарт де-факто. То есть JPA только описывает правила и API, а Hibernate реализует эти описания, впрочем у Hibernate (как и у многих других реализаций JPA) есть дополнительные возможности, не описанные в JPA (и не переносимые на другие реализации JPA).



    • Какие классы/интерфейсы относятся к JPA/Hibernate?

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

    EntityManager также является встроенным интерфейсом JPA. Он может быть создан с помощью экземпляра EntityManagerFactory. Код выше создает EntityManager экземпляр EM через EntityManagerFactory экземпляр emf. EntityManager представляет собой соединение базы данных. Вы можете использовать его для выполнения операций с базой данных, таких как вставка/обновление/удаление или запрос таблицы. Вышеупомянутый код вызывает метод PERSISTENCE для сохранения записи Fruit в таблице Fruit.

    EntityTransaction также является встроенным интерфейсом JPA. Он может быть создан с помощью EntityManager. Код выше создает экземпляр EntityTransaction и через entityManager экземпляр EM. Сделка EntityTransaction инкапсулирует транзакцию базы данных. Вызов к методу начала транзакции и вызов для совершения сохраняет изменения в базе данных.
    Query Запрос также является встроенным интерфейсом JPA. Он может быть создан с помощью EntityManager. Код выше создает Typed'y (который является под-интерфейс запроса) пример запроса через EntityManager экземпляр EM. Запрос можно использовать для выполнения запроса базы данных. В вышеуказаном коде используется запрос для получения всех записей Fruit. Интерфейс запроса имеет методы, которые для получения результатов выполнения запроса.

    • Основные аннотации Hibernate, рассказать.

    @Entity Эта аннотация указывает Hibernate, что данный класс является сущностью (entity bean). Такой класс должен иметь конструктор по-умолчанию (пустой конструктор).
    Сущность является простым классом POJO (POJO (англ. Plain Old Java Object) — «старый добрый Java-объект», простой Java-объект, не унаследованный от какого-то специфического объекта и не реализующий никаких служебных интерфейсов сверх тех, которые нужны для бизнес-модели) , который соответствует таблице базы данных. Он должен иметь поля, соответствующие столбцам таблицы баз данных. определённые требования:


    • Наличие публично доступного конструктора без аргументов


    • Класс, его методы и сохраняемые поля не должны быть final


    • Если объект Entity класса будет передаваться по значению как отдельный объект (detached object), например через удаленный интерфейс (through a remote interface), он так же должен реализовывать Serializable интерфейс.


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


    @Table
    С помощью этой аннотации мы говорим Hibernate, с какой именно таблицей необходимо связать (map) данный класс. Аннотация @Table имеет различные аттрибуты, с помощью которых мы можем указать имя таблицы, каталог, БД и уникальность столбцов в таблец БД.
    @Id
    С помощью аннотации @Id мы указываем первичный ключ (Primary Key) данного класса.
    @GeneratedValue
    Эта аннотация используется вместе с аннотацией @Id и определяет такие паметры, как strategy и generator
    @Column
    Аннотация @Column определяет к какому столбцу в таблице БД относится конкретное поле класса (аттрибут класса).
    @ManyToMany, @ManyToOne, OneToMany
    Диаграммы отношений сущностей, которая показывает связь "многие ко многим" между двумя сущностями

    • Чем HQL отличается от SQL?

    HQL(Hibernate Query Language)
    Отличие между HQL и SQL состоит в том, что SQL работает таблицами в базе данных (далее – БД) и их столбацами, а HQL – с сохраняемыми объектами (Persistent Objects) и их полями (аттрибутами класса).
    HQL это аналог SQL в мире Hibernate, ориентированный на запросы не к таблицам, а к классам.

    Язык структурированного запроса, также широко известный как SQL, является языком базы данных, который использует концепцию управления реляционными базами данных для управления данными. Управление данными включает выбор (извлекает данные из одной или нескольких таблиц), вставляет (добавляет одну или несколько строк в таблицу), обновляет (отвечает за изменение значения одной или нескольких строк в таблице), удаляет ( ответственный за удаление одной или нескольких строк в таблице) и создание схемы по запросам.
    HQL или Hibernate Query Language, расширяет концепцию объектно-ориентированного программирования до существующего SQL.
    SQL основан на модели реляционной базы данных, тогда как HQL представляет собой комбинацию объектно-ориентированного программирования с концепциями реляционных баз данных.
    SQL управляет данными, хранящимися в таблицах, и изменяет их строки и столбцы. HQL обеспокоен объектами и его свойствами.
    HQL работает с классами и их свойствами, чтобы окончательно отобразиться в структуру таблицы, SQL работает с таблицами и столбцами, чтобы манипулировать данными, хранящимися в них.
    HQL поддерживает такие понятия, как полиморфизм, наследование, ассоциация.



    • Что такое Query? Как передать в объект Query параметры?

    Объектно-ориентированное представление запроса Hibernate. Запроса экземпляра получается вызовом Session.createQuery () . Этот интерфейс предоставляет некоторые дополнительные функции, помимо тех, которые предоставляются Session.iterate () и Session.find () :


    конкретная страница набора результатов может быть выбрана путем вызова setMaxResults (), setFirstResult ()


    могут использоваться именованные параметры запроса


    результаты могут быть возвращены как экземпляр ScrollableResults.


    Session.createQuery(java.lang.String).ScrollableResults Далее еще примеры методов


    int


    executeUpdate()

    Execute the update or delete statement.


    String[]


    getNamedParameters()

    Return the names of all named parameters of the query.


    String


    getQueryString()

    Get the query string.


    String[]


    getReturnAliases()

    Return the HQL select clause aliases (if any)


    Type[]


    getReturnTypes()

    Return the Hibernate types of the query result set.


    Iterator


    iterate()

    Return the query results as an Iterator.


    List


    list()

    Return the query results as a List.


    ScrollableResults


    scroll()

    Return the query results as ScrollableResults.



    • Какие можно устанавливать параметры в hbm2ddl, рассказать про каждый из них.

    hibernate.hbm2ddl.auto Автоматически проверяет или экспортирует DDL схемы в базу данных при создании
    Итак, список возможных вариантов:


    validate : проверяет схему, не вносит изменений в базу данных;


    update : обновляет схему, если схема отсутствует в БД, тогда схема создается;


    create : создает схему, уничтожая предыдущие данные;


    create-drop : удалить схему, когда SessionFactory закрывается явно, обычно, когда приложение остановлено. схема не удаляется при закрытии сеанса. Он сбрасывается только при закрытии SessionFactory.
    В случае, если я даю какое-либо значение этому свойству (скажем, abc вместо четырех значений, описанных выше), или оно просто остается пустым. Это показывает следующее поведение
    -Если схема отсутствет в БД: - Создает схему
    -Если схема присутствует в БД: - обновите схему.


    drop - Схема базы данных будет удалена и создана впоследствии.



    • Жизненный цикл Entity в Hibernate? Рассказать.

    1) new — объект создан, но при этом ещё не имеет сгенерированных первичных ключей и пока ещё не сохранен в базе данных;

    2) managed — объект создан, управляется JPA, имеет сгенерированные первичные ключи;

    3) detached — объект был создан, но не управляется (или больше не управляется) JPA;

    4) removed — объект создан, управляется JPA, но будет удален после commit'a транзакции;

    • SessionFactory

    Экземпляр SessionFactory создается методом buildSessionFactory (ServiceRegistry) объекта org.hibernate.Configuration и предназначен для получения объекта Session. Инициализируется SessionFactory один раз. Внутреннее состояние SessionFactory неизменно (immutable), т.е. он является потокобезопасным. Internal state (внутреннее состояние) включает в себя все метаданные об Object Relational Mapping, определяемые при создании SessionFactory.

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


    • Session

    Однопоточный объект, устанавливающий связь между объектами/сущностями приложения и базой данных. Сессия создается при необходимости работы с БД и ее необходимо закрыть сразу же после использования. Экземпляр Session является интерфейсом между кодом в java приложении и hibernate framework, предоставляя методы для операций CRUD.



    • Transaction

    Однопоточный объект, используемый для атомарных операций. Это абстракция приложения от основных JDBC или JTA транзакций. org.hibernate.Session может занимать несколько org.hibernate.Transaction в определенных случаях.



    • ACID принципы транзакций



    1. Atomicity — Атомарность


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

    Друг познается в беде, а база данных — в работе с ошибками. О, если бы всё всегда было хорошо и без ошибок! Тогда бы никакие ACID были бы не нужны. Но как только возникает ошибка, атомарность становится очень важна.

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

    • У вас деньги списались

    • Маме поступили



    1. Consistency — Согласованность

    Транзакция, достигающая своего нормального завершения (EOT — end of transaction, завершение транзакции) и, тем самым, фиксирующая свои результаты, сохраняет согласованность базы данных. Другими словами, каждая успешная транзакция по определению фиксирует только допустимые результаты.

    Это свойство вытекает из предыдущего. Благодаря тому, что транзакция не допускает промежуточных результатов, база остается консистентной. Есть такое определение транзакции: «Упорядоченное множество операций, переводящих базу данных из одного согласованного состояния в другое». То есть до выполнения операции и после база остается консистентной (в переводе на русский — согласованной).

    1. Isolation — Изолированность

    Во время выполнения транзакции параллельные транзакции не должны оказывать влияния на её результат.

    Если у нас система строго для одного человека, проблем не будет. А если пользователей несколько? Тогда транзакции запускают в параллель — для ускорения работы системы. А иначе представьте себе, что вы делаете заказ в интернет-магазине и система вам говорит: «Вы в очереди, перед вами еще 100 человек хотят заказ оформить, подождите». Бред же? Бред!

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

    1 эффект: "Потерянная запись"

    2 эффект: "Грязное чтение"

    3 эффект: "Повторимое чтение"

    1. Durability — Надёжность

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


    написать администратору сайта