برنامه نویسی

عملیات انبوه کارآمد با 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

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا