310 likes | 441 Views
การจัดระเบียบแฟ้มแบบสุ่ม Random file organization. โดยนายบุญค้ำ จุลเจือ วิทยาลัยชุมชนตราด. นิยามและการประยุกต์. วิธีการจัดระเบียบแฟ้มเป็นแบบเข้าถึงระเบียนโดยตรง เราเรียกว่า การจัดระเบียบแฟ้มแบบสุ่ม Random file organization.
E N D
การจัดระเบียบแฟ้มแบบสุ่มRandom file organization โดยนายบุญค้ำ จุลเจือ วิทยาลัยชุมชนตราด
นิยามและการประยุกต์ • วิธีการจัดระเบียบแฟ้มเป็นแบบเข้าถึงระเบียนโดยตรง เราเรียกว่า การจัดระเบียบแฟ้มแบบสุ่ม Random file organization • การจัดระเบียบแฟ้มแบบสุ่ม ไม่จำเป็นต้องเรียงตามไพรมารีคีย์ นอกจากนั้นแฟ้มยังมีที่ ว่างเปล่าอยู่ปะปนเป็นระยะ • เราสามารถหาตำแหน่งที่เก็บจากค่าไพรมารีคีย์
เนื่องจากการเข้าถึงแฟ้มข้อมูลแบบสุ่ม สามารถเข้าถึงข้อมูลโดยตรงได้รวดเร็ว ดังนั้นแฟ้มสุ่มจึงเหมาะสำหรับงาน Interactive processing (การประมวลผลแบบโต้ตอบ) ตัวอย่างเช่นระบบธนาคารออนไลน์ • ข้อสังเกต • 1) การเข้าถึงระเบียนในแฟ้มสุ่ม สามาตรงไปยังระเบียนที่ต้องการ • 2) ระเบียนแฟ้มแบบสุ่มสามารถถูกเรียกใช้ ปรับปรุงค่าแล้วบันทึกกลับเข้าไปที่เดิม • ข้อได้เปรียบแฟ้มสุ่มคือ สามารถเข้าถึงระเบียนใดๆ โดยตรง และสามารถเรียกใช้ ปรับปรุงระเบียนที่ต้องการโดยไม่กระทบต่อระเบียนอื่นๆ ในแฟ้มข้อมูล
เทคนิคในการแปลงส่งฟังก์ชัน R เมื่อ R(key value)address มีด้วยกัน 3 วิธีคือ • 1. การแปลงส่งโดยตรง (Direct Mapping) • 2. การค้นหาในพจนานุกรม (Dictionary lookup) • 3. การคำนวณตำแหน่ง (Address Calculation)
1. การแปลงส่งโดยตรง (Direct Mapping) • โดยทั่วไปเรียกว่า Relative Addressing • Relative addressing ของระเบียนในแฟ้มคือ ลำดับที่ของระเบียน • หนึ่งระเบียนต่อหนึ่งตำแหน่งไพรมารีคีย์จะต้องเป็นตัวเลขเรียงจากน้อยไปมาก และ ระเบียนต้องมีขนาดคงที่ • ตัวอย่างเช่น ระเบียนแฟ้มสุ่มชุดหนึ่ง ไพรมารีคีย์อยู่ในช่วง 0-9999 ดังนั้น จะต้องสำรองพื้นที่ว่าง 10,000 ที่ต่อ 10,000 ระเบียน โดยไพรมารีคีย์ต้ออยู่ในช่วง 0-9999 • ค่าของไพรมารีคีย์ต้องเป็นตัวเลขที่ต่อเนื่องกันตลอด หรือ อาจขาดช่วงได้ไม่เกิน 30 % • ค่าคีย์บางอย่างไม่เหมาะสมกับวิธีนี้เช่น เลขที่บัตรผู้เสียภาษี เนื่องจากใช้ตัวเลข 10 ตำแหน่งค่าที่ได้จะอยู่ในช่วง 1-9999999999 หรือประมาณหนึ่งหมื่นล้าน ตัวอย่างเช่นบริษัทหนึ่งมีพนักงาน 2,000 คน ต้องเผื่อที่ถึงหนึ่งหมื่นล้านที่
ข้อดีและข้อเสียสำหรับวิธี Relative addressing • ข้อดี • 1. การแปลงส่งค่า R ทำได้ง่ายเพราะค่าคีย์ของระเบียนก็คือค่าตำแหน่งสัมพัทธ์ของระเบียนในแฟ้มข้อมูล • 2. สมารถประมวลผลได้ดีทั้งแบบลำดับและแบบสุ่ม • ข้อเสีย • 1. ไม่สามารถใช้กับเขตหลักที่เป็นตัวอักษร • 2. ไม่เหมาะสำหรับแฟ้มที่ช่วงของคีย์กว้างและมีระเบียนจริงๆเพียงเล็กน้อย
2. การค้นหาในพจนานุกรม (Dictionary lookup) • บ้างเรียกแฟ้มสุ่มที่ใช้วิธีนี้ว่า Indexed file หรือ Index Nonsequential File • แนวคิดคือการสร้างตารางแฟ้มพจนานุกรมโดยพจนานุกรมนั้นเก็บในรูปของคีย์/ตำแหน่ง และทุกๆระเบียนในแฟ้มจะแปลงส่งได้ตำแหน่งที่ไม่ซ้ำกัน
โครงสร้างของแฟ้มพจนานุกรม (Dictionary structure) • ประกอบด้วย 2 entries คือ key กับ address โครงสร้างของแฟ้มอาจแบ่งเป็นตาราง (linear/table) หรือ (nonlinear) ก็ได้ • 1. แบบตาราง และข้อมูลเรียงตามลำดับของ key • - ค้นหาข้อมูลได้รวดเร็ว เพราะสามารถใช้วิธีค้นหาข้อมูลแบบไบนารี (binary search) ได้ • - การแทรกหรือลบข้อมูลในพจนานุกรมที่เรียงแล้วนั้น เสียเวลามาก • ข้อมูลที่ไม่ได้เก็บเรียงลำดับของ key • -ต้องใช้วิธีหาแบบลำดับ หาได้ช้า • -อาจใช้แฮชชิงฟังก์หาตำแหน่ง • การแทรกหรือการลบข้อมูลไม่ยุ่งยากมากนัก
2. Nonlinear แฟ้มพจนานุกรมอาจมีโครงสร้างแบบอื่นก็ได้ เช่น • - Binary search tree • - M-way search tree • - B – tree • - โครงสร้างพวกนี้ค้นหาข้อมูลได้รวดเร็ว แต่ซับซ้อนกว่าแบบ Linear • - การแทรกหรือลบข้อมูลทำได้ง่าย
โครงสร้างของแฟ้มสุ่ม • ควรเก็บตำแหน่งว่างจากบนก่อน หรือเก็บในกลุ่มระเบียนที่มีคีย์คล้ายๆ กันขณะเดียวกันต้องเพิ่มข้อมูล Key value : address เข้าไปในแฟ้มพจนานุกรมด้วย
ข้อดีของการค้นหาในพจนานุกรมข้อดีของการค้นหาในพจนานุกรม • 1. ตำแหน่งของระเบียนสามารถหาได้โดยไม่ต้องผ่านการคำนวณ • 2. ไพรมารีคีย์ที่ใช้สามารถเป็นไปตามความต้องการของผู้ใช้ • 3. เมื่อทำ reorganization (ปรับปรุงระเบียน)เลขที่ตำแหน่งที่คู่กับคีย์ในแฟ้มพจนานุกรมเปลี่ยนค่าไปแต่คีย์ไม่ต้องเปลี่ยนตาม • การใช้เทคนิคการค้นหาในพจนานุกรม ในการเปลี่ยนค่าคีย์ให้เป็นตำแหน่งที่นั้นจะมีประสิทธิภาพกับแฟ้มข้อมูลขนาดเล็ก
การคำนวณตำแหน่ง (addressing Calculation) • วิธีการคำนวณตำแหน่งโปรแกรมเมอร์เป็นผู้จัดการสร้างหรือกำหนดฟังก์ชันเพื่อเปลี่ยน R(key value) address
ถ้า R(k1)=R(k2) แต่ k1#k2 เมื่อ k1,k2 เป็นไพรมารีคีย์ของระเบียน 2 ระเบียน เราเรียกสภาพเช่นนี้ว่า Collision (ชนกัน) และ เรียก k1,k2 ว่า Synonyms และเรียกระเบียนที่ไม่สามารถเก็บอยู่ในตำแหน่งที่คำนวณได้ (home address)ว่า ระเบียนส่วนล้น (overflow record) • วิธีการคำนวณตำแหน่งนี้มีชื่อเรียกต่างๆกัน ในเอกสารนี้ขอเรียกว่า แฮชชิงฟังก์ชัน (hashing function)
ปัจจัยที่มีอิทธิพลต่อประสิทธิภาพของแฟ้มสุ่ม ที่ใช่วิธีการคำนวณตำแหน่ง • 1. ขนาดของ Bucket • 2. loading factor • 3. ชุดของค่าไพรมารีคีย์ • 4. แฮชชิงฟังก์ชันที่ไช้ • 5. วิธีการจัดการเกี่ยวกับระเบียนส่วนล้น
Bucket • ที่เก็บข้อมูลแฟ้มสุ่มสำหรับการคำนวณตำแหน่งนั้น ถูกแบ่งออกเป็นส่วนๆ เรียกว่า bucket แต่ละ bucket สามารถเก็บระเบียนได้ 1 หรือมากกว่า 1 ระเบียน และความยาวระเบียนอาจแปรผันได้ผู้ออกแบบเป็นผู้กำหนดความจุของ bucket (bucket capacity) ทุกๆระเบียนจะถูกจับคู่กับ home bucket อันใดอันหนึ่งโดยกรรมวิธีแฮชชิงฟังก์ชัน • ถ้าผู้ออกแบบแฟ้มเลือก bucket ขนาดเล็กแล้วจะเกิด overflow ค่อนข้างสูง ซึ่งต้องเสียเวลาอ่าน bucket เพิ่มขึ้น อาจต้องเพิ่มเวลาการแสวงหา Seek time • หาก bucket ความจุมากจะช่วยลด overflow แต่ bucket ใหญ่จะต้องอ่านเข้าไปในหน่วยความจำ
แสดง Home bucket ต่างๆในแฟ้มสุ่ม • เลขที่ตำแหน่งของระเบียนที่ผ่านการคำนวณเรียกว่า home address ถ้าที่เก็บข้อมูลเป็น bucket Bucket ที่คำนวณได้คือ home bucket
เลขที่ตำแหน่งของระเบียนที่ผ่านการคำนวณเรียกว่า 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 เป็นการเผื่อที่ให้แฟ้มข้อมูล ถ้าเผื่อมากโอกาสจะเกิดส่วนล้นจะลดลง
แสดงค่า Loading factor และโอกาสเกิด Overflow • โดยปกติ loading factor แฟ้มสุ่มควรอยู่ประมาณ .70-.80 ถ้ามากกว่านั้นจะต้องทำ reorganization ตัวอย่าง ถ้าแฟ้มสุ่มมีระเบียน 4000 ต้องเผื่อพื้นที่อย่างน้อย 5000 ซึ่งจะเกิด loading factor =.80
แฮชชิงฟังก์ชัน • ที่ใช้เปลี่ยนคีย์ให้เป็นตัวเลขที่ตำแหน่งนั้นมีมากมาย แต่แฮชชิงฟังก์ชันที่ดีจะต้องให้จำนวน synonym น้อยที่สุด และเป็นฟังก์ชันที่ไม่ซับซ้อนนัก • ถ้าระเบียนต่างๆที่ผ่านฟังก์ชันแล้วได้ตำแหน่งกระจายตัวสม่ำเสมอ ถือว่าชุดของค่า ไพรมารีคีย์เข้ากับฟังก์ชันได้ดี แต่ถ้ากระจุกอยู่ในตำแหน่งใดตำแหน่งหนึ่งมากเกินไปก็ต้องเปลี่ยนใช้แฮชชิงฟังก์ชันอื่น
แฮชชิงฟังก์ชันแบบต่างๆแฮชชิงฟังก์ชันแบบต่างๆ • 1. วิธีการใช้เศษเหลือจากการหาร (The Division – Remainder Method) เป็นวิธีการแปลงค่าคีย์ของระเบียนให้เป็นเลขที่ตำแหน่งซึ่งอยู่ใน home bucket ของแฟ้มข้อมูลโดยใช้เฉพาะ (prime number) ที่มีค่าใกล้เคียงแต่ไม่เกินจำนวน bucket ในแฟ้มข้อมูลมาหารคีย์ของระเบียน เศษเหลือที่ได้คือตำแหน่งของระเบียน โดยเขียนฟังก์ชันได้ดังนี้ • F(KV) = Mod(KV/N)Rem = ฟังก์ชันที่ใช้หาเศษเหลือKV = ค่าคีย์ของระเบียนN = largest prime number ที่มีค่าไม่เกินจำนวน home bucket ของแฟ้มข้อมูล
ตัวอย่างการคำนวณ • สมมุติแฟ้มมีระเบียน 10,000 ระเบียน คีย์อยู่ในช่วง 0000000-9999999 เตรียมเนื้อที่ 12000 เพื่อลดโอกาสการเกิด overflow ตำแหน่งระเบียนมีเลขในช่วง 00000-11999 ตัวหารที่เป็น prime number จะต้องไม่เกิด 11999 นั่นคือ 11987 • การคำนวณหาตำแหน่ง home bucket ของระเบียนที่มีคีย์=0235671 • วิธีคำนวณ เอาค่าคีย์ 0235671 หารด้วย 11987 ได้ 19 เศษ 7918 7918 นี้คือตำแหน่งของ home bucket ของระเบียน 0235671
2. การวิเคราะห์ตัวเลข (Digit Analysis Method) • ถ้าความถี่ของเลขตำแหน่งใดมีการกระจายตัวของตัวเลข 0-9 อย่าสม่ำเสมอ (Uniform distribution) จะใช้ตำแหน่งเหล่านี้มาพิจารณา ตัวอย่างในตารางตำแหน่ง 2,3,5 มีการกระจายตัวอย่างสม่ำเสมอ
3. Mid-square Method • เป็นการเอาค่าคีย์ของระเบียนมายกกำลัง 2 แล้วเลือกตัวเลขในช่องกลางมาเป็น Relative address โดยเลือกให้กับจำนวนหลักของ address ที่ต้องการ
4. Folding • โดยการแบ่งคีย์ออกเป็นส่วนๆ ให้แต่ละส่วนเท่ากับจำนวน หลักของaddress ที่ต้องการ เอาแต่ละส่วนพับเข้าหากัน แล้วบวกกัน ผลบอกคือตำแหน่งที่ต้องการ • สมมุติระเบียนที่ต้องการหาคีย์ = 123456789 ต้องการ 4 digit-address
แสดงการใช้ folding หาตำแหน่ง
5. Different Radix • โดยการเปลีย่นค่าคีย์ของระเบียน ซึ่งเป็นเลขจากฐานสิบไปเป็นฐานอื่น เช่นคีย์ 123456 อาจเปลี่ยนเป็นฐาน 11 เพื่อหาตำแหน่ง 4 หลัก ได้ดังนี้ • (1*115)+(2*114)+(3*113)+(4*112)+(5*111)+6=194871 เลือก 4971 เป็นตำแหน่งที่อยู่ระเบียน
การจัดการปัญหาระเบียนส่วนล้นการจัดการปัญหาระเบียนส่วนล้น • 1. Open addressing คือเก็บระเบียนปกติและระเบียนส่วนล้นปะปนกันไป • 2. Separate overflow แบ่งแฟ้มออกเป็น 2 ส่วน คือเก็บ home bucket และ overflow ออกจากกัน
เทคนิคเพื่อจัดการปัญหา Collision (การชนกัน) • 1. Linear Probing โดยเก็บระเบียนส่วนล้นไว้ตำแหน่งถัดจาก home bucket ถ้าระเบียนถัดไปไม่ว่างก็จะถ้าถัดไปจนถึงระเบียนสุดท้าย หากไม่พบ ก็จะเริ่มหาที่จุดเริ่มต้นไปเรื่อยๆ จบมาบรรจบ home bucket อีกครั้งก็แสดงว่าแฟ้มเต็ม • 2. Double Hashing ใช้แฮชชิงฟังก์ชันคำนวณหาค่าจะได้ค่า C แล้วใช้ค่า C บวกกับ home address เดิมจะได้เลขที่ตำแหน่ง ถ้าเกิด Collision อยู่ก็จะบวก C ด้วยตำแหน่งล่าสุดจะได้ตำแหน่งใหม่ ทำแบบนี้ไปเรื่อยๆจนได้ตำแหน่งที่ต้องการ
3. Synonym Chaining เป็นการเพิ่ม link field ในทุกๆ home bucket และ overflow bucket ซึ่ง link field จะเป็นตัวเชื่อม synonym เข้าด้วยกัน
ลักษณะงานที่เหมาะสมกับแฟ้มสุ่มลักษณะงานที่เหมาะสมกับแฟ้มสุ่ม • 1. งานแบบออนไลน์ • 2. ต้องการปรับปรุงแฟ้มข้อมูลหลายๆ ชุดพร้อมๆกัน • 3. มีอัตราการเปลี่ยนแปลงต่ำ รายการปรับปรุงในแต่ละรอบมีน้อย • 4. ต้องการคำตอบรวดเร็ว • ตัวอย่างระบบงานที่ใช้แฟ้มแบบสุ่ม • 1. ระบบธนาคารออนไลน์ • 2.ระบบการจองที่นั่งของสายการบิน
คำถาม • 1. จงเปรียบเทียบข้อแตกต่างระหว่างแฟ้มสุ่มกับแฟ้มลำดับ • 2. เทคนิคการหาตำแหน่งของแฟ้มสุ่มมีกี่แบบ อะไรบ้าง • 3. จงอธิบายความหมายและวิธีของแฮชชิงฟังก์ชัน • 4. จงเปรียบเทียบการจัดการระเบียนส่วนล้น linear probing , double hashing , synonym chaining • 5. จากแฮชชิงฟังก์ชันแบบ folding หากระเบียนที่ต้องการหามีคีย์ 139971688 ต้องการ 4 digit-address จงหาตำแหน่งของระเบียน