Table of Contents
מיון קבצים בקנה מידה גדול הוא משימה תובענית עדיין חישובית בניתוח נתונים, אבטחת סייבר וניהול מערכת. כמו ארגונים ליצור terabytes של נתונים אירוע מדי יום, יעילות האלגוריתמים הממיין המשמשים לעיבוד נתונים אלה משפיע ישירות על זמני תגובה, צריכת משאבים, ועלויות הכוללות של תשתיות.בחירת נכון דורש הבנה מוצקה של מורכבות אלגוריתמית - המדד התיאורטי ומעשי של האופן שבו בקנה מידה של קיבולת פעולה עם גודל קבוע של פעולות ובדיקה של תכונות פשוטות של אלגוריתם.
מהו מורכבות אלגוריה?
(המורכבות האלגוריתמית, אשר לעיתים קרובות באה לידי ביטוי באמצעות אלגוריתם:0 Big O NotationFLT:1, מתאר כיצד השימוש במשרה או זיכרון של אלגוריתם גדל ככל גודל העלייה בקלט שלו.
כיתות מורכבות נפוצות במיין
- (ב) [ה][דרוש מקור]] [ב]] [ב]] [ב[[המאה ה-20]], [ב[[המאה ה-20]]], [[המאה ה-20]], [[1924]]]]]], [[1924]]]]]], [[1924]]]]]]]]]]]]]], [[1924]]]]]]]]]], [[1924]]]]]]]]]]]]]]]]]]]]]]]]]] ו[[1924]], [[1924]], [[1924]]]]]]]]]]]]]], [[1924]]]]]]]]]]]]]]]]]]]], [[1924]]]]]]]]]]]]]]]], [[1924]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]
- (ב) [ה]ב"ה] [הזמן] [הלנארי]: [ה] 1 אלגורית' [ה] כמו מארג', מון וטים, הם עולים בקנה מידה טוב למיליונים או למיליארדים של פריטים והם סטנדרטיים למיין מטרות כלליות.
- (FLT:0)O(n) (זמן לינארי): אפשרי רק למקרים מיוחדים, כגון ספירה מון, רדיאקס מון, או באקט, הדורשות הפצת נתונים חיובית (למשל, מפתחות קטנים בוטה).
הבנת שיעורים אלה מסייעת לחזות ביצועים: אלגוריתם O(n log n) עשוי לקחת שניות על תחילת נתונים שבו O(nph:0203FLT:1) אלגוריתם ייקח שעות. עבור קבצים יומני, שבו לעתים קרובות מספר רשומות במיליונים, ההבדל הוא קו בין תאימות ו infeasibility.
« « « « ⁇ ⁇ ⁇ ⁇
כל אלגוריתם מיון נושא את הרכישות במהירות, שימוש בזיכרון, יציבות ומקבילות. להלן הוא התמוטטות האלגוריתמים הרלוונטיים ביותר עבור דילול בקנה מידה גדול.
בועות שחורות - O(nigmal:0;2FLT:1)
בועות מסובכות שוב ושוב דרך הרשימה, משווים אלמנטים סמוכים, ומחליפים אותם אם הם בסדר הלא נכון.למרות הפשטות שלו, זה FLT:0 לחלוטין לא מתאים ל- 1 עבור קבצים יומני בקנה מידה גדול בשל המורכבות האקומטית שלו.
מדרש: (ב) ויקרא י"ד):
הכנסון בונה את היסודות הסופיים המנוונים בזמן.למרות שהמזוודה הגרועה ביותר שלו היא O(nentiFLT:0.203FLT:1), הוא מבצע היטב על נתונים קטנים או כמעט ממיין נתונים (במקרה הטוב O(n)) לעיבוד יומני, הכנסת משמשת לעתים כחסימת בנייה בתוך אלגוריתמים היברידיים (למשל, טים) עבור מחיצות קטנות.
מארג' מון - O(n log n)
(ה) מארג' מון הוא אלגוריתם מתחלק-וקונפור שמפוצל את המערך ללווינים, חוזר על עצמו, וממזג את הלווינים המנוונים.It isFLT:0stable FLT:1 (מאשר את סדר היחסי של מפתחות שווים) ויש לו קבוע O(n log) ללא קשר להתפלגות ראשונית (ב) זה דורש מקבצי זיכרון נוספים (או-FD) כאשר הוא דורש שינוי).
(ב) ממוצע (ב) 0 (ב) 0 (2Fillo: 1)
(הופנה מהדף בחירת פיוט, חלוקת מערך לאלמנטים פחות גדול מהמזח, ותיקון מחדש של החלוקה; הוא מפיץ:0in-placeFLT:1 ביישומים רבים, הדורש רק O(log n) ערימה של שטח ערימה (בממוצע) הוא אחד מסוגים המבוססים על השוואה מהירה, עם זאת, גרוע יותר, כמו: 3Flowicials (O) לקבצים קלים (D2n-F) עם ביצועים קלים ל-Flowed) של תיקון מהיר (D2n).
המונחים: O(n log n)
(ה) הוא בונה סכום מקסימלי מהמידע ומוציא שוב ושוב את האלמנט המקסימלי.הוא פועל ב- O(n di n) זמן והוא FLT:0-placeFLT:1, תוך שימוש רק ב- O(1) שטח נוסף, בניגוד ל- Quickמיין המהיר, הביצועים שלו אינם נדרשים באופן יציב בפועל.
טיםסורט - O(n log n) הגרוע ביותר, O(n)
טיםסורט הוא אלגוריתם ממיין היברידי הנגזר מ-Mge ו- Enterionמיין.It is now the ברירת מחדל מיון אלגוריתם ב- Python, Java, ו- Android Runtime. Timsort מזהה ריצות שכבר ניתנות לזמין בנתונים ומשתמש בהם כדי להפחית את מספר ההשוואה והמיזוגים (למשל, רשומות טים) יכולות להגיע לכל סוגי ההשוואה (Dyfon-Fern) קרוב ל-Fert) ל-to-to-tomet.
Radix sort - O(nk) (לינארית עבור מפתחות באורך קבוע)
רדינקס הוא אלגוריתם מבוסס לא-שותף אשר סוגים שונים של אינטגרטורים (או מחרוזת) על ידי עיבוד ספרות מן לפחות משמעותי ביותר.עם FLT:0kekulph1 להיות מספר הספרות, המורכבות שלו היא O(nk), אשר יכול להיות ביעילות עם תכונות קבועות (FLT:2kFLT 3LT 3) הוא קבוע (למשל, 32 אלגוריתמים) אבל לא ניתן להפיץ קבצים קבועים).
ההשפעה של מורכבות על קבצים גדולים-מכילים
כאשר מיון קבצים יומני המשתרע על פני עשרות ג'יגה-בייטס או אפילו פט-ביאטים, בחירת האלגוריתם תכתיב אם עבודה תושלם בתוך דקות, שעות או ימים, כדי להמחיש, לשקול קובץ המכיל 10 מיליון רשומות (כל 1 KB, כולל 10 GB) בועות מבול (Meting Bubble) ידרוש בערך 10vFLT:0143 LT:1LT) - ב-בהתאמה מותאמות להתאמה אופטימלית עם 10 מיליון מינוס 10 מיליון שניות.
מעבר לריצה, (FLT:0) מגבלות ההרחבה:1 הן קריטיות.מיין קבצים ענקיים כאלה לא ניתן לעשות לחלוטין ב- RAM.FLT:2, כולל מינוף של ההרחבה של ה-IIFLT 3: שבו נתונים מונים ב- דיסקים על דיסק וממוזגים עם זיכרון מוגבל - נדרש. Algorithms לטיפוס חיצוני בדרך כלל שימוש רב-מסלולי מבוסס על בסיס מספר 4 / 5 פעמים, אך הוא משפיע על המורכבות של IFD.
(ב) ב[[1924]], [[1924]]]], [[1924]]]]]], [[1924]]]]]], [[1924]]]]]], [[1924]]]]]]]]]]]]]]]], [[1924]]]]]]]]]]]]]]]], [[1924]]]]]]]]]]]]]]]], [[1924]]]]]]]]]]]]]]]]]]]], [[1924]]]]]]]]]]]]]]]]]]]]]]]]]], [[1924]]]]]]]]]]]]]]]]]]
שיקולים מעשיים לבחירת אלגורית'ם
דמויות נתונים
- (ב) ⁇ :0) ,(המידע המאורגן: ⁇ 1) טיםסורוט, הכנסת סוג, או התאמת מרג' מבצעים ביצועים טובים במיוחד.
- (ב) עיין: ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇
- (ב) יש להשתמש בהוראת הטבלה:0.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.
- (ב) ⁇ :0 (המפתחות של ⁇ ) , ⁇ ⁇ :FLT:1 רדיקס יכול להשיג מהירות ליניארית, לעתים קרובות להכות סוגים המבוססים על השוואה.
זיכרון ותשומת לב
- (FLT:0) ,Limited RAM: FLT:1 , heap או in-place Quickמיין (עם טיול זהיר) מצמצם את הזיכרון העזרי.עבור מיון חיצוני, ניתן לכוון גרסאות מינג'י ולהשתמש ב-buffer קטן.
- (ב) זיכרון גבוה זמין: 1.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.
- (FLT:0 (Distributedסביבות:FLT:1 Frameworks כמו Apache Hadoop ו- Apache Spark להשתמש ב-SAPS מבוזר עיבוד יישומים המבוססים על מארג' (shle + מופחת) או וריאציות מהירות (Terasort) הבנת האלגוריתם הבסיס מסייע בכוונון של גדלים, הגדרות חיץ, ושלבי מיזוג.
יישום ומערכת אקולוגית
רוב שפות התכנות המודרניות ופלטפורמות עיבוד נתונים מספקות יישום מותאם אישית מאוד.
- פייתון (ב) ו- 0 (ב) משתמשים ב- Timsort.
- ג'אווה (FLT:2) משתמשת ב-Double-Pivot Quickמיין עבור פרימיטיביים ו- Timsort עבור אובייקטים.
- C++'s (FLT 3: 3) משתמש Introsort (Quick sort with Heap sort fallback).
החלת על אלה בנוי מסוג זה היא בדרך כלל הצעד הראשון הטוב ביותר, אבל מפתחים צריכים להיות מודעים למורכבות הבסיסית ולמכשולים אפשריים.לדוגמה, באמצעות ההרחבה של Java:4 על קובץ גדול של יומן יעבוד טוב, אבל אם ה-Comparator הוא יקר, ההשוואה O(n log n) עדיין עשוי להיות צוואר בקבוק.
המונחים: I / O Bottlenecks
כאשר קובץ יומן אינו מתאים ל- RAM, תהליך מיון חייב לנהל ביעילות את קריאת הדיסק וכותב.סוג המיזוג החיצוני הקלאסי פועל כדלקמן:
- (ב) ,0) , מיצג: ⁇ (ב) , קרא את הקובץ לזיכרון, למיין כל נתח באמצעות אלגוריתם של זיכרון (לעתים קרובות מהיר, טים או סוג של אלגוריתם מותאם אישית של O(n log n) וכתוב כל אחד מהם (נקרא רצף:2runFLT 3) לאחסון זמני.
- (FLT:0) מ"מורטי-וויי" מתמזג: "פתוחים 1:1" נפתחים כולם בו זמנית ומתמזגים אותם לפלט אחד ממונו.
מספר הריצה והמיזוג עובר על מנת לקבוע את סך I/O. בחירת אלגוריתם ממיין שיוצר פחות ריצות (באמצעות יותר זיכרון למניה) מקטין את עלות שלב המיזוג.עבור נתונים עם הרבה כפיות או ריצות קצרות, אלגוריתמים היברידיים כמו טיםסורטים יכולים לייצר ריצות ראשוניות יותר כי הם מנצלים סדר קיים באופן ישיר מקטין את I/O ומזרזים את הסוג הכולל.
מיפוי חיצוני הוא עמוד השדרה של כמעט כל מערכות עיבוד אלקטרוני בקנה מידה גדול, מ-FLT:0Apache ParktFLT:1 יצירת קבצים ליצירת קבצים עבור FLT:2Apache SolrcioFLT 3.
מקרה מחקר: מיון לוגי אבטחה עבור גילוי איומים
מרכז פעולות אבטחה מעבד 200 מיליון רשומות ליום מ-Fire, שרתים, נקודות קצה.כל כניסה כוללת תזמון, IP מקור, סוג אירוע וחומרה. כדי לקשור אירועים על פני מקורות, יומני חייב להיות מוקרן על ידי פעמיםtamp.ההנתונים הגולמיים מגיעים מיקרו-batches, לעתים קרובות בערך כרונולוגי ממקורות בודדים, אך מכוונפים על פני מקורות.
באמצעות תזמון מובנה ב- Python, הצוות הבחין כי שלב היווצרות הריצה הראשוני (סוג חיצוני) הושלם ב-12 דקות, בעוד שלב המיזוג לקח 8 דקות.לאחר החלפת טיםסורנט עם רדיקס ידני על שדה הזמן (בטיפול כ-64 סיביות Integer), זמן הייצור ירד ל-7 דקות ולמזג את השלב ל-5 דקות - שיפור משולב של 40 פעמים בלבד, אך ורק עבור השימוש המורכב, היה יעיל יותר, אך ורק במקרה זה היה יעיל יותר, אך ורק עבור ה-Fretger.
דוגמה זו מדגישה כי בעוד ספריות סטנדרטיות הן נוחות, אופטימיזציה ספציפית לתחום בהתבסס על מורכבות אלגוריתמית יכול להביא שיפורים משמעותיים בעת מיון קבצים גדולים מאוד.
מסקנה
מורכבות אלגורימית אינה מושג מופשט – יש לה השפעה ישירה וניתנת למדידה על ההצלחה של מיון קבצים בקנה מידה גדול.ההבדל בין O(nigFLT:02FLT:1) ואלגוריתם O(n log n) יכול להיות ההבדל בין תהליך שלם בתוך שניות ויומיום.
ככל שהנתונים ממשיכים לגדול, מגמות חומרה מתפתחות - כגון זיכרון לא רצוני (NVM) ו- FPGA מבוסס מיון - משנים את ההסכמים המסחריים.עם זאת, העקרונות הבסיסיים של מורכבות אלגוריתמית נשארים ללא זמן. על ידי הערכה קפדנית של הגודל, המבנה, וקביעת דרישות של קבצי הגלם שלהם, מפתחים יכולים לבחור את האסטרטגיה היעילה ביותר של מיון, להפחית עלויות חישוביות, להבטיח ניתוח זמן, עיבוד נתונים, פעולות אבטחה וזרימה.
לקריאה נוספת, מומלץ להתייעץ עם העבודה הקלאסית על מחיקת אלגוריתמים על ידי FLT:0 (דונלד KnuthcioFLT:1 או על פי ההוראות המעשיות ב-FLT:2 Algorithms by Swick ו-Wenvelph 3).