Firebird

מתוך ויקיפדיה, האנציקלופדיה החופשית
קפיצה אל: ניווט, חיפוש
Firebird
Firebird logo.png
Firebird Home.png
דף הבית של Firebird
מפתח פרויקט Firebird
גרסה אחרונה 2.5.2 ב־24 במרץ 2013
(לפני שנה, 5 חודשים ו־26 ימים)
מערכת הפעלה חוצה פלטפורמות
רישיון IPL, IDPL (מבוסס MPL)
קטגוריה בסיס נתונים
www.firebirdsql.org

Firebird (או - FirebirdSQL, בתרגום מילולי - ציפור אש), הוא בסיס נתונים יחסי בקוד פתוח שיצא לראשונה ב־2002 על בסיס הקוד של תוכנת InterBase 6.0 של חברת בורלנד, שיצא לציבור באוגוסט 2000. הוא זמין למגוון מערכות הפעלה ותואם לתקן SQL92 ומימוש חלקי ל־SQL2003. מסד הנתונים בנוי בגישה בה הוא יכול לשמש כשרת, וכן כבסיס נתונים משובץ. מי שמחובר ל־Firebird תמיד ישתמש בתצורת שרת-לקוח, גם כאשר הוא משובץ, אך ההבדלים ביניהם הוא מנהל ההתקן אשר נעשה בו שימוש. אופן הפעולה של Firebird הוא תמיכה מלאה בגישת העבודה של ACID.

בסיס הנתונים כולל שפה לפרוצדורות מאוחסנות ולטריגרים. שימת דגש על ניפוי באגים. ישנם שפות תכנות רבות אשר יודעות לדבר איתו בניהן ניתן למצוא גם את השפות C#‎‏, C‏, C++‎‏, Java‏, Object Pascal (כדוגמת Delphi וFree Pascal‏), Ruby, פייתון, PHP ועוד. בנוסף ישנו חיבור לODBC.

ל־Firebird יש מספר כלי ניהול גרפיים, אשר רובם מסחריים. כלי ניהול קוד פתוח נפוץ מאוד נקרא Flamerobin.

היסטוריה[עריכת קוד מקור | עריכה]

Interbase[עריכת קוד מקור | עריכה]

תוכנת Interbase החלה כרעיון של ג'ים סטארקי (Jim Starkey‏)‏[1][2], אשר עבד באותו הזמן בחברת דיגיטל (DEC) על מנוע SQL (שעוד לא נקראה אז בשם זה) עבור מסד נתונים רשתי עבור החברה. לג'ים צץ רעיון‏[3][4]לפתח מערכת שתוכל לעבוד עם מספר משתמשים בו זמנית בלי לנעול את שאר המשתמשים כאשר מישהו מושך/יוצר/מעדכן מידע (דבר שכיח במסדי נתונים טבלאיים עם יחסי שדות [Foreign keys]). הוא החל לעבוד על הרעיון עבור חברת DEC, אבל מלחמות פנימיות על הפיתוח של Rdb/VMS (אשר כיום מוכר בתור Oracle) גרמו לו לעזוב את החברה.

לאחר עזיבתו את החברה, הגיע לחברת Apollo Computers, אשר חיפשה אנשי מסדי נתונים לפתח מסד נתונים עבור גרסת ה UNIX‏‏[5] שלה לתחנות עבודה, והסכימה לממן פיתוח. בעזרת Apollo, ג'ים פיתח את מסד הנתונים Groton Database Systems (על שם המקום בו מסד הנתונים פותח). ב-1984 החלה העבודה על מסד הנתונים, אשר ב-1986 קיבל את השם Interbase.

אף ש־Interbase הכניס כסף לחברה, החברה התמודדה עם קשיים כספיים במכירת תוכנה, והחליטה לצאת מהשוק. החברה התחילה ב-1986 להעביר בהדרגה את מסד הנתונים שלה לחברת Ashton-Tate אשר יצרו בין היתר את מסד הנתונים dBASE. היא רכשה מספר חברות המתעסקות במסדי נתונים. לאט לאט החלה גם חברת Ashton-Tate להיכנס לבעיות, וחברת בורלנד רכשה מהם את Interbase.‏

Firebird[עריכת קוד מקור | עריכה]

בשנת 2000 חברת בורלנד הוציאה לקוד הפתוח גרסה של מסד נתונים Interbase. הגרסה שיצאה הייתה 6.1. הגרסאות הבאות בתור, חזרו להיות קוד סגור. הסיבה ליציאת הקוד של Interbase הייתה בגלל שבורלנד רצתה חברה נפרדת עבור פיתוח מסד הנתונים, אך בגלל קשיים למצוא חברה שתסכים לתנאים הם הוציאו את Interbase בתור קוד פתוח, אבל חזרו מהר מאוד בגרסה 6.5 להחזיק בקוד ללא יציאת התיקונים חזרה.

