קטגוריה: firebird

קישור ל"מדוע firebird עדיף מOracle"

כותב הבלוג Backwards compatible, מנהל למעלה מ600 מסדי נתונים מבית אורקל, ו60 מסדי נתונים של Firebird, מסביר מדוע לדעתו Firebird הוא מסד נתונים שעדיף לכם לקחת עבור העסק שלכם, במקום אורקל.

Common Table Expression

בתקן SQL 99, נוספה תמיכה לביטוי רב עוצמה אשר קיבל את השם Common Table Expression או CTE בקיצור.

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

CTE בעצם מאפשר לנו ליצור מעין טבלה זמנית עבור code block של SQL. כלומר נגיד ויש select קבוע שאני רוצה עליו לבצע עוד select, אבל הselect המקורי מכיל כל מיני תנאים וכו', ויותר מזה, יכול להיות שאני רוצה להשתמש באותה שאילתא ביותר ממקום אחד, אז CTE בעצם נכנס לשימוש. הוא יודע להגיע ב"טעם" רגיל וב"טעם" שהוא רקורסיבי:

with Machines as (
  select id, type, name, ip
from Computers
where type in (1, 8, 34) and ip like '192.168%'
);

select user
from CompanyUsers cu
left join Machines on cu.machine = Machines.id;

עוד צורת שימוש שיש ל CTE היא בצורה רקורסיבית על המידע:

with recursive
  dept_year_budget as (
    select fiscal_year,
           dept_no,
           sum(projected_budget) as budget
    from proj_dept_budget
    group by fiscal_year, dept_no
  ),
  dept_tree as (
    select dept_no,
           head_dept,
           department,
           cast('' as varchar(255)) as indent
    from department
    where head_dept is null
    union all
    select d.dept_no,
           d.head_dept,
           d.department,
           h.indent || '  '
    from department d
         join dept_tree h on d.head_dept = h.dept_no
  )
select d.dept_no,
       d.indent || d.department as department,
       dyb_2008.budget as budget_08,
       dyb_2009.budget as budget_09
from dept_tree d
     left join dept_year_budget dyb_2008
       on d.dept_no = dyb_2008.dept_no
       and dyb_2008.fiscal_year = 2008
     left join dept_year_budget dyb_2009
       on d.dept_no = dyb_2009.dept_no
       and dyb_2009.fiscal_year = 2009

Would you like to be FB maintainer ?

Several months ago, I removed myself as Firebird package maintainer at Arch Linux (AUR). The reason was lack of time by my side, and a lot of work is still needed to be made with the packages.

So I removed myself, in order to allow other person to take charge of it, but no one raised the orphan packages (and they are looking for a warm home, with good parent. Really, they are good packages), and AUR does not have very good FB packages because of it.

Would YOU like to be the package maintainer ? To follow the Firebird community, in sickness and in health ? To fix issues, and make the best effort to make it work for everyone ?

ניהול מפתחות

לאחרונה נתקלתי במספר מאמרים מעניינים אודות ניהול מפתחות. אחד מהם מסביר לעומק את המשמעות של המפתחות, והשני מדגים מה זה מפתחות רעים.

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

אני מקווה כי 2 הקישורים האלו יעזרו לכם בנושא של מסדי נתונים.

עריכת הערך של Firebird בוויקיפדיה העברית

