השוואה של SQLite ל-MariaDB ל-PostgreSQL: מערכות ניהול מסדי נתונים יחסיים

הקדמה

דגם הנתונים היחסי, אשר מארגן נתונים בטבלאות של שורות ועמודות, מתמצת בכלי ניהול מסדי נתונים. היום קיימים דגמים נתונים אחרים, כולל NoSQL ו-NewSQL, אך מערכות ניהול מסדי נתונים יחסיים (RDBMSs) נשארות דומיננטיות באחסון וניהול הנתונים ברחבי העולם.

מאמר זה משווה ומפריד בין שלושת מערכות RDBMSs בקוד פתוח הכי נפוצות: SQLite, MySQL ו-PostgreSQL. במיוחד, הוא יחקור את סוגי הנתונים שכל אחת מהמערכות משתמשות בהם, יתרונותיהן וחסרונותיהן, ומצבים שבהם הן מותאמות הטוב ביותר.

A Bit About Database Management Systems

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

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

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

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

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

יש לציין כי תקן ה- SQL המלא הוא גדול ומורכב: תאימות מלאה ל־SQL:2011 דורשת 179 תכונות. בשל זה, רוב מערכות מנהלי בסיסי נתונים אינן תומכות בתקן המלא, אף על פי שישנן מערכות שמתקרבות יותר לתאימות מלאה מאחרות.

סוגי נתונים ואילוצים

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

שמירת מספרים שלמים במסד נתונים היא דבר מרובה מפשוט כמו לשים מספרים בטבלה. סוגי נתונים מספריים יכולים להיות מובנים, מה שאומר שהם יכולים לייצג גם מספרים חיוביים וגם שליליים, או לא מובנים, מה שאומר שהם יכולים לייצג רק מספרים חיוביים. לדוגמה, סוג הנתונים tinyint של MySQL יכול להכיל 8 ביטים של נתונים, ששווה ל-256 ערכים אפשריים. הטווח המובנה של סוג הנתונים הזה הוא מ-128 עד 127, בעוד הטווח הלא מובנה הוא מ-0 עד 255.

להיות מסוגלים לשלוט באילו נתונים מאושרים למסד נתונים הוא חשוב. לפעמים, מנהל מסד נתונים יטיל אילוץ על טבלה כדי להגביל אילו ערכים ניתן להזין אליה. אילוץ מסתמך typicall על עמודה ספציפית אחת, אך ישנם אילוצים שיכולים להיחיל גם על טבלה שלמה. הנה כמה אילוצים שנהוגים לשימוש ב־SQL:

  • ייחודי: החלקה של האילון הזה מבטיחה שאין שני רשומות זהות בעמודה הזו.
  • לא ריק: האילון הזה מבטיח שאין עמודה שמכילה רשומות NULL.
  • מפתח ראשי: שילוב של ייחודי ו-לא ריק, אילון ה-מפתח ראשי מבטיח שאין רשומה בעמודה שהיא NULL ושכל רשומה היא ייחודית.
  • מפתח זר: מפתח זר הוא עמודה בטבלה אחת שמתייחסת ל-מפתח ראשי של טבלה אחרת. אילון זה משמש לקישור בין שתי טבלאות. רשומות בעמודת ה-מפתח זר חייבות להיות קיימות כבר בעמודת ה-מפתח ראשי האב של טבלה זו כדי שהתהליך כתיבה יצליח.
  • בדיקה: אילון זה מגביל את טווח הערכים שניתן להזין לעמודה. לדוגמה, אם היישום שלך מיועד רק לתושבי אלסקה, תוכל להוסיף אילון בדיקה על עמודת מיקוד כדי לאפשר רק רשומות בין 99501 ל-99950.

אם ברצונך ללמוד עוד על מערכות לניהול מסדי נתונים, ראה את המאמר שלנו על השוואה בין מערכות לניהול מסדי נתונים NoSQL ומודלים.

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

SQLite

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

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

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

נתמכים של SQLite סוגי נתונים

SQLite מאפשר מגוון של סוגי נתונים, מאורגנים לתוך המחלקות אחסון הבאות:

