Как пакетировать вызовы sql с помощью servicestack - PullRequest
1 голос
/ 04 октября 2019

У меня есть приложение, которое почти непрерывно записывает записи в ответ на системное событие. Я использую C # ServiceStack Ormlite. Интересно, есть ли простой способ пакетировать эти вставки так, чтобы вместо записи каждого из них он собирал много X, а затем записывал в одну транзакцию? Это уменьшило бы использование диска и ускорило бы работу приложения (другие вещи происходят).

Win 10, VS2019 C # Sqlite

Ответы [ 2 ]

1 голос
/ 04 октября 2019

Вы можете использовать InsertAll(), который более эффективен, чем отдельные операторы Insert(), так как он выполняет все вставки в пределах одной неявной транзакции и повторно использует один и тот же параметризованный оператор вставки для каждой записи, но это не так эффективно, как создание одного SQLзаявление и отправка его в СУБД с чем-то вроде:

var sb = new StringBuilder();
foreach (var row in rows)
{
    sb.Append(db.ToInsertStatement(row)).AppendLine(";");
}
db.ExecuteSql(sb.ToString());
0 голосов
/ 04 октября 2019

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

, а в хранимой процедуре вы можете

insert into table (some columns) 
select some columns 
from @structured_variable (table variable)
...