צפריר פנה אלי אתמול בשאלה: האם יש משהו שניתן להוסיף לערך העברי בוויקיפדיה על Firebird. מבט ממש קצר על מה שהיה כתוב, גרם לי להגיד "בארור" (למרות שאני בד"כ לא משתמש בשפה הזו כמובן). והתחלתי לשנות מעט את הערך (בזמן שאני מחכה שפדורה 15 תסיים את ההתקנה).

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

כמו כן, אם יש לכם הערות, הארות, יכולת לתרום לערך, מאוד אשמח שתעשו זאת גם אתם.

מבט ראשוני על Firebird 3.0

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

הדגשים העיקריים של Firebird 3 הם:

  • תמיכה טובה יותר בריבוי מעבדים ו SMP בכלל, עם cache משותף
  • חידוש הארכיטקטורה לגרסאות הבאות

הדגשים המשניים של Firebird 3 הם:

  • שיפור סקלביליות וביצועים
  • אפשרויות אבטחה נוספות
  • אופטימיזציות טובות יותר לשאילתות
  • תוספות ליכולות הניטור של עבודת מסד הנתונים
  • תוספות לשפת SQL

תוכלו להבין את המשמעות של כל האפשרויות המוזכרות כאן במצגת עצמה, הכוללת גם תרשימים.

עדכוני חבילות בArch Linux

קרו 2 דברים השבוע בכל הקשור לחבילות בArch Linux אליהם אני קשור:

  1. החבילה שלי של libfbclient עבור גרסה 2.5 של firebird הועברה מ AUR ל community
  2. עדכנתי את החבילה של firebird-superclassic

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

השינוי השני הגיע בעקבות דיווח על "באג" בנושא, בו אינני מקפיד ליצור את הספרייה של /usr/bin/ . אז קצת יומרני לחשוב שהיא לא תהיה קיימת, אבל החבילה צריכה ליצור ספרייה כזו כאשר היא רוצה להשתמש בספרייה, או לפחות לוודא אם היא קיימת, ואם לא אז ליצור אותה, והתיקון בעצם סידר את הבעיה הזו.

השינוי הזה של החבילה אינו דורש מאף אחד באמת שדרוג בנושא אם החבילה כבר מותקנת אצלכם.

האם המפתחות שלכם יעילים ?

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

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

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

Firebird SQL מספק לנו יכולת של הבנת יעילות של מפתח על ידי יצירת סטטיסטיקה על כל מפתח שנוצר במסד הנתונים (הוא לא מסד הנתונים היחיד שעושה את זה, גם PostgreSQL ו MS-SQL עושים את זה עד כמה שאני יודע). כל מפתח מקבל שם ייחודי שאפשר למצוא אותו בטבלה בשם RDB$INDICES.

הטבלה של RDB$INDICES שומרת הרבה מידע על כל המפתחות שיש במסד הנתונים, כולל הסטטיסטיקה של כל אינדקס וסוג האינדקס (כלומר ראשי או משני). אך הסטטיסטיקה לא מתעדכנת כדרך קבע, אלא רק כאשר מבקשים מFirebird לעשות את זה, או כאשר המסד נתונים נמצא במצב של תחזוקה, דחיסה של נתונים (כלומר הסרת רשומות שנמחקו) או ביצוע גיבוי על ידי gbak, וזה בגלל שסטטיסטיקה לוקחת הרבה מאוד משאבים לחישוב (ממש בגדול). הסטטיסטיקה הזו אבל חשובה בראש ובראשונה למנוע מסד הנתונים עצמו, על מנת לבצע אופטימיזציות עבורינו לשאילתות, וכן סידור המידע בצורה נכונה יוצר, ולכן אנחנו יכולים להגיד לו לבצע איסוף מידע ושמירה שלו לסטטיסטיקה בצורה הבאה:

SET STATISTICS INDEX index_name;

כלומר ללכת לאינדקס שאנחנו רוצים (לפי השם ב RDB$INDICES ולא השם של השדה בטבלה) ולהגיד לו לאסוף מחדש את הסטטיסטיקה עליו.

ואם רוצים לעשות את זה עבור כל המפתחות בפעם אחת, אפשר פשוט ליצור בלוק ריצה כזה (או כ stored procedure): להמשיך לקרוא

Strawberry Perl תומך ב DBD-Interbase

מריוס פופה פרסם סרטון ווידאו (מאוד מצחיק לדעתי :)) וגם הסבר בFirebirdnews כיצד אפשר להשתמש בגרסאות הפיתוח האחרונות של DBD-Interbase בייחד עם Strawberry Perl, כך אפשר להנות גם מעבודה עם Firebird גם בWindows כאשר משתמשים בגרסה הזו של פרל ל windows.