воскресенье, 29 августа 2021 г.

Работа с реляционными базами данных с Golang

Используя Go, вы можете включать в свои приложения самые разные базы данных и подходы к доступу к данным. В этом посте описывается, как использовать пакет стандартной библиотеки database/sql для доступа к реляционным базам данных.

Вводное руководство по доступу к данным с помощью Go в посте Доступ к реляционной базе данных.

Go также поддерживает другие технологии доступа к данным, включая библиотеки ORM для доступа более высокого уровня к реляционным базам данных, а также нереляционные хранилища данных NoSQL.

  • Библиотеки объектно-реляционного отображения (ORM). Хотя пакет database/sql включает функции для логики доступа к данным более низкого уровня, вы также можете использовать Go для доступа к хранилищам данных на более высоком уровне абстракции. Для получения дополнительных сведений о двух популярных библиотеках объектно-реляционного отображения (ORM) для Go GORM (справочник по пакету) и ent (справочник по пакету).
  • Хранилища данных NoSQL. Сообщество Go разработало драйверы для большинства хранилищ данных NoSQL, включая MongoDB и Couchbase.

Поддерживаемые системы управления базами данных

Go поддерживает все наиболее распространенные системы управления реляционными базами данных, включая MySQL, Oracle, Postgres, SQL Server, SQLite и другие.

Вы найдете полный список драйверов на странице SQLDrivers.

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

Пакет database/sql включает функции, специально разработанные для выполняемой вами операции с базой данных. Например, хотя вы можете использовать Query или QueryRow для выполнения запросов, QueryRow разработан для случая, когда вы ожидаете только одну строку, исключая накладные расходы на возврат sql.Rows, который включает только одну строку. Вы можете использовать функцию Exec для внесения изменений в базу данных с помощью операторов SQL, таких как INSERT, UPDATE или DELETE.

Транзакции

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

Отмена запроса

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

Для любой операции с базой данных вы можете использовать функцию пакета database/sql, которая принимает Context в качестве аргумента. Используя Context, вы можете указать таймаут или крайний срок для операции. Вы также можете использовать Context для передачи запроса отмены через ваше приложение функции, выполняющей инструкцию SQL, гарантируя, что ресурсы будут освобождены, если они больше не нужны.

Пул управляемых соединений

Когда вы используете дескриптор базы данных sql.DB, вы подключаетесь к встроенному пулу соединений, который создает и удаляет соединения в соответствии с потребностями вашего кода. Дескриптор через sql.DB - самый распространенный способ доступа к базе данных с помощью Go.

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

Для тех операций, в которых требуется одно зарезервированное соединение, пакет database/sql предоставляет sql.Conn. Conn особенно полезен, когда транзакция с sql.Tx была бы плохим выбором.

Например, вашему коду может потребоваться:

  • Внести изменения в схему с помощью DDL, включая логику, содержащую собственную семантику транзакции. Смешивание функций транзакций пакета sql с операторами транзакции SQL - плохая практика.
  • Выполнить операции блокировки запросов, которые создают временные таблицы.

Читайте также:


Купить gopher

Комментариев нет:

Отправить комментарий