Перейти к основному содержанию

Microsoft SQL Server

Неофициальный Бета-перевод

Эта страница переведена PageTurner AI (бета). Не одобрена официально проектом. Нашли ошибку? Сообщить о проблеме →

Установка

npm install mssql

Параметры источника данных

См. Параметры источника данных для общих опций источника данных.

Основано на реализации MSSQL tedious. Подробности о доступных атрибутах см. в SqlServerConnectionOptions.ts.

  • url - URL подключения. Обратите внимание: другие параметры источника данных имеют приоритет над параметрами, заданными в URL.

  • host - Хост базы данных.

  • port - Порт хоста базы данных. Стандартный порт MSSQL — 1433.

  • username - Имя пользователя базы данных.

  • password - Пароль базы данных.

  • database - Имя базы данных.

  • schema - Название схемы. По умолчанию "dbo".

  • domain - При установке этого параметра драйвер подключится к SQL Server используя доменную аутентификацию.

  • connectionTimeout - Таймаут подключения в мс (по умолчанию: 15000).

  • requestTimeout - Таймаут запроса в мс (по умолчанию: 15000). ВАЖНО: драйвер msnodesqlv8 не поддерживает таймауты < 1 секунды.

  • stream - Потоковая передача наборов записей/строк вместо единовременного возврата через колбэк (по умолчанию: false). Также можно включать потоковый режим для отдельных запросов (request.stream = true). Всегда устанавливайте true при работе с большими объемами данных.

  • pool.max - Максимальное количество соединений в пуле (по умолчанию: 10).

  • pool.min - Минимальное количество соединений в пуле (по умолчанию: 0).

  • pool.maxWaitingClients - Максимальное разрешенное количество запросов в очереди. Дополнительные вызовы acquire будут отклонены с ошибкой в следующем цикле событий.

  • pool.acquireTimeoutMillis - Максимальное время ожидания ресурса для вызова acquire (в мс). По умолчанию без ограничений. При указании должно быть положительным целым числом.

  • pool.fifo - При true первыми выделяются самые старые ресурсы. При false — последние освобожденные ресурсы (превращает поведение пула из очереди в стек). Логическое значение (по умолчанию true).

  • pool.priorityRange - Целое число от 1 до X. Если задано, клиенты могут указывать приоритет в очереди при отсутствии ресурсов (см. пример). По умолчанию 1.

  • pool.evictionRunIntervalMillis - Интервал проверки на вытеснение ресурсов (в мс). По умолчанию 0 (проверки отключены).

  • pool.numTestsPerRun - Количество ресурсов для проверки за одну итерацию вытеснения. По умолчанию 3.

  • pool.softIdleTimeoutMillis - Время бездействия объекта в пуле до возможности его вытеснения сборщиком неактивных объектов (если применимо), с дополнительным условием сохранения как минимум "min idle" экземпляров объектов в пуле. По умолчанию -1 (вытеснение отключено).

  • pool.idleTimeoutMillis - Минимальное время бездействия ресурса перед вытеснением по таймауту (в мс). Имеет приоритет над softIdleTimeoutMillis. По умолчанию 30000.

  • pool.errorHandler - Функция, вызываемая при событии 'error' в пуле. Принимает экземпляр ошибки. По умолчанию — логирование с уровнем warn.

  • options.fallbackToDefaultDb - По умолчанию при недоступности базы данных из options.database подключение завершится ошибкой. При установке параметра options.fallbackToDefaultDb в true будет использоваться база данных по умолчанию пользователя (по умолчанию: false).

  • options.instanceName - Имя экземпляра для подключения. Требует запущенной службы SQL Server Browser и доступности UDP-порта 1434 на сервере. Взаимоисключается с параметром port. (без значения по умолчанию).

  • options.enableAnsiNullDefault - Если true, при инициализации SQL будет установлено SET ANSI_NULL_DFLT_ON ON, что означает создание новых колонок с поддержкой NULL по умолчанию. Подробности см. в документации T-SQL (По умолчанию: true).

  • options.cancelTimeout - Время в миллисекундах до сбоя при отмене (прерывании) запроса (по умолчанию: 5000).

  • options.packetSize - Размер пакетов TDS (подлежит согласованию с сервером). Должен быть степенью числа 2 (по умолчанию: 4096).

  • options.useUTC - Определяет передачу временных значений в формате UTC (true) или локального времени (false) (по умолчанию: false).

  • options.abortTransactionOnError - Определяет автоматический откат транзакции при возникновении ошибок во время её выполнения. Устанавливает значение SET XACT_ABORT на этапе инициализации соединения (документация).

  • options.localAddress - Сетевой интерфейс (IP-адрес) для подключения к SQL Server.

  • options.useColumnNames - Логическое значение, определяющее формат возврата строк: массивы (false) или коллекции ключ-значение (true). (по умолчанию: false).

  • options.camelCaseColumns - Преобразовывает первую букву названий колонок в нижний регистр (true). Игнорируется при наличии columnNameReplacer (по умолчанию: false).

  • options.isolationLevel - Уровень изоляции по умолчанию для транзакций. См. Известные проблемы > Пул соединений не сбрасывает уровень изоляции.

    • READ UNCOMMITTED
    • READ COMMITTED
    • REPEATABLE READ
    • SERIALIZABLE
    • SNAPSHOT

    (по умолчанию: READ COMMITTED)

  • options.connectionIsolationLevel - Уровень изоляции по умолчанию для новых соединений. Все запросы вне транзакций выполняются с этим уровнем. См. Известные проблемы > Пул соединений не сбрасывает уровень изоляции.

    • READ UNCOMMITTED
    • READ COMMITTED
    • REPEATABLE READ
    • SERIALIZABLE
    • SNAPSHOT

    (по умолчанию: READ COMMITTED)

  • options.readOnlyIntent - Запрашивает доступ только для чтения из группы доступности SQL Server (по умолчанию: false).

  • options.encrypt - Включает шифрование соединения. Обязательно для Windows Azure (по умолчанию: true).

  • options.cryptoCredentialsDetails - Объект конфигурации шифрования, передаваемый первым аргументом в tls.createSecurePair (по умолчанию: {}).

  • options.rowCollectionOnDone - Возвращает полученные строки в событиях done* объекта Request (done, doneProc) (по умолчанию: false).

    ⚠️ Внимание: При большом количестве строк может привести к чрезмерному потреблению памяти.

  • options.rowCollectionOnRequestCompletion - Возвращает полученные строки в коллбэке завершения Request (new Request) (по умолчанию: false).

    ⚠️ Внимание: При большом количестве строк может привести к чрезмерному потреблению памяти.

  • options.tdsVersion - Версия протокола TDS для использования. Если сервер не поддерживает указанную версию, будет согласована совместимая версия. Доступные версии: require('tedious').TDS_VERSION.

    • 7_1
    • 7_2
    • 7_3_A
    • 7_3_B
    • 7_4

    (по умолчанию: 7_4)

  • options.appName - Название приложения для идентификации в инструментах профилирования, логирования или трассировки SQL Server. (по умолчанию: node-mssql)

  • options.trustServerCertificate - Логическое значение, определяющее шифрование соединения при отсутствии верифицируемого сертификата сервера. (по умолчанию: false)

  • options.multiSubnetFailover - Логическое значение, определяющее параллельное подключение ко всем IP-адресам, полученным из DNS. (по умолчанию: false)

  • options.debug.packet - Логическое значение, определяющее генерацию событий debug с детализацией пакетов. (по умолчанию: false).

  • options.debug.data - Логическое значение, определяющее генерацию событий debug с детализацией данных пакетов. (по умолчанию: false).

  • options.debug.payload - Логическое значение, определяющее генерацию событий debug с детализацией содержимого пакетов. (по умолчанию: false).

  • options.debug.token - Логическое значение, определяющее генерацию событий debug с описанием токенов потока. (по умолчанию: false).

