צרו קשר-

 

 

למה שארצה להשתמש ב-JSON ב-SQL Server?

Written By: גיא גלנצר 04/09/2016

SQL Server 2016 כולל תמיכה ב-JSON, בדומה לתמיכה שקיימת ב-SQL Server ל-XML עוד מימי SQL Server 2000. גם XML וגם JSON הם מבני נתונים שמוגדרים כ-Semi-Structured, בניגוד למודל הרלציוני, שהוא Structured. SQL Server הוא RDBMS, שזה ראשי תיבות של Relational Database Management System. זוהי מערכת שיש לה מנוע רלציוני. אז למה XML ו-JSON? איך זה קשור?

למה שארצה להשתמש ב-JSON או ב-XML בבסיס הנתונים הרלציוני שלי?

Questions

אז יש כמה תרחישים שבהם זה עושה שכל…

 

1.  Semi-Structured Data

כבר יש לך בסיס נתונים רלציוני, שבו הנתונים הם Structured. אבל חלק מהנתונים הם Semi-Structured, והם לא מתאימים למבנה הנתונים הרלציוני.

אחד מהלקוחות שלנו מפעיל אתר הימורים (Online Casino), שבו יש מספר משחקים, כגון: בלאקג'ק, רולטה ומכונות מזל.  אחת הדרישות היא לשמור את כל המהלכים של כל אחד מהמשחקים, על מנת שיהיה אפשר אחר-כך "לנגן" את המשחק מחדש באתר. כדי לשמור נתונים מהסוג הזה במודל רלציוני, עלינו ליצור מספר טבלאות ואוביקטים נוספים עבור כל סוג משחק. הרבה יותר פשוט לשמור את מהלכי המשחקים כ-JSON או ב-XML בתוך עמודה אחת בטבלה "GameResults". בכל שורה בטבלה, העמודה תכיל אוביקט JSON/XML, עם כל הנתונים שמתאימים לסוג המשחק וגם למשחק הספציפי שמיוצג ע"י אותה שורה. לדוגמא, אוביקט שמייצג את המהלך של משחק בלאקג'ק יכיל את הקלפים של הדילר ושל השחקן, וכן האם השחקן השתמש בביטוח או לא. אבל במקרה של רולטה, לעומת זאת, האוביקט יכיל את המספר הזוכה ואת כל ההימורים על השולחן.

ע"י שימוש ביכולות של XML או JSON ב-SQL Server, הרבה יותר קל לפתח ולתחזק פתרון שמבוסס על עמודה כזאת. כעת אפשר לתשאל את העמודה הזאת באמצעות פונקציות מובנות או פשוט לקרוא אוביקטים בשלמותם ולפרסר אותם באפליקציה.

 

2.  לפשט את תהליכי העיצוב והפיתוח

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

אחד הלקוחות שלנו מפתח מערכת CRM מבוססת SQL Server. במערכת יש מודול של דו"חות, שמאפשר למשתמשים לבנות דו"חות באופן דינמי ולשמור אותם. מאחורי הקלעים, בסיס הנתונים צריך לשמור את המבנה של כל דו"ח כזה כמו גם את נתוני הדו"ח עצמם. מכיוון שמשתמשים יוצרים דו"חות ומשנים דו"חות קיימים כל הזמן, שמירת המידע הזה במודל רלציוני היא משימה די מאתגרת, מכיוון שצריך כל הזמן להריץ פקודות DDL, לטפל ב-Constraints, באינדקסים, בהרשאות, וכו'. במקום זה, החלטנו לשמור את כל המידע הזה בפורמט XML. בצורה הזאת, כל השינויים נעשים ע"י האפליקציה, והם שקופים לגמרי לבסיס הנתונים. הגישה הזאת מקצרת באופן משמעותי את זמני העיצוב, הפיתוח וה-Deployment, והיא גם מקטינה את הסיכון שמעורב בתהליכים האלה.

 

3.  אינטגרציה עם פלטפורמות NoSQL

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

רוב מערכות ה-NoSQL משתמשות ב-JSON כפורמט מובנה לשמירת נתונים. כשצריך לחבר נתונים מבסיס הנתונים הרלציוני ונתונים ומבסיס הנתונים הלא-רלציוני, צריך דרך נוחה להמיר את הנתונים מפורמט אחד לשני. זה בדיוק המקום שבו התמיכה ב-JSON ב-SQL Server הופכת להיות מאוד שימושית. אפשר להמיר מידע רלציוני די בקלות ל-JSON ע"י שימוש בפקודה FOR JSON בסוף פקודת SELECT. ובאותה מידה של קלות, פחות או יותר, אפשר להמיר אוביקט JSON לפורמט רלציוני ע"H שימוש בפונקציה OPENJSON.

 

