מכירים את הדאטה-בייס הפופולרי ביותר בעולם?

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

מאת עידו פרלמוטר, מהנדס תוכנה באקווה סקיוריטי

אם אתם כותבים קוד כבר מספיק זמן, אין ספק שנתקלתם לפחות במסד נתונים אחד. אולי זה היה MySQL, Oracle, MS-SQL או PostgreSQL, או שאתם מהדור החדש ועובדים דווקא עם MongoDB או מסד נתונים אחר מעולם ה-NoSQL כמו Couchbase, Redis או Cassandra. אבל את מסד הנתונים הפופולרי ביותר בעולם יצא לכם להכיר?

SQLite הוא מסד נתונים רלציוני נטול שרת, שכל דאטה-בייס בו מנוהל בתוך קובץ אחד במערכת הקבצים שלכם. זהו מסד הנתונים הפופולרי ביותר בעולם, ואתם יכולים למצוא אותו כמעט בכל מקום: בטלפונים הסלולריים שלכם (בין אם אתם אנשי Android או אנשי iPhone); במערכות ההפעלה שלכם (בין אם אתם אנשי Windows, Mac או Linux); באפליקציות כמו Skype, iTunes ו-Dropbox; במערכת המולטימדיה של הרכב שלכם; ואפילו במטוסים. גולשים באינטרנט עם Chrome או Firefox? הדפדפן שלכם עושה שימוש נרחב ב-SQLite כדי לאחסן מידע, כמו אתרים מועדפים, עוגיות, העדפות אישיות ומידע של אתרים שונים שאתם מבקרים בהם. אם תיכנסו לתיקיית הפרופיל של הדפדפן שלכם, תמצאו לא מעט קבצי דאטה-בייס, ואם תתקינו SQLite תוכלו לפתוח את הדאטה-בייסים האלה עם הפקודה sqlite3 (שמספקת shell פשוט להרצת שאילתות SQL) ולראות איזה מידע שמור לכם.

SQLite כתוב כספריית C שניתן לבנות יחד עם התוכנה שלכם, כך שמדובר בעצם במסד נתונים מוטמע (embedded). התוכנה שלכם לא צריכה לתקשר עם שרת כלשהו שמספק את מסד הנתונים – יש לה כל מה שהיא צריכה כדי לעבוד עם קבצי SQLite. הספרייה ותיקה מאוד, מתאימה לשימוש Production, וניתן להשתמש בה כמעט מכל שפת תכנות שנמצאת בשימוש נרחב (וגם כאלה שלא). היא עובדת מצוין גם בתוכנות Multi-threaded, ובניגוד לרוב הפרויקטים בעולם הקוד הפתוח ותוכנה חופשית, הקוד של הספרייה נמצא ברשות הציבור (Public domain) כך שמגבלות השימוש בספרייה מעטים עד לא קיימים.

השימוש של כרום ופיירפוקס ב-SQLite מהווה דוגמה קטנה לאחד מהשימושים הנפוצים ביותר של מסד הנתונים הזה: Application file format. אם אתם כותבים אפליקציה שצריכה לשמור מידע בקבצים, SQLite יכול להיות אופציה מצוינת, כי הוא גם מאפשר ממשק נוח לשמירה וקריאה של מידע (ממשק SQL שאתם כבר מכירים), וגם הפורמט עצמו מאוד יעיל.

הרבה אפליקציות כבר עושות את זה. Fossil, לדוגמה, היא מערכת ניהול קוד מבוזרת (כמו Git או Svn) שבה כל מאגר קוד נשמר בקובץ SQLite אחד, וגם Adobe Lightroom משתמשת בקבצי SQLite בתור פורמט הקבצים שלה. שתי הדוגמאות האלו מדגישות את העובדה שאפשר לשמור כל סוג מידע בקבצים האלה, כולל תוכן של קבצים בינאריים שלמים.

מקור: Pixabay

לבשל בירה עם דאטה-בייס

רוצים לחדד את יכולות ה-SQL שלכם? הדרך המהירה ביותר היא עם SQLite – אין צורך להקים שרתים ולהתעסק עם קונפיגורציות, כל מה שצריך זה את ה-CLI שמגיע עם SQLite ואתם יכולים להתחיל לשחק עם דאטה-בייסים רלציונים, להקים טבלאות עם כל מיני קשרים וללמוד איך לעשות את ה-“JOIN-ים” האלה שתמיד פחדתם מהם.

אם אתם רוצים לעשות פרויקט אישי על גבי פלטפורמת SoC כמו Raspberry Pi או Arduino, יש פה אופציה מצוינת לשמירת מידע. עם SQLite תוכלו לחבר בין תחביבים שונים שלכם. אני למשל אוהב להכין בירה בבית, וזה חשוב לשמור על טמפרטורה קבועה במקררי התסיסה. עם בקר טמפרטורה פשוט, Raspberry Pi ו-SQLite אני יכול לבנות ממשק ניהול דרכו אני יכול לשלוט על הבקר ולהגדיר לו מראש פרופיל טמפרטורה משתנה (היום תשמור במקרר על 17 מעלות, מחר תשמור על 19), וכן לשמור ולהציג סטטיסטיקה על הביצועים של הבקר. אולי אתם רוצים להקים בלוג אישי קטן ולהריץ אותו ישירות מה-Raspberry Pi ששמתם מעל המקרר שלכם בדירה? קדימה, עם SQLite אתם יכולים.