Типы столбцов

int, bigint, bit, decimal, money, numeric, smallint, smallmoney, tinyint, float, real, date, datetime2, datetime, datetimeoffset, smalldatetime, time, char, varchar, text, nchar, nvarchar, ntext, binary, image, varbinary, hierarchyid, sql_variant, timestamp, uniqueidentifier, xml, geometry, geography, rowversion, vector

Тип Vector (vector)

Тип данных vector доступен в SQL Server для хранения многомерных векторов и обычно используется для:

  • Семантический поиск с использованием эмбеддингов

  • Рекомендательные системы

  • Поиск по сходству

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

ПРИМЕЧАНИЕ: общая поддержка типа halfvec недоступна, так как эта функция всё ещё находится на этапе предварительного просмотра. См. документацию Microsoft: Тип данных vector.

Использование

@Entity()
export class DocumentChunk {
@PrimaryGeneratedColumn()
id: number

@Column("varchar")
content: string

// Vector column with 1998 dimensions
@Column("vector", { length: 1998 })
embedding: number[]
}

Поиск по векторному сходству

SQL Server предоставляет функцию VECTOR_DISTANCE для вычисления расстояний между векторами:

const queryEmbedding = [
/* your query vector */
]

const results = await dataSource.query(
`
DECLARE @question AS VECTOR (1998) = @0;
SELECT TOP (10) dc.*,
VECTOR_DISTANCE('cosine', @question, embedding) AS distance
FROM document_chunk dc
ORDER BY VECTOR_DISTANCE('cosine', @question, embedding)
`,
[JSON.stringify(queryEmbedding)],
)

Метрики расстояния:

  • 'cosine' - Косинусное расстояние (наиболее распространено для семантического поиска)

  • 'euclidean' - Евклидово расстояние (L2)

  • 'dot' - Негативное скалярное произведение

Требования:

  • Версия SQL Server с поддержкой векторных операций

  • Размерность векторов должна указываться через опцию length

Известные проблемы

Пул соединений не сбрасывает уровень изоляции

Параметры options.isolationLevel и options.connectionIsolationLevel применяются корректно при создании соединения драйвером node-mssql. Однако node-mssql не вызывает connection.reset() при возврате соединений в пул. Это означает, что если какая-либо операция изменяет уровень изоляции соединения из пула (например, явная транзакция с другим уровнем), изменение сохраняется и передается следующему пользователю этого соединения.

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

Уровни изоляции для отдельных транзакций не затрагиваются. Установка уровня через startTransaction() или колбэк transaction() всегда работает корректно, так как применяется явно к активному соединению.

Это ограничение драйвера отслеживается в tediousjs/node-mssql#1483.