אחסון קבצים במסד הנתונים עצמו
-
אני לא יודע אם זה מתאים למקרה שלך, אבל יש מסדי נתונים שתומכים בקובץ (או סתם מידע בינארי) בתור data type של עמודה.
יש כאלו שאפילו מתיימרים להיות יותר מהירים מהמערכת קבצים.
https://www.sqlite.org/fasterthanfs.html(תודה ל @yossiz על שהראה לי את הקישור הזה)
עריכה: אני רואה שיש מקום לדון בזה https://www.sqlite.org/intern-v-extern-blob.html
-
@חגי אין באמת ״איסור״ לאחסן קבצים במסד נתונים, ויש מקרים (לא נפוצים) שזה אכן בא לידי שימוש,
באופן כללי, להבנתי, הבעיה המרכזית היא ״האטת השאילתות״, מסיבה פשוטה שיש יותר נתונים שמועברים בין ה״אפליקציה״ ל״מסד נתונים״, או לחילופין במסדים מסויימים (רדיס לדוגמא) הקבצים שבמסד נתונים לתועלת ביצועים כמובן, ממלאים את ה-RAM ולא כותבים וקוראים לדיסק לדיסק, והראם הוא בסופו של דבר משאב מוגבל מאוד..
באופן כללי אלו הבעיות המרכזיות, יש גם בעיות יותר קטנות כמו קושי בתחזוקה/הרחבה וגיבוי, וכן בגדול האחסון, לדוגמא נניח ותחליט לאחסן מסמך כטקסט, תצטרך לוגיקה שתמיר לBase64, שחוץ מזה שהוא לוקח 33 אחוז יותר מקום מקובץ המקור, תצטרך גם לוגיה לקריאה ולכתיבה, מגבלת גודל לכל ״מסמך״ שקיימת מרוב מסדי הנתונים (לדוגמא ב-MongoDB מגבלת הגודל היא 16 מגה למסמך אם לא משתמשים ב GridFS שמחלק את הקובץ לחלקים קטנים (255 kB אם אני לא טועה)), וכו׳.
בסופו של דבר, התשובה לשאלה היא ״תלוי״, יש מקרים, בפרט בפרוייקטים קטנים או ללמידה, שבהם החסרונות לא באמת ״משמעותים״, לעומת זאת בפרוייקטים גדולים, לרוב תגלה את החסרונות בעצמך
יש בSO נושא גדול בנושא, אולי יעניין אותך:
https://stackoverflow.com/q/3748/20935697 -
@חגי ראשית אני לא כ"כ יודע, בקושי ראיתי בחיי כאלו שמימשו את זה (וכמעט על מסד נתונים תומך בזה), וראיתי דבר או שניים.
שנית, לא קשה לתאר בראש הרבה צרות... אני מצטרף לחלק ממה שכתב @Elhanan, בפרט הגירה לשרת אחר וכדומה שזה נהפך לקשה בהרבה.
אך הבעיה ש@Elhanan כתב עם ההאטה, זה רק שמירה סתם בטבלה + הרגל מגונה של select *, בשמירה בטבלה ייעודית (שבלי קשר זה מתבקש מאוד כי יש לכל קובץ מאפיינים מינמליים) אז הבעיה הזו איננה. -
@Elhanan כתב באחסון קבצים במסד הנתונים עצמו:
לדוגמא נניח ותחליט לאחסן מסמך כטקסט, תצטרך לוגיקה שתמיר לBase64, שחוץ מזה שהוא לוקח 33 אחוז יותר מקום מקובץ המקור
מה פתאום הוא ירצה לשמור מסמך כטקסט? וכי בדיסק זה שמור כטקסט?
מגבלת גודל לכל ״מסמך״ שקיימת מרוב מסדי הנתונים (לדוגמא ב-MongoDB מגבלת הגודל היא 16 מגה למסמך אם לא משתמשים ב GridFS שמחלק את הקובץ לחלקים קטנים (255 kB אם אני לא טועה)), וכו׳.
זה לא חיסרון, דיברו על מסדי נתונים תומכים כמו הGridFS שזה בדיוק תפקידו.