חשוב לציין שמדובר פה במסד נתונים מלא, שמממש כמעט את כל סטנדרט ה-SQL, ומספק טרנזאקציות ACID. בין היכולות השונות תמצאו תמיכה באינדקסים, טריגרים, שאילתות שמורות (views), מפתחות זרים, אילוצי מידע (לדוגמה כל ערך בעמודה X חייב להיות גדול יותר מ-0), חיפוש טקסט מלא, טבלאות וירטואליות ופונקציות מוגדרות-אפליקציה. אפילו יש תמיכה ב-JSON שמאוד מזכירה את זו של PostgreSQL.

יכולות מפתיעות נוספות שתמצאו הן יצירת דאטה-בייסים בתוך הזיכרון (in-memory), פקודות Upsert (עדכן את השורה אם היא קיימת, צור אותה אם לא) באמצעות REPLACE INTO, והיכולת להתחבר לכמה דאטה-בייסים שונים במקביל (באמצעות ATTACH DATABASE).

פרט מידע מעניין על SQLite הוא שהוא מגדיר את עצמו כ-Dynamically Typed Database. כלומר, בניגוד לרוב מסדי הנתונים הרלציוניים, אין חובה שהמידע בעמודה מסוימת, שמוגדרת כ-Integer לדוגמה, אכן יהיה מספרי, ולכל עמודה בכל שורה יכול להיות סוג מידע אחר. אם אתם זקוקים לגמישות מן הסוג הזה, אל תמהרו לרוץ לעולם ה-NoSQL.

אין חשיבות לגודל השדות

ל-SQLite תוכלו למצוא גם הרחבות שימושיות. SQLCipher למשל מאפשרת לכם להצפין את הדאטה-בייס שלכם במלואו. הרחבה זו היא קוד פתוח וניתן להשתמש בה גם בפרויקטים מסחריים (אציין שישנה הרחבה רשמית דומה בשם SEE, אך היא מצריכה רישיון בתשלום). כך תוכלו למנוע מאנשים להוציא מידע מהדאטה-בייס גם אם יש להם גישה ישירה לקובץ, וההצפנה נעשית באמצעות תקן AES-256.

אם תקראו קצת את הדוקומנטציה של SQLite, תראו שהוא לא מומלץ לאפליקציות client-server קלסיות. לא אתווכח, אבל יש אנשים שלא מוכנים לקבל את זה והם הלכו מספיק רחוק כדי להקים את פרויקט rqlite, שמתיימר להפוך את SQLite לדאטה-בייס רלציוני מבוזר, עם רפליקציה ובחירות master וכל הג’אז הזה. שווה לעקוב אחר הפרויקט.

בואו נסתכל קצת על קוד. מערכת ההפעלה שלי היא Arch Linux, אך לרגע אעמיד פנים שאני משתמש ב-Ubuntu. כדי להתקין את sqlite3 אריץ את הפקודה:

כדי ליצור דאטה-בייס חדש ולהתחיל לשחק עם SQLite, אריץ את הפקודה הבאה:

עכשיו, כשאני בתוך ה-shell של SQLite, אני יכול להתחיל ליצור טבלאות. לדוגמה, אצור טבלה שתכיל מידע על הלהקות האהובות עלי:

שימו לב של-SQLite לא אכפת מגודל השדות. זוכרים שאמרתי לכם שהוא Dynamically Typed? אין צורך לטרוח להגיד לו ששם הלהקה לא יכול להיות ארוך יותר מ-128 תווים. לא תמצאו פה סוג מידע שנקרא VARCHAR, כל המידע הטקסטואלי נקרא TEXT. סוגי המידע היחידים הם NULL, INTEGER, REAL, TEXT ו-BLOB, באמצעותם תוכלו לשמור מידע מספרי, טקסטואלי ובינארי.

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

נחזור ל-shell וניצור טבלה נוספת שתכיל מידע על הופעות חיות שראיתי:

​בואו נכניס קצת מידע:

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

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

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

הכתבה בחסות aqua

אקווה סקיוריטי (@AquaSecTeam) סטארט אפ ישראלי עם משרדים בארה"ב, מתמחה בהגנה על מערכות המפעילות ארכיטקטורה של קונטיינרים (Docker), תחום חדש בעולם מערכות המידע הנמצא בצמיחה מהירה. הפתרון של Aqua מאפשר לארגונים לקבל שקיפות לגבי הפעילות קונטיינרים והפעלת מדיניות אבטחה עליהם. הפתרון מקיף את כל מחזור חיי התוכנה מהפיתוח ועד להרצה, ומגן מפני איומים שונים – בתוך הארגון ומבחוץ. פחות משנה מהקמתה, אקווה צברה לקוחות גדולים ומובילים בתחומי הפיננסים, טכנולוגיה ותשתיות. תוכלו לפגוש את הצוות של Aqua ב Meetup הקרוב -Open Source for Developers - Bit, Scapy and Prometheus שיתקיים ביום חמישי, 23.3 בשעה 18:00בגוגל קמפוס, תל-אביב. להרשמה כאן

