@beduin01

На сколько следующий код подходит для тяжелых операций с БД?

Не думаю что язык сильно принципиален. Устроят советы Шарпистов и тех кто на Dart пишет. Оригинал кода на Dart. Но думаю он всем предельно понятен будет.

Database db;

void main() async {
  db = Database();

  var pidFile = File("pid.txt");
  pidFile.writeAsStringSync(pid.toString());

  connection = PostgreSQLConnection('localhost', 5432, 'db', username: 'postgres', password: '123456', queryTimeoutInSeconds: 30);
  await connection.open();

  app.post('/db', (req, res) async {
    var r = await db.someLongDBOperation(req.body);
    return res.json({"data": r});
  });  

 }


Вопрос в следующем. На сколько этот код оптимален с точки зрения выполнения каких-то тяжелых операций с БД? Имеет ли смысл использовать Изоляты (или отдельные потоки если говорим о C#)?

Паттерн использования такой. На хэндлер летит огромное количество запросов на вставку в БД. `someLongDBOperation` соответственно их обрабатывает.

Какие могут быть узкие места и как их исправить?
  • Вопрос задан
  • 145 просмотров
Пригласить эксперта
Ответы на вопрос 3
@vabka
Токсичный шарпист
Если операция очень долгая, то у клиента может произойти таймаут.
Ответ написан
firedragon
@firedragon
Senior .NET developer
Вы легко можете выбрать кучу потоков. По сути async это обертка над пулом. Нагрузка равномерная или со всплесками?
Ответ написан
MANAB
@MANAB
Разрабатываю на C#: Web, Desktop, Gamedev
Узкие места - это собственно много запросов к БД на вставку (возможно еще и в одну таблицу ) - может тормозить БД. Собирай на сервере в пачки данных и делай периодически batch insert.
При каждом insert в таблицу она лочится и другие запросы на вставку ждут + еще перестраиваются индексы.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы