22-07-2015, 10:50
|
מנהל פורומי "תכנות ובניית אתרים" ו"חומרה ורשתות"
|
|
חבר מתאריך: 25.10.01
הודעות: 42,775
|
|
תשמור עם כל העלאה של קובץ את ה bucket וה path/key שאליו העלית אותו ואת ה id של המשתמש. כשאתה מוחק משתמש, תוסיף אותו לטבלה שבה יש רשימת id מחוקים (אני ממליץ: עם חתימת זמן מתי בוצעה המחיקה). תריץ פרוסס ברקע פעם בכמה זמן (למשל פעם ביום) שקורא את הרשימה של ה id-ים המחוקים, ואז הולך לרשימה של טבלת הקבצים שהועלו ושולף את כל ה bucket/keys של הקבצים שה id שלהם הוא IN (רשימת id-ים), ופשוט בלולאה תמחק כל קובץ וקובץ. אחרי שמחקת אותו, אתה יכול גם למחוק אותו מטבלת הקבצים שהועלו. בסוף התהליך, אחרי שהוא רץ מספר פעמים, גם אם היו כשלונות זמניים, כל הקבצים יימחקו. מה שנקרא... "eventually consistent"...
שים לב שאם אתה משתמש גם ב CloudFront, תצטרך אחרי כל הצלחת מחיקה מה API של S3 לשלוח גם בקשת Cache Invalidation ל CF כדי שימחקו את העותקים גם מה cache-ים, אם אתה לא רוצה לחכות ל max-age שהוגדר לאובייקט בתוך S3. שים לב שבקשת Invalidation אפשר לעשות על הרבה כתובות ביחד, אז אתה יכול פשוט להכין מערך של כל ה keys אחרי כל החזרת success מ API המחיקה של S3 ולשלוח אותו בבקשה אחת (מה שגם יחסוך כסף אם משום מה יש לך המון בקשות כאלה בחודש אחד.)
|