MES-ETL/MesETL.Clean/Program.cs

55 lines
1.6 KiB
C#

using MesETL.Shared.Helper;
var connStr = GetArg("-s") ?? throw new ApplicationException("未配置数据库连接字符串");
var eachLimit = int.Parse(GetArg("-l") ?? "1000");
var parallelTask = int.Parse(GetArg("-p") ?? "4");
var deletionCount = 0;
Console.WriteLine("Running Deletion...");
_ = Task.Run(async () =>
{
while (true)
{
await Task.Delay(5000);
Console.WriteLine($"[{DateTime.Now}] DELETE COUNT: {deletionCount}");
}
});
await Parallel.ForAsync(0, parallelTask, async (i, token) =>
{
while (true)
{
var effectRows = await DatabaseHelper.NonQueryAsync(connStr,
$"DELETE FROM `order_data_block` WHERE CompanyID = 0 ORDER BY ID LIMIT {eachLimit};", token);
if(effectRows == 0)
break;
Interlocked.Add(ref deletionCount, effectRows);
}
});
Console.WriteLine($"[{DateTime.Now}] DELETE COUNT: {deletionCount}");
return;
string? GetArg(string instruct)
{
var idx = Array.IndexOf(args, instruct);
if (idx == -1)
return null;
if (args[idx + 1].StartsWith('-'))
throw new ArgumentException("Argument Lost", nameof(instruct));
return args[idx + 1];
}
// var match = await DatabaseHelper.QueryTableAsync(connStr,
// $"SELECT `ID` FROM `order_data_block` WHERE CompanyID = 0 LIMIT {eachLimit};",
// token);
// var rows = match.Tables[0].Rows;
// if (rows.Count == 0)
// return;
//
// foreach (DataRow row in rows)
// {
// var id = row["ID"].ToString();
// await DatabaseHelper.NonQueryAsync(connStr, $"DELETE FROM `order_data_block` WHERE `ID` = {id}", token);
// }