"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيفية حقن بيانات وهمية بسيطة على نطاق واسع في MySQL

كيفية حقن بيانات وهمية بسيطة على نطاق واسع في MySQL

تم النشر بتاريخ 2024-08-01
تصفح:723

How to inject simple dummy data at a large scale in MySQL

مقدمة

هل وجدت نفسك في موقف تحتاج فيه إلى قدر كبير من البيانات الوهمية للاختبار، ولكنك لا تريد قضاء ساعات في كتابة البرامج النصية أو إدراج السجلات يدويًا؟ أو ربما كنت مهتمًا بكيفية الاستفادة من الميزات الجديدة في MySQL 8.0 لتبسيط مهام قاعدة البيانات الخاصة بك؟ حسنا، أنت في علاج! في هذا المنشور، سنستكشف كيفية استخدام تعبيرات الجدول الشائعة (CTEs) لإنشاء وإدراج كميات هائلة من البيانات الوهمية في قاعدة بيانات MySQL الخاصة بك بسهولة.

تخيل أنك بحاجة إلى ملء جدول بمليون قيمة تجزئة لاختبار التحميل أو قياس الأداء. يبدو وكأنه كابوس، أليس كذلك؟ ليس بعد الآن! ومع ظهور CTEs في MySQL 8.0، يمكنك تحقيق ذلك في غضون ثوانٍ. دعنا نتعمق في كيفية عمل ذلك وكيف يمكنك استخدام هذه الميزة القوية لتبسيط احتياجات توليد البيانات الخاصة بك.

ليرة تركية. دكتور

يمكن استخدام تعبيرات الجدول الشائعة (CTEs)، وهي ميزة جديدة تمت إضافتها في MySQL 8.0، لإدخال كمية كبيرة من البيانات الوهمية البسيطة بسهولة. على سبيل المثال، إذا كنت تريد إدخال مليون بيانات وهمية في جدول يسمى التجزئة الذي يخزن قيم التجزئة، فيمكنك تحقيق ذلك من خلال الخطوات التالية:

تعريفات الجدول

أولاً، قم بإنشاء الجدول:

CREATE TABLE hashes (
  id INT PRIMARY KEY AUTO_INCREMENT,
  hash CHAR(64)
);

تنفيذ الاستعلام

قم بتعيين متغير الجلسة للسماح بعمق عودي أعلى:

SET SESSION cte_max_recursion_depth = 1000000;

ثم قم بتنفيذ CTE لإدراج مليون صف:

INSERT INTO hashes(hash)
WITH RECURSIVE cte (n) AS
(
  SELECT 1
  UNION ALL
  SELECT n   1 FROM cte WHERE n 



تستفيد هذه الطريقة من تعبير جدول مشترك متكرر لإنشاء البيانات الوهمية.

فهم CTEs

تعبير الجدول العام (CTE) هو مجموعة نتائج مؤقتة مسماة يمكن الرجوع إليها ضمن عبارة واحدة عدة مرات. تعتبر CTEs مفيدة بشكل خاص لتبسيط الاستعلامات المعقدة وتحسين إمكانية القراءة.

انهيار بناء الجملة

تحديد عمق العودية

SET SESSION cte_max_recursion_depth = 1000000;

يحدد متغير النظام cte_max_recursion_ Deep الحد الأعلى للتكرار. بشكل افتراضي، يكون 1000، لذا لتكرار المزيد، تحتاج إلى تعديله. هنا، قمنا بضبطه على مليون.

استعلام CTE

INSERT INTO hashes(hash)
WITH RECURSIVE cte (n) AS
(
  SELECT 1
  UNION ALL
  SELECT n   1 FROM cte WHERE n 



دعونا نحلل هذا الاستعلام:

  • مع تكراري cte (n): يؤدي هذا إلى بدء تعريف CTE. cte هو اسم مجموعة النتائج المؤقتة، وn هو العمود.

  • SELECT 1: هذا هو الجزء غير المتكرر من CTE، وهو بمثابة نقطة البداية (القيمة الأولية).

  • UNION ALL SELECT n 1 FROM cte WHERE n

  • SELECT SHA2(n, 256) FROM cte: يحدد هذا الجزء الأخير من الاستعلام تجزئة SHA-256 لكل قيمة n، مما يؤدي إلى إنشاء البيانات الوهمية للإدراج.

كيف تعمل

يقوم CTE بشكل متكرر بإنشاء أرقام من 1 إلى 1،000،000. لكل رقم، يقوم بحساب تجزئة SHA-256 وإدراجه في جدول التجزئة. يتميز هذا الأسلوب بالكفاءة ويستفيد من إمكانيات MySQL العودية للتعامل مع كميات كبيرة من البيانات بسلاسة.

سرعة المعالجة

بيئة التحقق

لفهم تأثير هذه الميزة، استخدمت مساحة عمل Gitpod Enterprise، مستفيدًا من البيئة القوية والسريعة الزوال لتجنب متاعب عمليات الإعداد والتثبيت. وإليك نظرة سريعة على الإعداد:

  • الجهاز: مساحة عمل Gitpod Enterprise XXLarge
  • نظام التشغيل: Ubuntu 22.04.4 LTS (Jammy Jellyfish)
  • الحاويات: إصدار Docker 26.0.1
  • إصدار MySQL: صورة MySQL 8.0 Docker الرسمية

نتائج

بالنسبة لمليون صف، يبلغ وقت تنفيذ الاستعلام حوالي 4.46 ثانية:

mysql> INSERT INTO hashes(hash)
    -> WITH RECURSIVE cte (n) AS
    -> (
    ->   SELECT 1
    ->   UNION ALL
    ->   SELECT n   1 FROM cte WHERE n  )
    -> SELECT SHA2(n, 256) FROM cte;
Query OK, 1000000 rows affected (4.43 sec)
Records: 1000000  Duplicates: 0  Warnings: 0

مقاييس الأداء

عدد الصفوف وقت التنفيذ
1000 0.03 ثانية
10000 0.07 ثانية
100,000 0.42 ثانية
1,000,000 4.43 ثانية
10,000,000 48.53 ثانية

خاتمة

يعد استخدام CTEs في MySQL 8.0 بمثابة تغيير جذري في قواعد اللعبة لتوليد كميات كبيرة من البيانات الوهمية بسرعة. إنه مفيد بشكل خاص لاختبار الحمل وقياس الأداء. باستخدام بضعة أسطر فقط من التعليمات البرمجية، يمكنك ملء جداولك بسهولة ومن ثم العودة إلى الأجزاء المهمة الأخرى من مشروعك.

لا تتردد في تجربة استراتيجيات مختلفة لتوليد البيانات وأعماق التكرار لمعرفة ما يناسبك بشكل أفضل. لمزيد من النصائح والرؤى حول الأمان وتحليل السجلات، تابعني على Twitter @Siddhant_K_code وابق على اطلاع بأحدث المحتوى التقني المفصل مثل هذا. برمجة سعيدة!

بيان الافراج تم إعادة نشر هذه المقالة على: https://dev.to/siddhantkcode/how-to-inject-simple-dummy-data-at-a-large-scale-in-mysql-eci?1 إذا كان هناك أي انتهاك، من فضلك اتصل بـ [email protected]
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3