perf: оптимизировано массовое удаление строк

- Добавлен batch delete метод на бэкенде (удаление множества строк за один запрос)
- Использование WHERE IN для удаления нескольких строк одним SQL запросом
- Добавлен прогресс-бар при удалении большого количества строк
- Удаление 1000 строк теперь занимает секунды вместо минут
- Добавлена поддержка транзакций для атомарности операций
- Оптимизирован размер батчей для баланса производительности и надежности
This commit is contained in:
2026-01-21 04:17:26 +03:00
parent 0fc427f11d
commit 23c9c04a87
3 changed files with 219 additions and 25 deletions

View File

@@ -254,4 +254,23 @@ $app->get('/api/fk-values', function (Request $request, Response $response) use
$response->getBody()->write(json_encode(['values' => $values]));
return $response->withHeader('Content-Type', 'application/json');
});
// API: массовое удаление строк (batch delete)
$app->post('/api/table/delete-batch', function (Request $request, Response $response) use ($container) {
$payload = json_decode((string)$request->getBody(), true);
$pdo = $container->get('db');
$meta = new \App\MetaService($pdo);
$ds = new \App\DataService($pdo);
$schema = $payload['schema'];
$table = $payload['table'];
$rows = $payload['rows'] ?? []; // Массив строк для удаления
$metaArr = $meta->getTableMeta($schema, $table);
$result = $ds->deleteMultipleRows($schema, $table, $rows, $metaArr['primaryKey']);
$response->getBody()->write(json_encode($result));
return $response->withHeader('Content-Type', 'application/json');
});
$app->run();