24-07-2019, 07:47
|
מנהל פורומי "תכנות ובניית אתרים" ו"חומרה ורשתות"
|
|
חבר מתאריך: 25.10.01
הודעות: 42,776
|
|
truncate כחלק מלוגיקה אפליקטיבית? נשמע לי משהו נדיר ביותר... נשמע כמו משהו שיכול לקרות רק כשמשתמשים ב DB לא כדי לאחסן נתונים, אלא ב anti-pattern כלשהו כמו DB-as-IPC, DB-as-queue וכיוצ"ב (וגם אז נשמע כמו מתכון ל race condition אא"כ מנהלים נעילות בצד ודואגים לרמת מקביליות שהיא בדיוק 1), או אם משתמשים בטבלה ואז מרוקנים אותה כדי בעצם להשתמש בטבלה זמנית, במקום להשתמש ב... טבלה זמנית
החסרון הוא שאם יש לך באג בקוד, בין אם הוא קורה ספונטנית, ובין אם הוא קורה בגלל בעיית אבטחה (SQL Injection וכיוצ"ב), אי אפשר באמת למחוק את המידע[*], בטעות או בכוונה, וכל שתצטרך כדי להחזיר אותו, הוא לאפס את ערך טור ה deleted...
[*] צריך אבל לחשוב גם על update, שגם הוא כמובן יכול למחוק מידע. בהתאמה, ניתן למזער נזקים על ידי הגבלת המשתמש האפליקטיבי לאיפשור update רק לטורים שבאמת צריכים אותו. ואפשר לעבוד גם בתור append-only: אף אחד לא יכול לעדכן, אף אחד לא יכול למחוק - כל הזמן רק מוסיפים, וכשקוראים את המידע, קוראים את הנתון האחרון. כך, בעצם, גם אם פרצו לאפליקציה לגמרי, הנזק מוגבל לנזק זמני - אם אתה מוחק את הרשומות שנוצרו אחרי הפריצה, המצב חוזר לקדמותו, מבלי שתצטרך לחזור לגיבוי אחרון (שמי יודע מתי הוא היה וכמה מידע הלך לאיבוד בינתיים. וכן, לחכמים שקוראים את זה, אני יודע מה זה point in time recovery. לא כולם יודעים, לא לכולם יש, וכו'.)
|