استعلام متعدد الأجزاء باستخدام أدوات قاعدة البيانات المرنة

ينطبق على: قاعدة بيانات Azure SQL

نظرة عامة

باستخدام أدوات قاعدة بيانات مرنة، يمكنك إنشاء حلول قاعدة بيانات مجزأة. يستخدمالاستعلام متعدد الأجزاء لمهام مثل جمع البيانات/إعداد التقارير التي تتطلب تشغيل استعلام يمتد عبر عدة أجزاء. (قارن هذا بـ التوجيه المعتمد على البيانات، والذي يؤدي جميع الأعمال على جزء واحد.)

  1. احصل على RangeShardMap (Java، .NET) أو ListShardMap (Java، .NET) باستخدام TryGetRangeShardMap (Java، .NET)، والـ TryGetListShardMap (Java، .NET)، أو طريقة GetShardMap (Java، .NET). راجع إنشاء ShardMapManager والحصول على RangeShardMap أو ListShardMap.
  2. قم بإنشاء كائن MultiShardConnection (Java، .NET).
  3. أنشئ MultiShardStatement أو MultiShardCommand (Java، .NET).
  4. عيّن خاصية CommandText (Java، .NET) إلى أمر T-SQL.
  5. نفّذ الأمر عن طريق استدعاء طريقة ExecuteQueryAsync أو ExecuteReader (Java، .NET).
  6. اعرض النتائج باستخدام فئة MultiShardResultSet أو MultiShardDataReader (Java، .NET).

مثال

يوضح التعليمة البرمجية التالي استخدام استعلام متعدد الأجزاء باستخدام ShardMap محدد باسم myShardMap.

using (MultiShardConnection conn = new MultiShardConnection(myShardMap.GetShards(), myShardConnectionString))
{
    using (MultiShardCommand cmd = conn.CreateCommand())
    {
        cmd.CommandText = "SELECT c1, c2, c3 FROM ShardedTable";
        cmd.CommandType = CommandType.Text;
        cmd.ExecutionOptions = MultiShardExecutionOptions.IncludeShardNameColumn;
        cmd.ExecutionPolicy = MultiShardExecutionPolicy.PartialResults;

        using (MultiShardDataReader sdr = cmd.ExecuteReader())
        {
            while (sdr.Read())
            {
                var c1Field = sdr.GetString(0);
                var c2Field = sdr.GetFieldValue<int>(1);
                var c3Field = sdr.GetFieldValue<Int64>(2);
            }
        }
    }
}

يتمثل الاختلاف الرئيسي في إنشاء وصلات متعددة الأجزاء. حيث تعمل SqlConnection على قاعدة بيانات فردية، فإن MultiShardConnection تأخذ مجموعة من الأجزاء كمدخل لها. قم بتعبئة مجموعة القطع من خريطة الجزء. ثم يتم تنفيذ الاستعلام على مجموعة الأجزاء باستخدام دلالة UNION ALL لتجميع نتيجة إجمالية واحدة. اختيارياً، يمكن إضافة اسم الجزء الذي ينشأ الصف منه إلى الإخراج باستخدام الخاصية في الأمر ExecutionOptions.

لاحظ استدعاء myShardMap.GetShards () . تسترد هذه الطريقة جميع الأجزاء من خريطة الأجزاء وتوفر طريقة سهلة لتشغيل استعلام عبر جميع قواعد البيانات ذات الصلة. يمكن تحسين مجموعة الأجزاء لاستعلام متعدد الأجزاء بشكل أكبر عن طريق تنفيذ استعلام LINQ على المجموعة التي تم إرجاعها من الاستدعاء إلى myShardMap.GetShards () . بالاقتران مع نهج النتائج الجزئية، تم تصميم القدرة الحالية في الاستعلام متعدد الأجزاء للعمل بشكل جيد لعشرات تصل إلى مئات الأجزاء.

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

استعلامات متعددة الأجزاء وعمليات دمج الانقسام

لا تتحقق استعلامات الأجزاء المتعددة من مشاركة الأجزاء الموجودة في قاعدة البيانات التي تم الاستعلام عنها في عمليات دمج الانقسام الجارية. (راجع القياس باستخدام أداة دمج تقسيم قاعدة بيانات مرنة.) يمكن أن يؤدي ذلك إلى عدم اتساق حيث تظهر الصفوف من نفس الجزء لقواعد بيانات متعددة في نفس الاستعلام متعدد الأجزاء. كن على دراية بهذه القيود وفكر في استنزاف عمليات الدمج المقسّم الجارية والتغييرات التي تطرأ على خريطة الجزء أثناء تنفيذ استعلامات متعددة الأجزاء.

الموارد الإضافية

ألم تستخدم أدوات قاعدة بيانات مرنة بعد؟ تحقق من ⁧⁩دليل بدء التشغيل⁩. في حالة وجود أسئلة، تواصل معنا على Microsoft Q&A وهي صفحة الأسئلة حول SQL Database ولطلبات الميزات، أضف أفكاراً جديدة أو صوّت للأفكار الموجودة في منتدى ملاحظات SQL Database.