כתב אורח

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

הגב

13 Comments on "מכירים את הדאטה-בייס הפופולרי ביותר בעולם?"

avatar
Photo and Image Files
 
 
 
Audio and Video Files
 
 
 
Other File Types
 
 
 
Sort by:   newest | oldest | most voted
beer master
Guest

אתה משחרר לנו את הקוד של הבקר למקרר התסיסה בקוד פתוח ?

עידו
Guest

אשתדל בעתיד הקרוב. עד אז ניתן למצוא פרויקטים דומים כמו ה-BrewPi (למרות שהוא לא משתמש ב-SQLite עד כמה שידוע לי).

ערן
Guest

הפסקתי לקרוא כשרשמת בטבלה להקות כמו יוזלס איידי.

משה
Guest

כן, מגאני הפסקתי לקרוא ב ״SQLite יעמוד היטב במשימה״.

עידו
Guest

מקווה שהפסקת כדי ללכת לשמוע אותם.

משה
Guest

{{{ תוֹדה }}}

עודד
Guest

כתבה מצוינת , ודוגמא קלילה ועניינית 😀

יצחק
Guest

ב”ה

כתבה איכותית קלילה ולעניין
תודה.

אריה
Guest

לא כל מסד הנתונים נמצאים בסופו של דבר הוא קובץ במערכת קבצים? אין הרבה הבדל בניהם… פשוט בmysql הם בשרת עם פרוסס שמנהל את התקשורת דרך הרשת tcp/ip, ובsqlite הגישה לקובץ ישירה מהקוד המקומי אופליין… אני לא חושב שיש הרבה הבדל מלבד הביצועים שכנראה וכמו השם sqllite קוצץ בהרבה תכונות מיותרות כדי שיהיה יותר קליל לעבודה אופליין…

עידו
Guest
ההבדל המרכזי הוא שלא מדובר פה במערכת קליינט-סרבר אלא בקוד מוטמע. זה נכון שמסדי נתונים אחרים גם בסופו של דבר שומרים את המידע שלהם בקבצים (בד”כ משמעותית יותר מקובץ אחד לדטה-בייס) אבל הפורמט שלהם בעיקרון הוא לא פורטבילי. אתה לא יכול (לפחות לא בלי מאמץ משמעותי) להעתיק את קבצי הדטה-בייס ולהעביר אותם לידיים אחרות. נאמר שיש לך תוכנה שצריכה כבר להגיע עם דטה-בייס ראשוני שמכיל מידע (נגיד אנטי-וירוס שמכיל חתימות וירוסים). עם מסדי נתונים אחרים אתה תאלץ להסתמך על גיבוי שהוצאת מסביבת הבנייה שלך, אותו אתה טוען למחשב היעד בעת ההתקנה. עם SQLite אתה פשוט מספק את הקובץ ביחד עם… Read more »
עידו
Guest
ההבדל המרכזי הוא שזה לא מימוש קליינט/סרבר אלא מוטמע לחלוטין. זה נכון ששאר מסדי הנתונים בסופו של דבר גם שומרים את הנתונים בקבצים, רק שבד”כ הדטה-בייס מחולק במספר (לפעמים גדול) של קבצים והפורמט שלהם אינו פורטבילי. לרוב אתה לא יכול פשוט להעתיק את הקבצים של הדטה-בייס ולהעביר אותם לידיים אחרות. נאמר שאתה כותב אפליקציה שמגיעה עם דטה-בייס ראשוני שכבר מכיל מידע (לדוגמה אנטי-וירוס שמגיע עם חתימות וירוסים). עם מסד נתונים אחר אתה תסתמך על גיבוי שהוצאת משרת חי שמאוחר יותר אתה טוען לשרת היעד בזמן ההתקנה של התוכנה. עם SQLite אתה יכול פשוט לספק את הקובץ של הדטה-בייס ביחד עם… Read more »
תומר
Guest

SQLite הוא לא בסיס הנתונים הפופולרי ביותר, הוא אולי הפופולרי ביותר בשביל מי שכתב את הכתבה הזאת.

מוזמן להיכנס לאתר הבא:
http://db-engines.com/en/ranking
ולראות באיזה מקום הוא מדורג כבר שנים.

יש כאן המון אי דיוקים וממש חבל.

תומר
Guest

כתבה מאד מעניינת, תודה עידו! לא ידעתי ש SQLite הוא Dynamically Typed. האמת שאצלנו אנחנו נתקלים לא מעט בבעיות ביצועים עם SQLite. אנחנו מריצים בפלטפורמות שונות את אותה השאילתא עם מסדי נתונים שונים (למשל MySQL ו SQLite). אנחנו הרבה פעמים צריכים לייעל את השאילתות עבור מסד הנתונים הספציפי – ממליץ על EverSQL Query Optimizer בחום.

wpDiscuz

תגיות לכתבה: