(5-2) طرق لترحيل جدول SQL كبير

مقدمة


مرحبا بالجميع! هذه مقالتي الأولى وأنا أكتبها بالنيابة عن مهندس تطوير مبتدئ في C #. لذلك لن يكون هناك أي معلومات مفصلة حول SQL ، فقط المعلومات العملية والأفكار حول حل مشكلة غير واضحة إلى حد ما اضطررت إلى مواجهتها لنفس القادمين الجدد مثلي.

أولاً ، سوف أصف صياغة مشكلتي كمثال ، حيث توجد حاجة حقيقية لتحريك طاولة كبيرة.

لذلك ، دعنا نقول أن لديك خدمة ويب وقاعدة بيانات SQL (MS-SQL) مع جدول بأحرف html التي ترسلها خدمتك إلى المستخدمين. يتم تخزين الرسائل لعدة سنوات ولا يمكن حذفها ، لأنها ضرورية لجمع الإحصاءات والتحليلات. ومع ذلك ، يتزايد عدد الأحرف كل عام ، وتنمو قاعدة البيانات ، وتقل المساحة الموجودة على خادم SQL (في حالتنا ، كان هناك عامل آخر يتمثل في استعادة قاعدة البيانات إلى موقع الاختبار ، لأن وقتها زاد نسبيًا) ويجب القيام بشيء بهذا للقيام به. لحسن الحظ ، يوجد في حالتنا خادم حر مع مجموعة من المساحة الحرة (في الواقع قد لا يكون ، وبالطبع هذا حل مؤقت ، لكن هذا خارج عن نطاق المقال). لذا نشأت مشكلة تحريك طاولة كبيرة (والقول "كبير" ، أعني طاولة كبيرة حقًا ، كل ما رأيته أثناء البحث عن حلول مماثلة كان في حدود 60-100 جيجابايت ، وفي حالتنا كان وزن الطاولة أكثر من 300 جيجابايت).

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

طريقة -1. البيانات


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

أولاً ، ربما يساعدك حذف عمود ، ولكن هذه عملية حظر ، ولا يمكن دائمًا إيقاف خدمة ويب. وفي حبري ، هناك مقال يُقال فيه كيف يمكن تنفيذه.

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

الطريقة 0. حدد في


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

طريقة 1. النسخ الاحتياطي


الطريقة الأكثر "شريعة" ، فقد أصبح هذا هو الحل لمشكلتي. نقوم بعمل نسخة احتياطية من قاعدة البيانات التي تحتوي على جدولنا ، واستعادتها على خادم آخر وإزالتها بكل ما هو ضروري. علاوة على ذلك ، إذا كان من الممكن إيقاف خدمة الويب ، يمكنك إعادة نشرها عن طريق إعداد السجل في الجدول المنقول ، وحذف القديم * * (هنا على الأرجح قد تكون هناك لحظة أنه سيكون من الضروري كتابة استفسارات إليها مع صلات ، لهذه جوجل كيفية ربط sql- خوادم). إذا لم يكن ذلك ممكنًا ، فسنصلح معرف الحرف الأخير (للمزامنة) ، وسنحتاج إلى حذف * جميع الأحرف المنقولة (سنواصل الكتابة في الجدول القديم).

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

الأسلوب 2: MS-SQL إدارة Studio


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

طريقة 3. التقسيم


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

ملخص


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

في النهاية ، أود أن أضيف نقطتين مهمتين.

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

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

Source: https://habr.com/ru/post/ar434800/


All Articles