בעקבות יציאת הקוד של Interbase יצאו כמה פרויקטים אשר המשיכו את הפיתוח של מסד הנתונים בתור קוד פתוח. הפרויקט שקיבל את תשומת לב הרבה ביותר היה פרויקט בשם Firebird. לפני מספר שנים, חלק מהפרויקטים הנוספים איחדו כוחות והקוד שלהם נכנס אף הוא ל-Firebird, מה שהוליד את גרסה 2 של מסד הנתונים עם תוספות ושינויים, כאשר הבסיס של בורלנד (כלומר הצורה שמבנה מסד הנתונים עובדה בה) נשאר זהה, ולכן גם מנוע של Interbase מסוגל לעבוד עם קובצי מסד הנתונים של Firebird עד גבול מסוים. שימו גרסה 3 תכיל שילוב קוד נוסף בפרויקט, כדוגמת תמיכה ב SMP ועוד אשר עוד לא נכנס בגרסה 2‏[6].

גישת עבודה[עריכת קוד מקור | עריכה]

Firebird מכיל גישת עבודה אשר שונה מאוד ממרבית מסדי הנתונים הקיימים בקוד הפתוח כדוגמת MySQL ו־PostgreSQL, כאשר Firebird מכיל מעט מאוד תכונות יחסית, ומשאיר למשתמשים להרחיב את יכולותיו במספר דרכים.

ל-Firebird שלוש תצורות בגרסת השרת:

  • תצורת שרת קלאסי, בו נוצרים מספר תהליכים, אשר מתרבים על פני כל בקשה שאותה צריך לשרת.
  • תצורת סופר שרת, בו נוצר תהליכונים לכל בקשה אשר אותה צריך לשרת.
  • תצורת סופר שרת קלאסי, השרת מנסה כאן לנצל את כמות המעבדים והמשאבים שעל המערכת בצורה טובה יותר על ידי חלוקה של מספר תהליכים ומספר תהליכונים.

החל מגרסה 3.0 של Firebird, יהיה שרת אחד אשר יהיה ניתן לכוון לו את התצורה בזמן ריצה, בעוד שכיום בגרסה 2.5 ניתן לקבל 3 שרתים שונים בהתאם לתצורה הרצויה.

Firebird תומך ביצירת פרוצדורות מאוחסנות, יצירת הדק (trigger), יצירת view (הגבלת צפייה בטבלאות), יצירת sequence (שמירה אטומית של אינדקס), יצירת domain‏‏[7] (טיפוס נתונים חדש), ועבודה עם UDF. כל אלו, הם כמובן מעבר לתמיכה ביצירת טבלאות.

טבלאות פנימיות[עריכת קוד מקור | עריכה]

כל מסד נתונים ב Firebird שומר את המידע והפעולות השונות על ידי שימוש בטלבאות פנימיות. חלק מטבלאות אלו משמשות לשם ניטור הפעולות השונות שנעשו במסד הנתונים, וחלקן האחר שומרות מידע על טבלאות השונות, על הדקים, פרוצדורות מאוחסנות ולמעשה כל אספקט הקיים ומגודר במסד הנתונים.

הטבלאות המשמשות לניטור מקבלות את השם המקדים של MON$‎‏‏[8]‏ - כלומר Monitor, בעוד שהמידע על מסד הנתונים עצמו מקבל שם מקדים של RDB$‎. הטבלאות הפנימיות ניתנות לצפייה כמו כל טבלה אחרת, וכן ניתן לבצע עליה פעולות כדוגמת select ואפילו insert, delete ו update.

שפת SQL[עריכת קוד מקור | עריכה]

