ما هي الطرق لنقل البيانات القديمة من أيام 'Y' إلى جدول أرشيف / التاريخ في الخلية؟
سؤال
وإذا نظرنا إلى نقل البيانات من جدول A إلى الجدول التاريخ B كل يوم X للبيانات التي هو يوم Y القديم وثم إزالة البيانات من الجدول التاريخ B التي مضى عليها أكثر من أيام Z.
ومجرد استكشاف طرق مختلفة لتحقيق ذلك. لذلك سيكون موضع تقدير أي اقتراحات.
مثال للمتغيرات X - 7DAYS Y - 60days مدة ض - 365days
وشكرا
المحلول
CREATE PROCEDURE prc_clean_tables (Y INT, Z INT)
BEGIN
BEGIN TRANSACTION;
DECLARE _now DATETIME;
SET _now := NOW();
INSERT
INTO b
SELECT *
FROM a
WHERE timestamp < _now - INTERVAL Y DAY;
FOR UPDATE;
DELETE
FROM a
WHERE timestamp < _now - INTERVAL Y DAY;
DELETE
FROM b
WHERE timestamp < _now - INTERVAL Z DAY;
COMMIT;
END
نصائح أخرى
إذا كنت تستخدم الخلية 5.1 ربما كنت قادرة على استخدام جدولة الحدث، بدلا من كرون. أنا لم تستخدم ذلك، ولكن لقد استخدمت شيئا من هذا القبيل في SQL Server.
وهذا يبدو على التوالي إلى الأمام.
وأنت تريد وظيفة كرون ليلا لتشغيل البرنامج النصي.
#crontab -e
50 11 * * * $HOME/scripts/MyWeeklyArchive.sh
والملف النصي في حد ذاته هو بسيط جدا كذلك. سنقوم فقط استخدام mysqldump وظيفة الآن ()؛
#! /bin/bash
/usr/bin/mysqldump -uUser -pPassword Current_DB Table --where='date < NOW() - INTERVAL 7 DAY' | /usr/bin/mysql -uUser -pPassword archive_DB
هل يمكن أن تشمل فقط هذا الخط في ملف كرون، ولكن لتطويره ومثل أنا أوصي مما يجعل من ملف نصي.
وأبسط طريقة بالطبع سيكون لإدراج الصفوف من الجدول على الانترنت الى طاولة التاريخ ثم القيام الحذف الخاص بك. التفاف أن تصل في SPROC كما يقترح Quassnoi سيكون مثاليا.
وهناك طريقة أخرى يحتمل أن تكون أفضل سيكون للاستفادة من التقسيم . إذا كان لديك الجداول مقسمة بواسطة التاريخ، يجب أن تكون قادرة على تسريع ما لا يقل عن الأجزاء DELETE ببساطة عن طريق التخلي عن التقسيم ذات الصلة. قد يكون جزء INSERT أيضا أسرع لأن جميع الصفوف المدرجة ستأتي من قسم واحد (إذا قمت بإنشاء أقسام حقك).
إذا المخططات هي نفسها، قد يكون هناك حتى نوعا من الحيلة التي من شأنها أن تسمح لك لمجرد نقل أقسام من جدول واحد إلى الآخر على الفور نسبيا.