Data Type Explanation
null Includes any NULL values.
integer Signed integers, stored in 1, 2, 3, 4, 6, or 8 bytes depending on the magnitude of the value.
real Real numbers, or floating point values, stored as 8-byte floating point numbers.
text Text strings stored using the database encoding, which can either be UTF-8, UTF-16BE or UTF-16LE.
blob Any blob of data, with every blob stored exactly as it was input.

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

יתרונות של SQLite

  • גודל קטן: כפי ששמו מרמז, ספריית SQLite היא קלה מאוד. אף על פי שהמקום שהיא תופסת משתנה בהתאם למערכת שבה היא מותקנת, היא יכולה לתפוס פחות מ-600 קילו-בייט של מקום. בנוסף, היא מכילה את עצמה לחלוטין, מה שאומר שאין תלות חיצונית שעליך להתקין במערכת שלך כדי ש- SQLite תעבוד.
  • שימושי למשתמשים: SQLite מתאר לעתים קרובות כבסיס נתונים "ללא הגדרה" המוכן לשימוש מיידי. SQLite אינו רץ כתהליך שרת, מה שאומר שאין צורך לעצור, להתחיל או לאתחל אותו, ואין לו קבצי הגדרה שיש לנהל. תכונות אלו עוזרות לזרימת העבודה מההתקנה של SQLite ועד לאינטגרציה שלו עם יישום מסוים.
  • נייד: להבדל ממסדי הנתונים האחרים, שבדרך כלל אוחסנים בצורה של אוסף גדול של קבצים נפרדים, בסיס נתונים של SQLite נשמר בקובץ יחיד. ניתן למקם את הקובץ הזה בכל מקום בשיקול ערכים, וניתן לשתף אותו באמצעות תקשורת עם מדיה ניידת או פרוטוקול עבור פרטיות הקבצים.

חסרונות של SQLite

  • קיבולת זמן של התמודדות מוגבלת: למרות שניתן למספר תהליכים לגשת ולשאול בסיס נתונים של SQLite באותו הזמן, רק תהליך אחד יכול לבצע שינויים במסד הנתונים בכל רגע נתון. זה אומר שבעוד שSQLite תומך במקביליות גדולה יותר מרוב מסדי הנתונים המוטבעים האחרים, הוא לא יכול לתמוך ככל כיוון במערכות מסדי נתונים לקוח/שרת כמו MySQL או PostgreSQL.
  • אין ניהול משתמשים: מערכות מסד נתונים לעיתים קרובות מגיעות עם תמיכה למשתמשים, או חיבורים מנוהלים עם הרשאות גישה מוגדרות מראש למסד הנתונים ולטבלאות. מכיוון ש-SQLite קורא וכותב ישירות לקובץ דיסק רגיל, הרשאות הגישה היחידות הישומות הן הרשאות הגישה הרגילות של מערכת ההפעלה התחתונה. זה עושה את SQLite בבחירה רעה ליישומים שדורשים משתמשים מרובים עם הרשאות גישה מיוחדות.
  • אבטחה: מנוע מסד נתונים שמשתמש בשרת עשוי, במקרים מסוימים, לספק הגנה טובה יותר מבאגים ביישום הלקוח מאשר מסד נתונים ללא שרת כמו SQLite. לדוגמה, מצברי עקומים בלקוח לא יכולים לפגוע בזיכרון בשרת. גם, מכיוון ששרת הוא תהליך עמיד יחיד, מסד נתונים לקוח-שרת יכול לשלוט בגישה לנתונים עם דיוק יותר מאשר מסד נתונים ללא שרת. זה מאפשר נעילה עם פינות יותר דקות ויכולת יותר טובה להתמודדות עם התחרות.

מתי להשתמש ב־SQLite

  • יישומים משוטפים: SQLite הוא בחירה מצוינת של מסד נתונים ליישומים שזקוקים לניידות ואינם דורשים הרחבה בעתיד. דוגמאות כוללות יישומים למשתמש יחיד, יישומים ניידים או משחקים.
  • החלפת גישה לדיסק: במקרים שבהם יישום צריך לקרוא ולכתוב קבצים לדיסק ישירות, יתרונות משמעותיים עשויים להיות לשימוש ב־SQLite עקב הפונקציונליות הנוספת והפשטות המתקיימת בשימוש ב-SQL.
  • בדיקה: למספר יישומים ייתכן שיהיה יתר על הכרח לבדוק את הפונקציונליות שלהם עם מנוהל בסיס נתונים המשתמש בתהליך שרת נוסף. SQLite כולל מצב בזיכרון המשמש להרצת בדיקות במהירות ללא עלות התפעולים האמיתיים של בסיס הנתונים, ולכן הוא ברירת המחדל האידיאלית לבדיקות.

מתי לא להשתמש ב- SQLite

  • עבודה עם כמות גדולה של נתונים: SQLite יכול לתמוך מקצועית במסד נתונים בגודל של עד 140TB, תנאי שהדיסק והמערכת הקובץ תומכים גם בדרישות הגודל של בסיס הנתונים. אך אתר האינטרנט של SQLite ממליץ שכל בסיס נתונים המתקרב ל-1TB יישאר בבסיס נתונים מרכזי בשרת הלקוח, משום שבסיס נתונים של SQLite בגודל כזה או גדול יותר יהיה קשה לניהול.
  • נפחי כתיבה גבוהים: SQLite מאפשר רק פעולת כתיבה אחת להתרחש בכל זמן נתון, מה שמגביל באופן משמעותי את התפוקה שלו. אם היישום שלך מחייב הרבה פעולות כתיבה או יותר מכתבנים סדורים מרובים, SQLite עשוי לא להיות מתאים לצרכיך.
  • נדרש גישה לרשת: מכיוון ש- SQLite הוא מסד נתונים ללא שרת, הוא לא מספק גישה ישירה לרשת לנתוניו. הגישה הזו מובנית ביישום. אם הנתונים ב- SQLite ממוקמים במכונה נפרדת מהיישום, יהיה עליו להשתמש בקישור גבוהה רוחב פס מנוע-לדיסק דרך הרשת. זהו פתרון יקר ולא יעיל, ובמקרים כאלה מומלץ להשתמש ב- DBMS של סוג לקוח-שרת.

MySQL

לפי דירוג DB-Engines, MySQL היא ה- RDBMS הפתוחה הפופולרית ביותר מאז שהאתר התחיל לעקוב אחר פופולריות מסדי הנתונים ב- 2012. זו מוצר עשיר בתכונות שמפעיל רבים מהאתרים והיישומים הגדולים ביותר בעולם, כולל טוויטר, פייסבוק, נטפליקס וספוטיפיי. התחלת השימוש עם MySQL יחסית פשוטה, בזכות ה- תיעוד המלא שלו וה- קהילה הגדולה של מפתחים, וגם בגלל השפעת המשאבים הקשורים ל-MySQL ברשת.

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

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

MySQL השפיע על רבות מיישומים צד ג' רחבים, כלים וספריות משולבות שמרחיבים את פונקציונליותו ועוזרים לעבוד איתו בקלות יותר. כמה מהכלים של צד שלישי הנפוצים יותר הם phpMyAdmin, DBeaver, ו־HeidiSQL.

סוגי הנתונים שנתמכים ב־MySQL

סוגי הנתונים ב־MySQL ניתן לארגן לשלושה קטגוריות רחבות: סוגי מספרים, סוגי תאריך ושעה, וסוגי מחרוזות.

סוגי מספרים:

Data Type Explanation
tinyint A very small integer. The signed range for this numeric data type is -128 to 127, while the unsigned range is 0 to 255.
smallint A small integer. The signed range for this numeric type is -32768 to 32767, while the unsigned range is 0 to 65535.
mediumint A medium-sized integer. The signed range for this numeric data type is -8388608 to 8388607, while the unsigned range is 0 to 16777215.
int or integer A normal-sized integer. The signed range for this numeric data type is -2147483648 to 2147483647, while the unsigned range is 0 to 4294967295.
bigint A large integer. The signed range for this numeric data type is -9223372036854775808 to 9223372036854775807, while the unsigned range is 0 to 18446744073709551615.
float A small (single-precision) floating-point number.
double, double precision, or real A normal sized (double-precision) floating-point number.
dec, decimal, fixed, or numeric A packed fixed-point number. The display length of entries for this data type is defined when the column is created, and every entry adheres to that length.
bool or boolean A Boolean is a data type that only has two possible values, usually either true or false.
bit A bit value type for which you can specify the number of bits per value, from 1 to 64.

