לא SQL

בשנת 2009 יצאה לה לדרך תנועה חדשה אשר אומרת לא ל SQL. התנועה נתנה דגש לעוד מסדי נתונים אשר הגישה אליהם לא מתבצעת על ידי SQL ולרוב יש יחסים בין טבלאות ותמיכה ב ACID.

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

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

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

  • מה סוג המידע הנשמר
  • מה סוג המידע שצריך לצאת
  • מי צריך לבצע מניפולציה על המידה
  • מה סוג המניפולציה של המידע
  • מה כמות המידע שצריכה להישמר
  • כמה חיבורים יש למידע
  • מה התנהגות החיבורים עם המידע

והרשימה עוד ארוכה.

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

אנחנו נמצא את עצמנו בוחרים במסדי נתונים מבוססי מידע (כדוגמת  MongoDB – מכיל יותר יכולות מ CouchDB)  כאשר השדות שאנחנו שומרים יכולים להשתנות ולא פשוט ליצור סכמה אשר תספק מענה הולם לצורך המשתנה של השדות. החיסרון הוא שקשה יותר לבצע מניפולציה על המידע ברמת שליפת המידע, היות ואין אחידות למידע. כל רשומה במסד נתונים כזה פר טבלה אפשר לקחת מערכת קבצים כדוגמה בשביל להסביר אותו. כל טבלה היא בעצם ספרייה (יש גם אפשרות לתתי ספריות), ואפשר לשים שם הרבה סוגים של קבצים, למשל קובץ תמונה מסוג jpg, קובץ תמונה מסוג png, קובץ odt וקובץ ריצה של elf. אמנם לכולם יש שם, נתיב, כולם נמצאים תחת אותה ספרייה ואולי עוד כמה תכונות זהות שקשורות למערכת קבצים, אבל התוכן של כל קובץ שונה, ולכן המניפולציות האפשרויות על המידע אינן כאלו פשוטות. וזה בעצם מסד נתונים מבוסס מסמכים (סכמות) כדוגמת MongoDB וCouchDB.

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

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

עוד מסד נתונים מאוד מעניין שיש ברשימה זה מסד נתונים מבוסס ממדים. מסד נתונים כזה, בד"כ נועד להצליב מידע מהרבה מקומות ושרתי מסד נתונים כאלו בד"כ (לא מחייב, אבל תמצאו אותם בשם הזה) בשם OLAP או Online analytic processing. בתוך רשימת מסדי הנתונים האלו, יש למשל cube אשר מאוד נפוץ במקומות בהם רוצים לנתח מידע מכמה מקומות ש SQL רגיל אינו מסוגל לעשות זאת. ואם הוא כן מסוגל, אז בד"כ בצורה לא יעילה. כלומר כל חישוב שכזה יכול לקחת לפעמים ימים שלמים. בCube למשל סידור המידע לא תמיד (תלוי בצורת העבודה) חשוב, היות וכל המידע מעניין, ואי אפשר לעשות מפתח מכל המידע.

הצלבת מידע מוכרת מאוד המשתמשת ב cube היא הצורה שחברות האשראי/מרכולים שונים יודעים לתת לנו תלושים המתאימים לצורת הקנייה שלנו. אם תשימו לב – תצליחו למצוא חוקיות מאוד מעניינת כל פעם שזה קורה לכם (אצלי למשל הם לא מצליחים עם זה :)).

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

5 מחשבות על “לא SQL

  1. ik_5 מאת

    מה הקשר אלי ?! אני בסה"כ הצגתי עוד משהו שיותר מידי אנשים שאני מכיר לא מכירים, לא הבעתי דעה על מסדי נתונים למעט זה דבר מסריח🙂

  2. פינגבק: מה זו סכמה במסדי נתונים ? « לראות שונה

  3. פינגבק: סיכום אוגוסט פנגווין 2010 « לראות שונה

  4. פינגבק: Redis or not | לראות שונה

כתיבת תגובה

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

הלוגו של WordPress.com

אתה מגיב באמצעות חשבון WordPress.com שלך. לצאת מהמערכת / לשנות )

תמונת Twitter

אתה מגיב באמצעות חשבון Twitter שלך. לצאת מהמערכת / לשנות )

תמונת Facebook

אתה מגיב באמצעות חשבון Facebook שלך. לצאת מהמערכת / לשנות )

תמונת גוגל פלוס

אתה מגיב באמצעות חשבון Google+ שלך. לצאת מהמערכת / לשנות )

מתחבר ל-%s