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 ненадежными для приложений, использующих индивидуальные уровни изоляции для транзакций.
Рекомендуемая альтернатива: Используйте вместо этого опцию источника данных isolationLevel верхнего уровня (доступна во всех драйверах). Это явно устанавливает уровень изоляции при каждом запуске транзакции, полностью обходя ограничение пула. См. Транзакции > Уровень изоляции по умолчанию.
Это ограничение драйвера отслеживается в tediousjs/node-mssql#1483.