סוגי תאריך ושעה:

Data Type Explanation
date A date, represented as YYYY-MM-DD.
datetime A timestamp showing the date and time, displayed as YYYY-MM-DD HH:MM:SS.
timestamp A timestamp indicating the amount of time since the Unix epoch (00:00:00 on January 1, 1970).
time A time of day, displayed as HH:MM:SS.
year A year expressed in either a 2 or 4 digit format, with 4 digits being the default.

סוגי מחרוזות:

Data Type Explanation
char A fixed-length string; entries of this type are padded on the right with spaces to meet the specified length when stored.
varchar A string of variable length.
binary Similar to the char type, but a binary byte string of a specified length rather than a nonbinary character string.
varbinary Similar to the varchar type, but a binary byte string of a variable length rather than a nonbinary character string.
blob A binary string with a maximum length of 65535 (2^16 – 1) bytes of data.
tinyblob A blob column with a maximum length of 255 (2^8 – 1) bytes of data.
mediumblob A blob column with a maximum length of 16777215 (2^24 – 1) bytes of data.
longblob A blob column with a maximum length of 4294967295 (2^32 – 1) bytes of data.
text A string with a maximum length of 65535 (2^16 – 1) characters.
tinytext A text column with a maximum length of 255 (2^8 – 1) characters.
mediumtext A text column with a maximum length of 16777215 (2^24 – 1) characters.
longtext A text column with a maximum length of 4294967295 (2^32 – 1) characters.
enum An enumeration, which is a string object that takes a single value from a list of values that are declared when the table is created.
set Similar to an enumeration, a string object that can have zero or more values, each of which must be chosen from a list of allowed values that are specified when the table is created.

יתרונות של MySQL

  • פופולריות ונוחות בשימוש: כאחת ממערכות הבסים הפופולריות בעולם, אין חוסר במנהלי בסים שיש להם ניסיון בעבודה עם MySQL. בנוסף, קיימת מגוון רחב של תיעוד בהדפס ובאינטרנט לגבי כיצד להתקין ולנהל בסים של MySQL. כלולים בזה מספר כלים של צד שלישי – כגון phpMyAdmin – שמטרתם לפשט את התהליך של התחלת העבודה עם בסים.
  • אבטחה: MySQL מותקן עם תסריט שעוזר לך לשפר את אבטחת הבסים שלך על ידי הגדרת רמת האבטחה של הסיסמה של ההתקנה, הגדרת סיסמה עבור המשתמש הראשי, הסרת חשבונות אנונימיים והסרת מסדי נתונים בדיקה הנגישים, כברירת מחדל, לכל המשתמשים. בנוסף, בניגוד ל־SQLite, MySQL תומך בניהול משתמשים ומאפשר לך להעניק הרשאות גישה באופן אישי לכל משתמש.
  • מהירות: על ידי בחירה שלא ליישם תכונות מסוימות של SQL, מפתחי MySQL יכלו לתת עדיפות למהירות. בעוד בדיקות תקן מעודכנות יותר מראות שמסדי נתונים רצים אחרים כמו PostgreSQL יכולים להתאים או לפחות להתקרב למהירות של MySQL, MySQL עדיין מחזיקה בשם כסיסמה לפתרון בסים קצבי מאוד.
  • שיכפול: MySQL תומך במספר סוגים שונים של שיכפול, שהוא המעשה של שיתוף מידע בין שני או יותר מארחים כדי לעזור לשפר את האמינות, הזמינות והעמידות בפני תקלות. זה מועיל להגדיר פתרון גיבוי מסד נתונים או קניית קנה מידה אופקית למסד הנתונים של האדם.

