عملیات انبوه کارآمد با UkrGuru.Sql

عملیات انبوه کارآمد با UkrGuru.Sql
در این مقاله، نحوه انجام عملیات انبوه کارآمد – درج، بهروزرسانی و حذف – را با استفاده از آن بررسی میکنیم UkrGuru.Sql
کتابخانه این رویکرد به ویژه هنگام برخورد با مجموعه داده های بزرگ، تضمین عملکرد بهینه و حداقل زمان اجرا مفید است.
راه اندازی اولیه
ابتدا اتصال پایگاه داده را مقداردهی اولیه می کنیم:
Utils.InitDb();
سپس تعداد رکوردها را تعریف می کنیم (N
) و یک لیست برای نگهداری داده های دانش آموز خود ایجاد کنید:
int N = 100 * 1024;
List<Student>? students = new();
DateTime started = DateTime.Now;
درج انبوه
برای درج کارآمد تعداد زیادی رکورد، داده ها را آماده می کنیم و از عملیات درج انبوه استفاده می کنیم:
for (int i = 0; i < N; i++)
{
students.Add(new Student() { ID = i, Name = $"Name_{i}" });
}
var sql_insert = """
INSERT Students (ID, Name)
SELECT D.ID, D.Name FROM OPENJSON(@Data) WITH (ID int, Name varchar(50)) D
""";
started = DateTime.Now;
await DbHelper.ExecAsync(sql_insert, students.ToJson());
Console.WriteLine($"Inserted {N / 1024}K - {DateTime.Now.Subtract(started)}");
این روش اهرم می کند OPENJSON
برای تجزیه داده های JSON و درج آن در Students
جدول نتیجه این عملیات این بود:
Database created successfully.
Inserted 100K - 00:00:00.4206026
به روز رسانی انبوه
در مرحله بعد، سوابق را با اطلاعات کلاس و نمره جدید به روز می کنیم:
for (int i = 0; i < N; i++)
{
students[i].Class = (char)((byte)'A' + i % 25);
students[i].Grade = (byte)(i % 5);
}
var sql_update = """
UPDATE S
SET S.Class = D.Class, S.Grade = D.Grade
FROM Students S
JOIN OPENJSON(@Data) WITH (ID int, Class char(1), Grade tinyint) D ON S.ID = D.ID;
""";
started = DateTime.Now;
await DbHelper.ExecAsync(sql_update,
students.Select(c => new { c.ID, c.Class, c.Grade }).ToJson());
Console.WriteLine($"Updated {N / 1024}K - {DateTime.Now.Subtract(started)}");
این عملیات بهروزرسانی از رویکرد مشابهی استفاده میکند، تجزیه دادههای JSON و بهروزرسانی رکوردهای مربوطه در Students
جدول نتیجه این عملیات این بود:
Updated 100K - 00:00:00.3418457
حذف انبوه
در نهایت، ما رکوردها را بر اساس یک شرایط خاص حذف می کنیم (به عنوان مثال، Grade < 1
):
var sql_delete = """
DELETE S
FROM Students S
JOIN OPENJSON(@Data) AS D ON S.ID = D.value;
""";
started = DateTime.Now;
await DbHelper.ExecAsync(sql_delete,
students.Where(x => x.Grade < 1).Select(c => c.ID ).ToJson());
Console.WriteLine($"Deleted {(N / 5) / 1024}K - {DateTime.Now.Subtract(started)}");
این عملیات حذف تضمین می کند که فقط رکوردهایی که شرایط مشخص شده را دارند از آن حذف می شوند Students
جدول نتیجه این عملیات این بود:
Deleted 20K - 00:00:00.0400413
نتیجه گیری
با استفاده از UkrGuru.Sql
برای عملیات انبوه به طور قابل توجهی عملکرد را هنگام مدیریت مجموعه داده های بزرگ بهبود می بخشد. با استفاده از تجزیه JSON و دستورات SQL کارآمد، میتوانیم درج، بهروزرسانی و حذف انبوه را با حداقل زمان اجرا انجام دهیم. نتایج کارایی این روش را نشان می دهد:
- پایگاه داده با موفقیت ایجاد شد.
- درج شده 100K – 00:00:00.4206026
- به روز شده 100K – 00:00:00.3418457
- حذف شده 20K – 00:00:00.0400413
این روش تضمین می کند که عملیات داده در مقیاس بزرگ به سرعت و به طور موثر انجام می شود و آن را به یک انتخاب عالی برای برنامه های کاربردی با کارایی بالا تبدیل می کند.
برای جزئیات بیشتر، می توانید کد منبع را در اینجا بررسی کنید.
https://github.com/UkrGuru/Sql/blob/main/demos/Mass_Ins_Upd_Del/Program.cs