שפת ה-SQL‏[9] של Firebird אינה תלויה ברישיות, כלומר אין הבדל בין אות קטנה לגדולה. חוסר התלות ברישיות קיים גם בשמות של השדות עצמם. במידה ורוצים שדה שהוא בעל תלות ברישיות, יש לשים את שם השדה עם גרש כפול (הסימן "). תחביר ה-SQL של Firebird נקרא DSQL‏‏[10], ומכיל את הפעולות הרגילות שיש בSQL. התמיכה של Firebird בפרוצדורות מאוחסנות קיבלה שפה משל עצמה בשם PSQL‏‏[11]. שפת PSQL אינה מוגבלת אך ורק לפרוצדורות, אלא מדברת גם על כתיבת trigger במסד הנתונים. כאשר Firebird זקוק להרצת שאילתות SQL, הוא מתרגם את השפה לשפה בינארית (BLR‏)‏[12] אשר אותה הוא מריץ בפועל, ולמעשה כך הוא גם יודע מתי יש בעיה או שגיאה עם מה שנכתב עוד לפני הרצת השאילתה עצמה.

בזכות היותו של Firebird מסד נתונים ACID מלא, כל פעולת SQL, נשמרת כטרנזקציה ויש צורך לבצע commit על מנת שהפעולות יתקבלו מעבר לחיבור הנוכחי של המשתמש. בזכות גישה זו, ניתן במידה ונעשתה טעות גם לעשות rollback עבור הטרנזקציה. במידה ולא תתבצע פעולת commit, ברגע שהחיבור יתנתק ממסד הנתונים, או חיבור אחר ינסה לצפות במידע אשר נוסף או שונה, לא יהיה זכר לפעולות שבוצעו.

כל ההגדרות, כדוגמת יצירת טבלה, יצירת פרוצדורה, הדק, view, domain וכו', נשמרות כ-DDL (ראו SQL). ל-Firebird יש תמיכה מרשימה מאוד ב-DML‏‏[13] (ראו SQL), אשר מאפשרת לבצע מניפולציה על מידע עוד בהגדרת השדות עצמם. למשל ניתן ליצור שדה שהוא מחושב (נקרא Computed By) מנתונים אשר הוזנו כבר על ידי המשתמש. למשל במידה ונשמר שם פרטי ושם משפחה, ניתן ליצור שדה שיכיל שם מלא, על ידי שימוש בשדה שהוא Computed By. בנוסף, ניתן להגדיר ב-Firebird כי שדה מסוים יכיל ערכים מורשים בלבד, כדוגמת טווח בין 1 ל-9, או מחרוזת באורך מסוים, או אשר מכילה רק תווים מסוימים, והרשימה עוד ארוכה. במידה ומגדירים Domain ב-Firebird, ניתן מראש גם להגדיר את מבנה המידע שרוצים, ולא חובה לשים אותו כאשר יוצרים את הטבלה או מוסיפים שדה מסוים. כל אלו הם חלק מה-DML של Firebird.

ניבים[עריכת קוד מקור | עריכה]

Firebird מכיל 3 ניבים (dialect) שונים של שפת SQL‏‏[14], אשר כל אחת מהן מוסיפה עוד יכולות עבור השפה. הניבים נוצרו כאמצעי המרה בין גרסאות ישנות מאוד של Interbase, כאשר כיום יש להשתמש בניב מספר 3.

משמעות הניבים‏[15] הם:

  1. ניב מס' 1
    • הניב שומר את התאריכים והשעות בטיפוס מסוג DATE ומכיל טיפוס זהה בשם TIMESTAMP.
    • גרש כפול משמש לציון מחרוזות.
    • הטיפוסים NUMERIC ו DECIMAL נשמרים כ DOUBLE PRECISION ורמת הדיוק אינה יכולה לעלות מעל 9 ספרות אחרי הנקודה.
    • אין טיפוס מסוג Int64.
  2. ניב מס' 2 - הניב יכול להתקיים רק בלקוח המתחבר לשרת, ולא בשרת עצמו. והוא נועד לסייע בניפוי שגיאות של הניב הראשון ומסד נתונים ישן.
  3. ניב מס' 3
    • הניב מאפשר לטיפוסים NUMERIC ו DECIMAL להישמר כ Int64 כאשר רמת הדיוק הנדרשת עולה על 9 ספרות אחרי הנקודה.
    • הטיפוס TIME שומר רק מידע על הזמן ללא תאריך.
    • הטיפוס DATE שומר מידע רק על התאריך ללא הזמן.
    • גרש כפול משמש לזיהוי שדות אשר צריכים להיות נבדלים ברישיות של השמות.
    • השימוש במחרוזת מתבצע על ידי גרש בודד.

אבטחה[עריכת קוד מקור | עריכה]

Interbase עבר הרבה מאוד מהפכות בנושא האבטחה, ו-Firebird ממשיך לשנות גישות כיצד ניתן לנהל משתמשים וגישה למידע. Firebird ו-Interbase‏‏[16] עובדים עם קובץ ייעודי עבור ניהול משתמשים. בגרסה 2‏[17] של Firebird הקובץ נקרא security2.fdb. מסד הנתונים מכיל משתמש ברירת מחדל בשם SYSDBA עם הסיסמה masterkey. המשתמש לרוב מקבל ייחס של משתמש על, אך ניהול הרשאות המשתמשים ממומשות בתוך מסד הנתונים הספציפי, ולא בצורה גלובלית בשרת.

Firebird מאפשר ליצור בתוך מסד נתונים קבוצות של הרשאות אשר נקראות Role, ובעצם ניתן להכיל אותן למשתמשים השונים בהתאם לצורך ולרצון, ובכך ליצור סוג של ACL (פירושה הוא Access Control List)‏‏[18]. השפה המשמשת לעבודה ותחזוקת role נקראת‏[19] Data Control Language או DCL בקיצור. ניהול המשתמשים והאבטחה נעשה באמצעות כלי ייעודי בשם gsec‏‏[20]. הכלי מאפשר ליצור משתמשים וסיסמאות עבורם.

בגרסה 2.5, נוספו טבלאות ה MON$‎ גם עבור ביצוע Audit Trail ו Trace‏‏[21][22] אשר משמשות עבור דו"ח וניטור פעולות אשר נעשו במסד הנתונים כולל מי עשה את הפעולות.

עבודה עם UDF[עריכת קוד מקור | עריכה]

Firebird תומך בגישה של UDF אשר פירושה הוא פונקציות המוגדרות על ידי המשתמש (User Defined Functions באנגלית). הגישה הזו מאפשרת לכתוב ספריות משותפות בשפה מהודרת, וניתן להשתמש בפונקציות הנכתבות בה בתוך השאילתות השונות כאילו היו חלק משפת הSQL.

יצירת UDF נעשית בצורה הבאה‏[23]:

{$IFDEF FPC}
  {$mode objfpc}
  {$packrecords c}
{$ENDIF}
library udf_library;
 
function get_udf_version : integer; cdecl; export;
begin
  Result := 1;
end;
 
exports
  get_udf_version;
end.

על מנת לטעון את הספרייה אשר נוצרה, יש להשתמש בקוד ה SQL הבא:

DECLARE external FUNCTION f_get_udf_version
RETURNS
INTEGER BY VALUE
entry_point 'get_udf_version' module_name 'udf_library';

בשביל להשתמש עכשיו בפונקציה, ניתן לכתוב שאילתא כזו:

SELECT f_get_udf_version() FROM rdb$database

יש לזכור כי במערכות הפעלה אשר הן דמויות ינוקס או כמו יוניקס, יש להוסיף לשם הספרייה את המקדם lib לפני שם הספרייה. אין צורך להגדיר את סיומת הספרייה (כלומר so או dll).

רישיון[עריכת קוד מקור | עריכה]

בורלנד הוציאה את קוד המקור תחת שני רישיונות, IPL ו־IDPL‏‏[24]. שניהם דומים לרישיון ה־MPL של מוזילה עם שינויים מזעריים‏[25] והם רישיונות copyleft חלשים.

פיתוח[עריכת קוד מקור | עריכה]

מסד הנתונים נכתב במקור בשפת C וחלקו הגדול שוכתב לשפת C++‎‏ בגרסה 2. את גרסת הפיתוח של מסד הנתונים ניתן להשיג באמצעות מערכת בקרת התצורה Subversion.

קישורים חיצוניים[עריכת קוד מקור | עריכה]

הערות שוליים[עריכת קוד מקור | עריכה]

  1. ^ Historical Reference
  2. ^ How Jim Starkey remembers it
  3. ^ Marina Novikova, Interview with Jim Starkey from InterBase World, IBPhoenix, 9-2-2003
  4. ^ Ann Harrison's Reminiscences on InterBase's Beginnings
  5. ^ Further recollections from Ann Harrison
  6. ^ מפת דרכים של Firebird
  7. ^ Domain תעוד על Domain מתוך IBExpert
  8. ^ מידע על טבלאות ניטור
  9. ^ Firebird SQL Basics מתוך האתר של IBExpert
  10. ^ DSQL
  11. ^ PSQL
  12. ^ "What is BLR?" באתר The Firebird FAQ
  13. ^ Basic DML in Firebird - Firebird Data Manipulation Language מתוך האתר של IBExpert
  14. ^ "What are SQL dialects and which one to use?" באתר The Firebird FAQ
  15. ^ Setting The Database Dialect
  16. ^ ניהול אבטחה ומשתמשים
  17. ^ Security in Firebird 2 מתוך האתר IBExpert
  18. ^ Privileges ניהול הרשאות למשתמשים
  19. ^ DCL מתוך האתר של IBExpert
  20. ^ gsec
  21. ^ How to monitor Firebird server activity מתוך Firebird FAQ
  22. ^ Audit and Trace Services מסמך DOC מתוך Mind The Bird
  23. ^ מדריך ליצירת UDF עבור Interbase
  24. ^ דף הרישוי מתוך אתר פרויקט Firebird
  25. ^ "Is Firebird really open source as defined by OSI?" באתר The Firebird FAQ