חסרונות של MySQL

  • הגבלות ידועות: מכיוון ש-MySQL נוצר בשביל מהירות ונוחות בשימוש יותר מאשר תואם SQL מלא, הוא מגיע עם הגבלות פונקציונליות מסוימות. לדוגמה, הוא חסר בתמיכה ב FULL JOIN סעיפים.
  • רישיון ותכונות פרופריטריות: MySQL הוא תוכנה עם רישיון כפול, עם גרסה קהילתית חינמית וקוד פתוח שנרשמת תחת GPLv2 ומספר גרסאות מסחריות בתשלום ששוחררו תחת רישיונות פרופריטריים. בגלל זה, כמה תכונות ותוספים זמינים רק עבור הגרסאות הפרופריטריות.
  • התפתחות איטית: מאז שפרויקט MySQL רכש על ידי חברת Sun Microsystems בשנת 2008, ואח"כ על ידי חברת Oracle Corporation בשנת 2009, היו תלונות ממשתמשים על הידור התהליך למערכת הניהול בסיסי הנתונים שהוא מאוד איטי, מאחר שהקהילה אינה מסוגלת יותר לפעול במהירות כדי לטפל בבעיות וליישם שינויים.

מתי להשתמש ב־MySQL

  • פעולות מבוזרות: תמיכת השיבוץ של MySQL עושה אותו בחירה מצוינת עבור הגדרות מסדי נתונים מבוזרים כמו ארכיטקטורות ראשי-משני או ראשי-ראשי.
  • אתרי אינטרנט ויישומים רשת: MySQL מפעילה מספר רב של אתרי אינטרנט ויישומים ברחבי האינטרנט. זהו, למרבה החלק, בזכות כמה קל הוא להתקין ולהגדיר מסד נתונים של MySQL, וכמו כן בזכות מהירותו הכוללת והקישוריות שלו לעתיד.
  • צמיחה צפויה בעתיד: תמיכת השיבוץ של MySQL עשויה לסייע בהרחבה אופקית. בנוסף, זה תהליך יחסית פשוט לשדרג למוצר MySQL מסחרי, כמו MySQL Cluster, שתומך בשיבוץ אוטומטי, תהליך נוסף של הרחבה אופקית.

מתי לא להשתמש ב־MySQL

  • הצפיפות תקפה של SQL חיונית: מאחר ש־MySQL אינו מנסה ליישם את התקן SQL המלא, כלי זה אינו עומד בכלל התקני SQL באופן מלא. אם העמידה בתקן SQL המלא או אפילו קרוב לכך היא חיונית למקרה השימוש שלך, עשוי להיות טוב להשתמש במנהל מסד נתונים המציית יותר לתקן.
  • השוויון והנפחים הגדולים של הנתונים: אף ש־MySQL בדרך כלל פועלת טוב עם פעולות שקריאה רבות, קריאות-כתיבות מקבילות עשויות להיות בעיה. אם היישום שלך יכלול מספר רב של משתמשים כותבים נתונים בו בו זמנית, מנהל מסד נתונים אחר כמו PostgreSQL עשוי להיות בחירה טובה יותר למסד נתונים.

PostgreSQL

PostgreSQL, הידוע גם בשם Postgres, מציע לעצמו כ־"מסד נתונים רציונלי מבוסס קוד פתוח המתקדם ביותר בעולם". נוצר עם המטרה להיות ניתן להרחבה ביותר ולהיות תואם תקנים. PostgreSQL הוא מסד נתונים רציונלי-עצם, שכן למרות שהוא בעיקר מסד נתונים רציונלי, הוא גם כולל תכונות – כמו ירושה של טבלאות ועומס פונקציות – שבדרך כלל מתייחסים אליהן יותר כ־מסדי נתונים עצם.

Postgres מסוגל לטפל במספר משימות באופן יעיל בו זמנית, מאפיין הידוע בשם Concurrency. הוא משיג זאת בלי נעילות קריאה תודות ליישום של Multiversion Concurrency Control (MVCC), המבטיח את האטומיות, הקביעות, הבידוד וההתמדה של עסקאותיו, שגם נכונות בשם ACID.

