هل وجدت نفسك في موقف تحتاج فيه إلى قدر كبير من البيانات الوهمية للاختبار، ولكنك لا تريد قضاء ساعات في كتابة البرامج النصية أو إدراج السجلات يدويًا؟ أو ربما كنت مهتمًا بكيفية الاستفادة من الميزات الجديدة في 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، مستفيدًا من البيئة القوية والسريعة الزوال لتجنب متاعب عمليات الإعداد والتثبيت. وإليك نظرة سريعة على الإعداد:
بالنسبة لمليون صف، يبلغ وقت تنفيذ الاستعلام حوالي 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 وابق على اطلاع بأحدث المحتوى التقني المفصل مثل هذا. برمجة سعيدة!
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3