EvilStyl3
16-06-2007, 10:09
- קרדיט לפורום אחר -
מה?
כולנו יודעים מהם קבצים. הם שוכנים להם על הכונן הקשיח של המחשב או השרת ונתונים לפקודתנו. אנו יכולים למחוק אותם, להעתיק אותם להריץ אותם (אם הם ברי הרצה) לשמוע אותם (אם הם מכילים מוזיקה) לערוך אותם (אם הם מסמכים) לראות אותם (אם הם תמונות) או בקיצור לעשות בהם כרצוננו (אם יש לנו הרשאה לכך). אבל מה זה בדיוק קובץ? קובץ הוא פשוט רצף של מידע בינארי, כלומר רצף של 0-ים ו 1-ים ששוכן בתוך הכונן הקשיח שלנו. כל פעם שאנו מבצעים פעולה על הקובץ: מוחקים, עורכים או מעתיקים, אנו מבקשים רשות ממערכת ההפעלה והיא עושה את כל העבודה ה"קשה" בשבילנו. למשל אם אנו מעתיקים קובץ מערכת ההפעלה מפנה לו מקום על הכונן הקשיח, קוראת את הקובץ ממקומו וכותבת אותו במקומו החדש. היא גם דואגת לעדכן את רשימת הקבצים כך שתכיל את הקובץ המועתק. נשמע טוב, לא? מערכת ההפעלה מטפלת בכל ואני לא צריך לדאוג לכלום. אבל לא תמיד אנו רוצים שמערכת ההפעלה תטפל בקבצים, אלא אנו רוצים לטפל בהם בעצמנו ולשמור אותם לא כקבצים במערכת ההפעלה אלא כמידע בינארי בתוך בסיס הנתונים שלנו. למה סתם להעמיס על עצמנו עבודה מיותרת ואיך עושים את זה - בסעיפים הבאים.
למה?
הדעות מה עדיף: לשמור את הקובץ על הדיסק או לשמור אותו בבסיס הנתונים, חלוקות, וכמו כמעט בכל דבר בחיים התשובה תלויה בהקשר. שמירת הקובץ בתוך ספרייה היא פשוטה יותר ולכן עבור מערכות קטנות שאין בהן הרבה קבצים זה עדיף. אבל במערכות גדולות בהן כמות הקבצים גדלה בג'יגות בכל חודש הטיפול בקבצים הרבים מתחיל להיות מטרד, בייחוד כאשר צריך להוסיף עוד ועוד כוננים קשיחים ולמפות אותם במערכת ההפעלה שלך. כאשר מדובר בבסיס נתונים, בסיס הנתונים עצמו מטפל בקבצים ואם צריך להוסיף כונן נוסף - אין בעיה. רק מגדירים storage נוסף ובסיס הנתונים מטפל בכל השאר. בנוסף לכך שמירת הקבצים בתוך בסיס הנתונים מנתקת את התלות במערכת הפעלה מסויימת לניהול הקבצים והמערכת שלך יותר כללית. גם יותר קל למנהל המערכת לשלוט על ההרשאות לקבצים מסוימים שנמצאים במערכת.
הבט נוסף של שמירת קבצים ותמונות בבסיס הנתונים היא מניעת לינק ישיר מאתרים אחרים לתמונות וקבצים שנמצאים על האתר שלכם.
איך?
יפה. הגענו לחלק המעשי. לצורך הדוגמה שלנו נבנה מערכת פשוטה ביותר לשמירה קבצים בתוך בסיס נתונים. לשם כך נגדיר שתי טבלאות. אחת עבור המאפיינים של הקובץ (קרי: שמו, גודלו, סוגו ותאורו) והשניה עבור הקובץ עצמו (קרי: המידע הבינארי). ההפרדה לשתי טבלאות שונות נובעת מכך שלעיתים יש צורך לשלוף רק את מאפייני הקובץ. אם נשמור את המידע הבינארי עצמו באותה טבלה ונשלוף את כל העמודות מהטבלה, הרי לחינם שלפנו כמה מגות טובות של נתונים וזה מעמיס על הזיכרון של המחשב שלנו. סיבה נוספת להפרדה היא הצורך לטפל בקבצים גדולים במיוחד. השיטה לאיכסון קבצים שאפרט במסמך זה טובה לקבצים עד גודל 1 מגה בלבד. ההפרדה לשתי טבלאות תעשה לנו חיים הרבה יותר קלים אם נרצה בעתיד לשמור קבצים גדולים יותר.
הגדרת טבלאות
CREATE TABLE file ( id INT(4) NOT NULL AUTO_INCREMENT PRIMARY KEY, description CHAR(50), filename CHAR(50), filesize CHAR(50), filetype CHAR(50) );
שימו לב לשדה filetype, שכן הוא זקוק להסבר נוסף. כמו שציינתי קובץ לכן קובץ הוא בסך הכול רצף של מידע בינארי, אז כיצד המחשב יודע כיצד להתייחס את הקובץ? האם זו תמונה או אולי קובץ מוזיקה? במערכת ההפעלה חלונות סוג הקובץ מצוין על ידי שלוש האותיות האחרונות של הקובץ(מה שקרוי "הסיומת של הקובץ") למשל .exe או .gif בעולם האינטרנט סוג המידע מצוין על ידי כותרת שמכונה בשפה המקצועית Header. אינך צריך לדעת כיצד זה פועל כיוון שבדוגמה שבמדריך זה הכותרת נגזרת אוטומטית בשלב ההכנסה של הקובץ, אך אם אתה מחפש מידע נוסף בנושא זה אתה מוזמן להסתכל על ההגדרה הרשמית של MIME Type (http://www.w3.org/Protocols/rfc1341/4_Content-Type.html).
ואת השנייה נגדיר כך:
CREATE TABLE filedata ( id INT(4) NOT NULL PRIMARY KEY, bin_data LONGBLOB );
תהנו.
:)
מה?
כולנו יודעים מהם קבצים. הם שוכנים להם על הכונן הקשיח של המחשב או השרת ונתונים לפקודתנו. אנו יכולים למחוק אותם, להעתיק אותם להריץ אותם (אם הם ברי הרצה) לשמוע אותם (אם הם מכילים מוזיקה) לערוך אותם (אם הם מסמכים) לראות אותם (אם הם תמונות) או בקיצור לעשות בהם כרצוננו (אם יש לנו הרשאה לכך). אבל מה זה בדיוק קובץ? קובץ הוא פשוט רצף של מידע בינארי, כלומר רצף של 0-ים ו 1-ים ששוכן בתוך הכונן הקשיח שלנו. כל פעם שאנו מבצעים פעולה על הקובץ: מוחקים, עורכים או מעתיקים, אנו מבקשים רשות ממערכת ההפעלה והיא עושה את כל העבודה ה"קשה" בשבילנו. למשל אם אנו מעתיקים קובץ מערכת ההפעלה מפנה לו מקום על הכונן הקשיח, קוראת את הקובץ ממקומו וכותבת אותו במקומו החדש. היא גם דואגת לעדכן את רשימת הקבצים כך שתכיל את הקובץ המועתק. נשמע טוב, לא? מערכת ההפעלה מטפלת בכל ואני לא צריך לדאוג לכלום. אבל לא תמיד אנו רוצים שמערכת ההפעלה תטפל בקבצים, אלא אנו רוצים לטפל בהם בעצמנו ולשמור אותם לא כקבצים במערכת ההפעלה אלא כמידע בינארי בתוך בסיס הנתונים שלנו. למה סתם להעמיס על עצמנו עבודה מיותרת ואיך עושים את זה - בסעיפים הבאים.
למה?
הדעות מה עדיף: לשמור את הקובץ על הדיסק או לשמור אותו בבסיס הנתונים, חלוקות, וכמו כמעט בכל דבר בחיים התשובה תלויה בהקשר. שמירת הקובץ בתוך ספרייה היא פשוטה יותר ולכן עבור מערכות קטנות שאין בהן הרבה קבצים זה עדיף. אבל במערכות גדולות בהן כמות הקבצים גדלה בג'יגות בכל חודש הטיפול בקבצים הרבים מתחיל להיות מטרד, בייחוד כאשר צריך להוסיף עוד ועוד כוננים קשיחים ולמפות אותם במערכת ההפעלה שלך. כאשר מדובר בבסיס נתונים, בסיס הנתונים עצמו מטפל בקבצים ואם צריך להוסיף כונן נוסף - אין בעיה. רק מגדירים storage נוסף ובסיס הנתונים מטפל בכל השאר. בנוסף לכך שמירת הקבצים בתוך בסיס הנתונים מנתקת את התלות במערכת הפעלה מסויימת לניהול הקבצים והמערכת שלך יותר כללית. גם יותר קל למנהל המערכת לשלוט על ההרשאות לקבצים מסוימים שנמצאים במערכת.
הבט נוסף של שמירת קבצים ותמונות בבסיס הנתונים היא מניעת לינק ישיר מאתרים אחרים לתמונות וקבצים שנמצאים על האתר שלכם.
איך?
יפה. הגענו לחלק המעשי. לצורך הדוגמה שלנו נבנה מערכת פשוטה ביותר לשמירה קבצים בתוך בסיס נתונים. לשם כך נגדיר שתי טבלאות. אחת עבור המאפיינים של הקובץ (קרי: שמו, גודלו, סוגו ותאורו) והשניה עבור הקובץ עצמו (קרי: המידע הבינארי). ההפרדה לשתי טבלאות שונות נובעת מכך שלעיתים יש צורך לשלוף רק את מאפייני הקובץ. אם נשמור את המידע הבינארי עצמו באותה טבלה ונשלוף את כל העמודות מהטבלה, הרי לחינם שלפנו כמה מגות טובות של נתונים וזה מעמיס על הזיכרון של המחשב שלנו. סיבה נוספת להפרדה היא הצורך לטפל בקבצים גדולים במיוחד. השיטה לאיכסון קבצים שאפרט במסמך זה טובה לקבצים עד גודל 1 מגה בלבד. ההפרדה לשתי טבלאות תעשה לנו חיים הרבה יותר קלים אם נרצה בעתיד לשמור קבצים גדולים יותר.
הגדרת טבלאות
CREATE TABLE file ( id INT(4) NOT NULL AUTO_INCREMENT PRIMARY KEY, description CHAR(50), filename CHAR(50), filesize CHAR(50), filetype CHAR(50) );
שימו לב לשדה filetype, שכן הוא זקוק להסבר נוסף. כמו שציינתי קובץ לכן קובץ הוא בסך הכול רצף של מידע בינארי, אז כיצד המחשב יודע כיצד להתייחס את הקובץ? האם זו תמונה או אולי קובץ מוזיקה? במערכת ההפעלה חלונות סוג הקובץ מצוין על ידי שלוש האותיות האחרונות של הקובץ(מה שקרוי "הסיומת של הקובץ") למשל .exe או .gif בעולם האינטרנט סוג המידע מצוין על ידי כותרת שמכונה בשפה המקצועית Header. אינך צריך לדעת כיצד זה פועל כיוון שבדוגמה שבמדריך זה הכותרת נגזרת אוטומטית בשלב ההכנסה של הקובץ, אך אם אתה מחפש מידע נוסף בנושא זה אתה מוזמן להסתכל על ההגדרה הרשמית של MIME Type (http://www.w3.org/Protocols/rfc1341/4_Content-Type.html).
ואת השנייה נגדיר כך:
CREATE TABLE filedata ( id INT(4) NOT NULL PRIMARY KEY, bin_data LONGBLOB );
תהנו.
:)