1 / 31

การจัดระเบียบแฟ้มแบบสุ่ม Random file organization

การจัดระเบียบแฟ้มแบบสุ่ม Random file organization. โดยนายบุญค้ำ จุลเจือ วิทยาลัยชุมชนตราด. นิยามและการประยุกต์. วิธีการจัดระเบียบแฟ้มเป็นแบบเข้าถึงระเบียนโดยตรง เราเรียกว่า การจัดระเบียบแฟ้มแบบสุ่ม Random file organization.

Download Presentation

การจัดระเบียบแฟ้มแบบสุ่ม Random file organization

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. การจัดระเบียบแฟ้มแบบสุ่มRandom file organization โดยนายบุญค้ำ จุลเจือ วิทยาลัยชุมชนตราด

  2. นิยามและการประยุกต์ • วิธีการจัดระเบียบแฟ้มเป็นแบบเข้าถึงระเบียนโดยตรง เราเรียกว่า การจัดระเบียบแฟ้มแบบสุ่ม Random file organization • การจัดระเบียบแฟ้มแบบสุ่ม ไม่จำเป็นต้องเรียงตามไพรมารีคีย์ นอกจากนั้นแฟ้มยังมีที่ ว่างเปล่าอยู่ปะปนเป็นระยะ • เราสามารถหาตำแหน่งที่เก็บจากค่าไพรมารีคีย์

  3. เนื่องจากการเข้าถึงแฟ้มข้อมูลแบบสุ่ม สามารถเข้าถึงข้อมูลโดยตรงได้รวดเร็ว ดังนั้นแฟ้มสุ่มจึงเหมาะสำหรับงาน Interactive processing (การประมวลผลแบบโต้ตอบ) ตัวอย่างเช่นระบบธนาคารออนไลน์ • ข้อสังเกต • 1) การเข้าถึงระเบียนในแฟ้มสุ่ม สามาตรงไปยังระเบียนที่ต้องการ • 2) ระเบียนแฟ้มแบบสุ่มสามารถถูกเรียกใช้ ปรับปรุงค่าแล้วบันทึกกลับเข้าไปที่เดิม • ข้อได้เปรียบแฟ้มสุ่มคือ สามารถเข้าถึงระเบียนใดๆ โดยตรง และสามารถเรียกใช้ ปรับปรุงระเบียนที่ต้องการโดยไม่กระทบต่อระเบียนอื่นๆ ในแฟ้มข้อมูล

  4. เทคนิคในการแปลงส่งฟังก์ชัน R เมื่อ R(key value)address มีด้วยกัน 3 วิธีคือ • 1. การแปลงส่งโดยตรง (Direct Mapping) • 2. การค้นหาในพจนานุกรม (Dictionary lookup) • 3. การคำนวณตำแหน่ง (Address Calculation)

  5. 1. การแปลงส่งโดยตรง (Direct Mapping) • โดยทั่วไปเรียกว่า Relative Addressing • Relative addressing ของระเบียนในแฟ้มคือ ลำดับที่ของระเบียน • หนึ่งระเบียนต่อหนึ่งตำแหน่งไพรมารีคีย์จะต้องเป็นตัวเลขเรียงจากน้อยไปมาก และ ระเบียนต้องมีขนาดคงที่ • ตัวอย่างเช่น ระเบียนแฟ้มสุ่มชุดหนึ่ง ไพรมารีคีย์อยู่ในช่วง 0-9999 ดังนั้น จะต้องสำรองพื้นที่ว่าง 10,000 ที่ต่อ 10,000 ระเบียน โดยไพรมารีคีย์ต้ออยู่ในช่วง 0-9999 • ค่าของไพรมารีคีย์ต้องเป็นตัวเลขที่ต่อเนื่องกันตลอด หรือ อาจขาดช่วงได้ไม่เกิน 30 % • ค่าคีย์บางอย่างไม่เหมาะสมกับวิธีนี้เช่น เลขที่บัตรผู้เสียภาษี เนื่องจากใช้ตัวเลข 10 ตำแหน่งค่าที่ได้จะอยู่ในช่วง 1-9999999999 หรือประมาณหนึ่งหมื่นล้าน ตัวอย่างเช่นบริษัทหนึ่งมีพนักงาน 2,000 คน ต้องเผื่อที่ถึงหนึ่งหมื่นล้านที่

  6. ข้อดีและข้อเสียสำหรับวิธี Relative addressing • ข้อดี • 1. การแปลงส่งค่า R ทำได้ง่ายเพราะค่าคีย์ของระเบียนก็คือค่าตำแหน่งสัมพัทธ์ของระเบียนในแฟ้มข้อมูล • 2. สมารถประมวลผลได้ดีทั้งแบบลำดับและแบบสุ่ม • ข้อเสีย • 1. ไม่สามารถใช้กับเขตหลักที่เป็นตัวอักษร • 2. ไม่เหมาะสำหรับแฟ้มที่ช่วงของคีย์กว้างและมีระเบียนจริงๆเพียงเล็กน้อย

  7. 2. การค้นหาในพจนานุกรม (Dictionary lookup) • บ้างเรียกแฟ้มสุ่มที่ใช้วิธีนี้ว่า Indexed file หรือ Index Nonsequential File • แนวคิดคือการสร้างตารางแฟ้มพจนานุกรมโดยพจนานุกรมนั้นเก็บในรูปของคีย์/ตำแหน่ง และทุกๆระเบียนในแฟ้มจะแปลงส่งได้ตำแหน่งที่ไม่ซ้ำกัน

  8. โครงสร้างของแฟ้มพจนานุกรม (Dictionary structure) • ประกอบด้วย 2 entries คือ key กับ address โครงสร้างของแฟ้มอาจแบ่งเป็นตาราง (linear/table) หรือ (nonlinear) ก็ได้ • 1. แบบตาราง และข้อมูลเรียงตามลำดับของ key • - ค้นหาข้อมูลได้รวดเร็ว เพราะสามารถใช้วิธีค้นหาข้อมูลแบบไบนารี (binary search) ได้ • - การแทรกหรือลบข้อมูลในพจนานุกรมที่เรียงแล้วนั้น เสียเวลามาก • ข้อมูลที่ไม่ได้เก็บเรียงลำดับของ key • -ต้องใช้วิธีหาแบบลำดับ หาได้ช้า • -อาจใช้แฮชชิงฟังก์หาตำแหน่ง • การแทรกหรือการลบข้อมูลไม่ยุ่งยากมากนัก

  9. 2. Nonlinear แฟ้มพจนานุกรมอาจมีโครงสร้างแบบอื่นก็ได้ เช่น • - Binary search tree • - M-way search tree • - B – tree • - โครงสร้างพวกนี้ค้นหาข้อมูลได้รวดเร็ว แต่ซับซ้อนกว่าแบบ Linear • - การแทรกหรือลบข้อมูลทำได้ง่าย

  10. โครงสร้างของแฟ้มสุ่ม • ควรเก็บตำแหน่งว่างจากบนก่อน หรือเก็บในกลุ่มระเบียนที่มีคีย์คล้ายๆ กันขณะเดียวกันต้องเพิ่มข้อมูล Key value : address เข้าไปในแฟ้มพจนานุกรมด้วย

  11. ข้อดีของการค้นหาในพจนานุกรมข้อดีของการค้นหาในพจนานุกรม • 1. ตำแหน่งของระเบียนสามารถหาได้โดยไม่ต้องผ่านการคำนวณ • 2. ไพรมารีคีย์ที่ใช้สามารถเป็นไปตามความต้องการของผู้ใช้ • 3. เมื่อทำ reorganization (ปรับปรุงระเบียน)เลขที่ตำแหน่งที่คู่กับคีย์ในแฟ้มพจนานุกรมเปลี่ยนค่าไปแต่คีย์ไม่ต้องเปลี่ยนตาม • การใช้เทคนิคการค้นหาในพจนานุกรม ในการเปลี่ยนค่าคีย์ให้เป็นตำแหน่งที่นั้นจะมีประสิทธิภาพกับแฟ้มข้อมูลขนาดเล็ก

  12. การคำนวณตำแหน่ง (addressing Calculation) • วิธีการคำนวณตำแหน่งโปรแกรมเมอร์เป็นผู้จัดการสร้างหรือกำหนดฟังก์ชันเพื่อเปลี่ยน R(key value) address

  13. ถ้า R(k1)=R(k2) แต่ k1#k2 เมื่อ k1,k2 เป็นไพรมารีคีย์ของระเบียน 2 ระเบียน เราเรียกสภาพเช่นนี้ว่า Collision (ชนกัน) และ เรียก k1,k2 ว่า Synonyms และเรียกระเบียนที่ไม่สามารถเก็บอยู่ในตำแหน่งที่คำนวณได้ (home address)ว่า ระเบียนส่วนล้น (overflow record) • วิธีการคำนวณตำแหน่งนี้มีชื่อเรียกต่างๆกัน ในเอกสารนี้ขอเรียกว่า แฮชชิงฟังก์ชัน (hashing function)

  14. ปัจจัยที่มีอิทธิพลต่อประสิทธิภาพของแฟ้มสุ่ม ที่ใช่วิธีการคำนวณตำแหน่ง • 1. ขนาดของ Bucket • 2. loading factor • 3. ชุดของค่าไพรมารีคีย์ • 4. แฮชชิงฟังก์ชันที่ไช้ • 5. วิธีการจัดการเกี่ยวกับระเบียนส่วนล้น

  15. Bucket • ที่เก็บข้อมูลแฟ้มสุ่มสำหรับการคำนวณตำแหน่งนั้น ถูกแบ่งออกเป็นส่วนๆ เรียกว่า bucket แต่ละ bucket สามารถเก็บระเบียนได้ 1 หรือมากกว่า 1 ระเบียน และความยาวระเบียนอาจแปรผันได้ผู้ออกแบบเป็นผู้กำหนดความจุของ bucket (bucket capacity) ทุกๆระเบียนจะถูกจับคู่กับ home bucket อันใดอันหนึ่งโดยกรรมวิธีแฮชชิงฟังก์ชัน • ถ้าผู้ออกแบบแฟ้มเลือก bucket ขนาดเล็กแล้วจะเกิด overflow ค่อนข้างสูง ซึ่งต้องเสียเวลาอ่าน bucket เพิ่มขึ้น อาจต้องเพิ่มเวลาการแสวงหา Seek time • หาก bucket ความจุมากจะช่วยลด overflow แต่ bucket ใหญ่จะต้องอ่านเข้าไปในหน่วยความจำ

  16. แสดง Home bucket ต่างๆในแฟ้มสุ่ม • เลขที่ตำแหน่งของระเบียนที่ผ่านการคำนวณเรียกว่า home address ถ้าที่เก็บข้อมูลเป็น bucket Bucket ที่คำนวณได้คือ home bucket

  17. เลขที่ตำแหน่งของระเบียนที่ผ่านการคำนวณเรียกว่า home address • ถ้าที่เก็บข้อมูลเป็น bucket Bucket ที่คำนวณได้คือ home bucket • ส่วน bucket ที่แยกไว้ต่างหากสำหรับเก็บระเบียนส่วนล้นเรียกว่า Overflow bucket • Loading factor ของแฟ้มข้อมูล คือ อัตราส่วนของจำนวนระเบียนที่มีอยู่ในแฟ้มขณะที่เก็บต่อจำนวนเนื้อที่ที่มีให้ใช้ (available)ในแฟ้ม นิยามอีกแบบหนึ่งloading factor = #records in file max.#of records file can contain • Loading factor เป็นการเผื่อที่ให้แฟ้มข้อมูล ถ้าเผื่อมากโอกาสจะเกิดส่วนล้นจะลดลง

  18. แสดงค่า Loading factor และโอกาสเกิด Overflow • โดยปกติ loading factor แฟ้มสุ่มควรอยู่ประมาณ .70-.80 ถ้ามากกว่านั้นจะต้องทำ reorganization ตัวอย่าง ถ้าแฟ้มสุ่มมีระเบียน 4000 ต้องเผื่อพื้นที่อย่างน้อย 5000 ซึ่งจะเกิด loading factor =.80

  19. แฮชชิงฟังก์ชัน • ที่ใช้เปลี่ยนคีย์ให้เป็นตัวเลขที่ตำแหน่งนั้นมีมากมาย แต่แฮชชิงฟังก์ชันที่ดีจะต้องให้จำนวน synonym น้อยที่สุด และเป็นฟังก์ชันที่ไม่ซับซ้อนนัก • ถ้าระเบียนต่างๆที่ผ่านฟังก์ชันแล้วได้ตำแหน่งกระจายตัวสม่ำเสมอ ถือว่าชุดของค่า ไพรมารีคีย์เข้ากับฟังก์ชันได้ดี แต่ถ้ากระจุกอยู่ในตำแหน่งใดตำแหน่งหนึ่งมากเกินไปก็ต้องเปลี่ยนใช้แฮชชิงฟังก์ชันอื่น

  20. แฮชชิงฟังก์ชันแบบต่างๆแฮชชิงฟังก์ชันแบบต่างๆ • 1. วิธีการใช้เศษเหลือจากการหาร (The Division – Remainder Method) เป็นวิธีการแปลงค่าคีย์ของระเบียนให้เป็นเลขที่ตำแหน่งซึ่งอยู่ใน home bucket ของแฟ้มข้อมูลโดยใช้เฉพาะ (prime number) ที่มีค่าใกล้เคียงแต่ไม่เกินจำนวน bucket ในแฟ้มข้อมูลมาหารคีย์ของระเบียน เศษเหลือที่ได้คือตำแหน่งของระเบียน โดยเขียนฟังก์ชันได้ดังนี้ • F(KV) = Mod(KV/N)Rem = ฟังก์ชันที่ใช้หาเศษเหลือKV = ค่าคีย์ของระเบียนN = largest prime number ที่มีค่าไม่เกินจำนวน home bucket ของแฟ้มข้อมูล

  21. ตัวอย่างการคำนวณ • สมมุติแฟ้มมีระเบียน 10,000 ระเบียน คีย์อยู่ในช่วง 0000000-9999999 เตรียมเนื้อที่ 12000 เพื่อลดโอกาสการเกิด overflow ตำแหน่งระเบียนมีเลขในช่วง 00000-11999 ตัวหารที่เป็น prime number จะต้องไม่เกิด 11999 นั่นคือ 11987 • การคำนวณหาตำแหน่ง home bucket ของระเบียนที่มีคีย์=0235671 • วิธีคำนวณ เอาค่าคีย์ 0235671 หารด้วย 11987 ได้ 19 เศษ 7918 7918 นี้คือตำแหน่งของ home bucket ของระเบียน 0235671

  22. 2. การวิเคราะห์ตัวเลข (Digit Analysis Method) • ถ้าความถี่ของเลขตำแหน่งใดมีการกระจายตัวของตัวเลข 0-9 อย่าสม่ำเสมอ (Uniform distribution) จะใช้ตำแหน่งเหล่านี้มาพิจารณา ตัวอย่างในตารางตำแหน่ง 2,3,5 มีการกระจายตัวอย่างสม่ำเสมอ

  23. 3. Mid-square Method • เป็นการเอาค่าคีย์ของระเบียนมายกกำลัง 2 แล้วเลือกตัวเลขในช่องกลางมาเป็น Relative address โดยเลือกให้กับจำนวนหลักของ address ที่ต้องการ

  24. 4. Folding • โดยการแบ่งคีย์ออกเป็นส่วนๆ ให้แต่ละส่วนเท่ากับจำนวน หลักของaddress ที่ต้องการ เอาแต่ละส่วนพับเข้าหากัน แล้วบวกกัน ผลบอกคือตำแหน่งที่ต้องการ • สมมุติระเบียนที่ต้องการหาคีย์ = 123456789 ต้องการ 4 digit-address

  25. แสดงการใช้ folding หาตำแหน่ง

  26. 5. Different Radix • โดยการเปลีย่นค่าคีย์ของระเบียน ซึ่งเป็นเลขจากฐานสิบไปเป็นฐานอื่น เช่นคีย์ 123456 อาจเปลี่ยนเป็นฐาน 11 เพื่อหาตำแหน่ง 4 หลัก ได้ดังนี้ • (1*115)+(2*114)+(3*113)+(4*112)+(5*111)+6=194871 เลือก 4971 เป็นตำแหน่งที่อยู่ระเบียน

  27. การจัดการปัญหาระเบียนส่วนล้นการจัดการปัญหาระเบียนส่วนล้น • 1. Open addressing คือเก็บระเบียนปกติและระเบียนส่วนล้นปะปนกันไป • 2. Separate overflow แบ่งแฟ้มออกเป็น 2 ส่วน คือเก็บ home bucket และ overflow ออกจากกัน

  28. เทคนิคเพื่อจัดการปัญหา Collision (การชนกัน) • 1. Linear Probing โดยเก็บระเบียนส่วนล้นไว้ตำแหน่งถัดจาก home bucket ถ้าระเบียนถัดไปไม่ว่างก็จะถ้าถัดไปจนถึงระเบียนสุดท้าย หากไม่พบ ก็จะเริ่มหาที่จุดเริ่มต้นไปเรื่อยๆ จบมาบรรจบ home bucket อีกครั้งก็แสดงว่าแฟ้มเต็ม • 2. Double Hashing ใช้แฮชชิงฟังก์ชันคำนวณหาค่าจะได้ค่า C แล้วใช้ค่า C บวกกับ home address เดิมจะได้เลขที่ตำแหน่ง ถ้าเกิด Collision อยู่ก็จะบวก C ด้วยตำแหน่งล่าสุดจะได้ตำแหน่งใหม่ ทำแบบนี้ไปเรื่อยๆจนได้ตำแหน่งที่ต้องการ

  29. 3. Synonym Chaining เป็นการเพิ่ม link field ในทุกๆ home bucket และ overflow bucket ซึ่ง link field จะเป็นตัวเชื่อม synonym เข้าด้วยกัน

  30. ลักษณะงานที่เหมาะสมกับแฟ้มสุ่มลักษณะงานที่เหมาะสมกับแฟ้มสุ่ม • 1. งานแบบออนไลน์ • 2. ต้องการปรับปรุงแฟ้มข้อมูลหลายๆ ชุดพร้อมๆกัน • 3. มีอัตราการเปลี่ยนแปลงต่ำ รายการปรับปรุงในแต่ละรอบมีน้อย • 4. ต้องการคำตอบรวดเร็ว • ตัวอย่างระบบงานที่ใช้แฟ้มแบบสุ่ม • 1. ระบบธนาคารออนไลน์ • 2.ระบบการจองที่นั่งของสายการบิน

  31. คำถาม • 1. จงเปรียบเทียบข้อแตกต่างระหว่างแฟ้มสุ่มกับแฟ้มลำดับ • 2. เทคนิคการหาตำแหน่งของแฟ้มสุ่มมีกี่แบบ อะไรบ้าง • 3. จงอธิบายความหมายและวิธีของแฮชชิงฟังก์ชัน • 4. จงเปรียบเทียบการจัดการระเบียนส่วนล้น linear probing , double hashing , synonym chaining • 5. จากแฮชชิงฟังก์ชันแบบ folding หากระเบียนที่ต้องการหามีคีย์ 139971688 ต้องการ 4 digit-address จงหาตำแหน่งของระเบียน

More Related