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 UNCOMMITTEDREAD COMMITTEDREPEATABLE READSERIALIZABLESNAPSHOT
(по умолчанию:
READ COMMITTED) -
options.connectionIsolationLevel- Уровень изоляции по умолчанию для новых соединений. Все запросы вне транзакций выполняются с этим уровнем. См. Известные проблемы > Пул соединений не сбрасывает уровень изоляции.READ UNCOMMITTEDREAD COMMITTEDREPEATABLE READSERIALIZABLESNAPSHOT
(по умолчанию:
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_17_27_3_A7_3_B7_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.