לשבור את המידע לרסיסים

דעה, מאמרים מאת דניאל ב 22-11-2009

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

Sharding (בתרגום מילולי שבירה לרסיסים) היא שיטה של חלוקת אופקית במאגר מידע או מנוע חיפוש.

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

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

במה שונה גישת החלוקה מגישות קימות ?

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

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

שלח תגובה