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

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

لإضافة جزء لنطاق أو مفتاح جديد

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

إذا لم يكن النطاق الجديد لقيم المفاتيح جزءاً من تعيين حالي، فمن السهل إضافة الجزء الجديد وإقران المفتاح أو النطاق الجديد بهذا الجزء.

مثال: إضافة جزء ونطاقه إلى خريطة جزء موجودة

يستخدم هذا النموذج TryGetShard (Java، .NET) وCreateShard (Java، .NET) CreateRangeMapping (Javaو .NET وإنشاء مثيل لفئة ShardLocation (Java، .NET). في النموذج أدناه، تم إنشاء قاعدة بيانات باسم sample_shard_2 وجميع كائنات المخطط الضرورية بداخلها لتحتوي على النطاق [300, 400).

// sm is a RangeShardMap object.
// Add a new shard to hold the range being added.
Shard shard2 = null;

if (!sm.TryGetShard(new ShardLocation(shardServer, "sample_shard_2"),out shard2))
{
    shard2 = sm.CreateShard(new ShardLocation(shardServer, "sample_shard_2"));  
}

// Create the mapping and associate it with the new shard
sm.CreateRangeMapping(new RangeMappingCreationInfo<long>
                            (new Range<long>(300, 400), shard2, MappingStatus.Online));

بالنسبة لإصدار .NET، يمكنك أيضاً استخدام PowerShell كبديل لإنشاء مدير خرائط Shard جديد. يتوفر مثال هنا.

لإضافة جزء لجزء فارغ من نطاق موجود

في بعض الحالات، ربما تكون قد عينت بالفعل نطاقاً إلى جزء وتملأه جزئياً بالبيانات، ولكنك تريد الآن توجيه البيانات القادمة إلى جزء مختلف. على سبيل المثال، لقد قمت بالتقسيم حسب النطاق اليومي وقمت بالفعل بتخصيص 50 يوماً لجزء، ولكن في اليوم 24، تريد أن تصل البيانات المستقبلية إلى جزء مختلف. يمكن أن تؤدي أداة دمج الانقسام لقاعدة البيانات المرنة هذه العملية، ولكن إذا لم تكن حركة البيانات ضرورية (على سبيل المثال، البيانات الخاصة بنطاق الأيام [25, 50)، أي اليوم 25 شاملاً حتى 50 يوماً حصرياً، غير موجود بعد) يمكنك إجراء ذلك بالكامل باستخدام واجهات برمجة تطبيقات إدارة خرائط Shard مباشرةً.

مثال: تقسيم النطاق وتخصيص الجزء الفارغ لجزء مضاف حديثاً

تم إنشاء قاعدة بيانات باسم "sample_shard_2" وجميع كائنات المخطط الضرورية بداخلها.

// sm is a RangeShardMap object.
// Add a new shard to hold the range we will move
Shard shard2 = null;

if (!sm.TryGetShard(new ShardLocation(shardServer, "sample_shard_2"),out shard2))
{
    shard2 = sm.CreateShard(new ShardLocation(shardServer,"sample_shard_2"));  
}

// Split the Range holding Key 25
sm.SplitMapping(sm.GetMappingForKey(25), 25);

// Map new range holding [25-50) to different shard:
// first take existing mapping offline
sm.MarkMappingOffline(sm.GetMappingForKey(25));

// now map while offline to a different shard and take online
RangeMappingUpdate upd = new RangeMappingUpdate();
upd.Shard = shard2;
sm.MarkMappingOnline(sm.UpdateMapping(sm.GetMappingForKey(25), upd));

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

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

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