4.  אינטגרציה עם אפליקציות ו-Web Services

בדומה לאינטגרציה עם פלטפורמות NoSQL, הרבה מערכות כוללות אפליקציות אינטרנטיות ו-Web Services, פנימיים או חיצוניים, כאשר פרוטוקול התקשורת מבוסס על XML. במקרים כאלה, לעיתים יש צורך להמיר מידע מתוך קבצי XML לפורמט רלציוני ולהכניס אותו לתוך טבלאות בבסיס נתונים רלציוני, או בכיוון ההפוך. בדיוק כמו עם JSON, אפשר לעשות את זה בקלות באמצעות FOR XML ו-OPENXML.

 

5.  שימושים מיוחדים ב-T-SQL

זאת ממש לא הסיבה העיקרית לשימוש ב-XML או ב-JSON בבסיס נתונים רלציוני, אבל זה יכול להיות שימושי במקרים מסוימים. יש כל מיני דרכים יצירתיות לנצל את הפונקציונליות של XML/JSON ב-SQL Server כדי להשיג פונקציונליות רלציונית. דוגמא אחת לכך היא השימוש ב-FOR XML כדי לבצע סוג של Unpivot על טבלה. השתמשתי בטכניקה הזאת, למשל, כשכתבתי את הסקריפט על Redundant Indexes, שמוצא אינדקסים מיותרים, שכנראה אפשר למחוק.

 

6.  להשתמש ביכולות ובכלים הקיימים

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

לפעמים יותר הגיוני לנצל את הידע שכבר קיים בארגון, גם אם זה לא הפתרון המושלם, ואפילו אם זה אומר שנשלם מחיר כלשהו במונחים של ביצועי המערכת. כי המחיר שנשלם על גיוס, הכשרה, עקומת לימוד ועלויות נוספות עלול להיות גבוה יותר. אז במקרים מסוימים אולי כדאי לשקול להשתמש ב-SQL Server כדי לאחסן ולנהל אוביקטים של JSON, גם אם הפתרון "הנכון" הוא להשתמש ב-MongoDB.

המקרים האלה לא פשוטים. צריך להסתכל מספיק רחוק את העתיד ולנסות להעריך את קצב הגידול של הנתונים ואת המחיר של שימוש בבסיס נתונים רלציוני לעומת המחיר של שימוש בפלטפורמה אחרת. בחלק מהמקרים, החסרונות של שימוש בבסיס נתונים רלציוני עולים על היתרונות. אבל במקרים אחרים, יתכן שהבחירה הנכונה היא להשתמש ב-SQL Server, ובמקרים אלה התמיכה ב-JSON וב-XML תהיה מאוד שימושית.

התמיכה ב-XML היא אפילו יותר גדולה מהתמיכה ב-JSON, מכיוון שב-SQL Server יש Data Type מובנה ל-XML, שעליו אפשר לבצע פעולות, להשתמש ב-Schema Collections, באינדקסים מיוחדים, ועוד.

 

Picture 2

אז כפי שראינו, יש כמה תרחישים לשימוש ב-XML או ב-JSON בבסיס נתונים רלציוני. כמובן שיש הרבה מקרים שבהם אנשים משתמשים ב-XML/JSON בבסיס נתונים רלציוני מהסיבות הלא נכונות. כחלק מהארכיטקטורה של המערכת ומעיצוב בסיסי הנתונים, צריך להבין את מאפייני הנתונים השונים (מבנה, נפח, קצב, חשיבות, וכו'), להעריך את העלויות של החלופות השונות, ולבחור את הפתרון המתאים לכל מקרה ומקרה. אם בחרתם להשתמש ב-XML או ב-JSON ב-SQL Server, אז למדו איך לנצל את היכולות שיש ל-SQL Server להציע.

אם אתם רוצים ללמוד עוד על היכולות האלה, אז הצטרפו אלי ל-Webinar שאני מעביר במסגרת 24 Hours of PASS ב-07/09 בשעה 19:00 (שעון ישראל). כותרת ה-Webinar היא From XML to JSON, ובמהלכו אדבר ביתר פירוט על XML, על JSON ועל התמיכה ש-SQL Server מציע לשני סוגי הנתונים האלה. ה-Webinar ילווה בהרבה דוגמאות קוד. ואם אתם מגיעים לסיאטל באוקטובר ל-PASS Summit 2016, אז בואו לפגוש אותי שם. אני אעביר שם גירסא קצת יותר ארוכה ומפורטת של ההרצאה הזו.

Picture 3

 

כתיבת תגובה

האימייל לא יוצג באתר. שדות החובה מסומנים *