PostgreSQL אינו כה נפוץ כמו MySQL, אך עדיין קיימים מספר כלי צד שלישי וספריות המיועדים לפשט את העבודה עם PostgreSQL, כולל pgAdmin ו־Postbird.

PostgreSQL’s Supported Data Types

PostgreSQL תומך בסוגי נתונים נומריים, מחרוזות, ותאריך ושעה כמו MySQL. בנוסף, הוא תומך בסוגי נתונים עבור צורות גיאומטריות, כתובות רשת, מחרוזות ביטים, חיפושי טקסט, ורשומות JSON, כמו גם מספר סוגי נתונים אידיוסינקרטיים.

סוגי מספרים:

Data Type Explanation
bigint A signed 8 byte integer.
bigserial An auto-incrementing 8 byte integer.
double precision An 8 byte double precision floating-point number.
integer A signed 4 byte integer.
numeric or decimal A number of selectable precision, recommended for use in cases where exactness is crucial, such as monetary amounts.
real A 4 byte single precision floating-point number.
smallint A signed 2 byte integer.
smallserial An auto-incrementing 2 byte integer.
serial An auto-incrementing 4 byte integer.

סוגי תווים:

Data Type Explanation
character A character string with a specified fixed length.
character varying or varchar A character string with a variable but limited length.
text A character string of a variable, unlimited length.

סוגי תאריך ושעה:

Data Type Explanation
date A calendar date consisting of the day, month, and year.
interval A time span.
time or time without time zone A time of day, not including the time zone.
time with time zone A time of day, including the time zone.
timestamp or timestamp without time zone A date and time, not including the time zone.
timestamp with time zone A date and time, including the time zone.

סוגי גיאומטריה:

Data Type Explanation
box A rectangular box on a plane.
circle A circle on a plane.
line An infinite line on a plane.
lseg A line segment on a plane.
path A geometric path on a plane.
point A geometric point on a plane.
polygon A closed geometric path on a plane.

סוגי כתובות רשת:

Data Type Explanation
cidr An IPv4 or IPv6 network address.
inet An IPv4 or IPv6 host address.
macaddr A Media Access Control (MAC) address.

סוגי מחרוזות ביטים:

Data Type Explanation
bit A fixed-length bit string.
bit varying A variable-length bit string.

סוגי חיפוש טקסט:

Data Type Explanation
tsquery A text search query.
tsvector A text search document.

סוגי JSON:

Data Type Explanation
json Textual JSON data.
jsonb Decomposed binary JSON data.

סוגי נתונים נוספים:

Data Type Explanation
boolean A logical Boolean, representing either true or false.
bytea Short for “byte array”, this type is used for binary data.
money An amount of currency.
pg_lsn A PostgreSQL Log Sequence Number.
txid_snapshot A user-level transaction ID snapshot.
uuid A universally unique identifier.
xml XML data.

יתרונות של PostgreSQL

  • התאמה לתקן SQL: יותר מ SQLite או MySQL, PostgreSQL נוקטת במטרה להידבק באופן קרוב יותר לתקני SQL. לפי התיעוד הרשמי של PostgreSQL, PostgreSQL תומכת ב-160 מתוך 179 התכונות הדרושות להתאמה מלאה לתקן SQL:2011, בנוסף לרשימה ארוכה של תכונות אופציונליות.
  • קוד פתוח ומונע על ידי הקהילה: פרויקט קוד פתוח מלא, קוד המקור של PostgreSQL מפותח על ידי קהילה גדולה ומכוננת. באופן דומה, קהילת Postgres תורמת ושומרת על מספר רב של מקורות מקוונים המתארים כיצד לעבוד עם מערכת הניהול המסדים, כולל התיעוד הרשמי, וויקי PostgreSQL, ופורומים מקוונים שונים.
  • ניתן להרחיב: המשתמשים יכולים להרחיב פוסטגריסקיול תוכנתית ובתוך זמן קצר דרך פעולת הקטלוג הנתמך ושימושה בטעינה דינמית. ניתן לקבוע קובץ קוד אובייקט, כמו ספריית משותפת, ופוסטגריסקיול תטען אותו לפי הצורך.

חסרונות של PostgreSQL

  • ביצועי זיכרון: לכל חיבור ללקוח חדש, PostgreSQL משתמש בתהליך חדש. לכל תהליך חדש מוקצים כ-10 מגה־בייט של זיכרון, שיכול להתעלם מהר במקרים של בסיסי נתונים עם הרבה חיבורים. לכן, לפעולות קריאה פשוטות המבוססות על הרבה קריאות, פוסטגרסקיול מציעה בדרך כלל ביצועים פחותים ממניות רכב מסוג אחר של מסדי נתונים רצופים, כמו MySQL.
  • פופולריות: למרות שהשימוש ב-PostgreSQL הפך יותר נפוץ בשנים האחרונות, הוא השתגע לעבר MySQL בצורת הפופולריות. אחת התוצאות של כך היא שיש פחות כלים של צד שלישי שיכולים לעזור בניהול מסד נתונים של PostgreSQL. באופן דומה, יש פחות מנהלי מסד נתונים עם ניסיון בניהול מסד נתונים של Postgres בהשוואה לאלו עם ניסיון ב-MySQL.

מתי להשתמש ב־PostgreSQL

  • אינטגריטיות הנתונים חשובה: PostgreSQL היא תוכנת המסד הרצפית המתממשת בתקן ACID מאז 2001 ומיישמת בקרת מטבעות רבת גרסאות כדי להבטיח את עדכניות הנתונים, מה שהופך אותה לבחירה מקצועית למסד נתונים כשאינטגריטיות הנתונים חיונית.
  • אינטגרציה עם כלים אחרים: PostgreSQL תואם מגוון רחב של שפות תכנות ופלטפורמות. זה אומר שאם תצטרך להעביר את מסד הנתונים שלך למערכת הפעלה אחרת או לאינטגרציה עם כלי מסוים, זה יהיה יותר קל עם מסד נתונים של PostgreSQL מאשר עם מסד נתונים אחר.
  • פעולות מורכבות: Postgres תומך בתוכניות שאפשר להשתמש בהן רבי-ליבות כדי לענות על שאילתות במהירות גבוהה יותר. זה, בשילוב עם התמיכה החזקה שלו בכתיבה מרובה משתמשים סימולטנית, עושה אותו בחירה מצוינת לפעולות מורכבות כמו אחסון נתונים ועיבוד עסקאות מקוונות.

מתי לא להשתמש ב-PostgreSQL

  • מהירות היא חיונית: על חשבון המהירות, PostgreSQL נוצר עם ניתוח והתאמה ארכיטקטונית בדעת. אם הפרויקט שלך מחייב את השאילתות בקריאה המהירה ביותר אפשרית, PostgreSQL עשוי לא להיות הבחירה הטובה ביותר למסד הנתונים שלך.
  • התקנות פשוטות: בגלל סט התכונות הגדול שלו וההידור החזק שלו ל- SQL סטנדרטי, Postgres יכול להיות יתר על המיד להגדרות מסד נתונים פשוטות. לפעולות שמתבצעות רבות קריאה שבהן נדרשת מהירות, תכנות מערכת המסד הנתונים MySQL נראה כבחירה פרקטית יותר.
  • שיבוץ מורכב: אף על פי ש־PostgreSQL מספקת תמיכה חזקה בשיבוץ, עדיין מדובר בתכונה יחסית חדשה. תצורות מסוימות — כמו ארכיטקטורת פריימרי־פריימרי — אפשריות רק עם הרחבות. שיבוץ הוא תכונה יותר בשלת ב־MySQL והרבה משתמשים רואים את שיבוץ של MySQL כנוח יותר ליישום, בעיקר לאלה שחסר להם הניסיון הדרוש בניהול מסדי נתונים ומערכות.

מסקנה

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

איך לנהל מסד נתונים SQL גלוש דף המרמז. לעבר כלי NoSQL, השוואה של מערכות ניהול מסדי נתונים NoSQL.

מקורות

Source:
https://www.digitalocean.com/community/tutorials/sqlite-vs-mysql-vs-postgresql-a-comparison-of-relational-database-management-systems