מבוא לתור הגדול

1. סקירה כללית

במדריך זה אנו נסתכל במהירות על התור הגדול, יישום Java של תור מתמשך.

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

2. שימוש

נצטרך להוסיף את bigqueue תלות בפרויקט שלנו:

 com.leansoft bigqueue 0.7.0 

עלינו להוסיף את המאגר שלו:

 github.release.repo //raw.github.com/bulldog2011/bulldog-repo/master/repo/releases/ 

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

2.1. אִתחוּל

אנו יכולים לאתחל את התור על ידי התקשרות פשוטה עם הבנאי שלו:

@ לפני הגדרת הריק הציבורי () {String queueDir = System.getProperty ("user.home"); מחרוזת queueName = "baeldung-queue"; bigQueue = BigQueueImpl חדש (queueDir, queueName); }

הטיעון הראשון הוא מדריך הבית לתור שלנו.

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

עלינו לזכור לסגור את התור כשנסיים למנוע דליפות זיכרון:

bigQueue.close ();

2.2. מכניסה

אנו יכולים להוסיף אלמנטים לזנב על ידי פשוט להתקשר ל enqueue שיטה:

@ מבחן ציבורי בטל כאשר AddRecords_ThenTheSizeIsCorrect () {for (int i = 1; i <= 100; i ++) {bigQueue.enqueue (String.valueOf (i) .getBytes ()); } assertEquals (100, bigQueue.size ()); }

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

2.3. קריאה

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

@Test ציבורי בטל כאשר AddRecords_ThenTheyCanBeRetrieved () {bigQueue.enqueue (String.valueOf ("new_record"). GetBytes ()); שיא מחרוזת = מחרוזת חדשה (bigQueue.dequeue ()); assertEquals ("new_record", שיא); }

עלינו להקפיד לנתק את הנתונים שלנו כראוי בעת קריאה.

קריאה מתור ריק זורקת א NullPointerException.

עלינו לוודא שישנם ערכים בתור שלנו באמצעות ה- זה ריק שיטה:

אם (! bigQueue.isEmpty ()) {// read}

כדי לרוקן את התור שלנו מבלי שנצטרך לעבור על כל רשומה, נוכל להשתמש ב- להסיר את כל שיטה:

bigQueue.removeAll ();

2.4. מציץ

כאשר אנו מציצים, אנו פשוט קוראים תקליט מבלי לצרוך אותו:

@ מבחן ציבורי בטל כאשר PeekRecords_ThenSizeDoesntChange () {for (int i = 1; i <= 100; i ++) {bigQueue.enqueue (String.valueOf (i) .getBytes ()); } מחרוזת firstRecord = מחרוזת חדשה (bigQueue.peek ()); assertEquals ("1", FirstRecord); assertEquals (100, bigQueue.size ()); }

2.5. מחיקת רשומות נצרכות

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

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

למרבה המזל, אנו יכולים למחוק את הרשומות הנצרכות באמצעות ה- gc שיטה:

bigQueue.gc ();

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

3. אדריכלות ותכונות

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

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

3.1. טיפול בכמויות גדולות של נתונים

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

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

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

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

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

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

3.3. יתרונות

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

בסביבה מקבילה, Big Queue יכול לייצר ולצרוך סביב 166MBps של נתונים במכונת סחורות.

אם גודל ההודעה הממוצע שלנו הוא 1KB, הוא יכול לעבד 166K הודעות לשנייה.

זה יכול להגיע עד 333,000 הודעות בשנייה בסביבה עם הברגה אחת - די מרשים!

3.4. חסרונות

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

אנו אחראים גם לסידור והעלאת ערוץ המסרים שלנו.

4. מסקנה

במדריך מהיר זה למדנו על התור הגדול וכיצד אנו יכולים להשתמש בו כתור מדרגי ומתמשך.

כמו תמיד, הקוד זמין ב- Github.