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

Download Report

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

การจัดระเบียบแฟ้ มแบบสุม่
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
่ ระมาณ .70-.80 ถ้ามากกว่านั้นจะต้อง
 โดยปกติ loading factor แฟ้ มสุ่ มควรอยูป
ทา reorganization ตัวอย่าง ถ้าแฟ้ มสุ่ มมีระเบียน 4000 ต้องเผือ่ พื้นที่อย่างน้อย
5000 ซึ่ งจะเกิด loading factor =.80
แฮชชิงฟั งก์ชนั
 ที่ใช้เปลี่ยนคียใ์ ห้เป็ นตัวเลขที่ตาแหน่งนั้นมีมากมาย แต่แฮชชิงฟังก์ชน
ั ที่ดีจะต้องให้
จานวน synonym น้อยที่สุด และเป็ นฟังก์ชนั ที่ไม่ซบั ซ้อนนัก
 ถ้าระเบียนต่างๆที่ผา่ นฟังก์ชน
ั แล้วได้ตาแหน่งกระจายตัวสม่าเสมอ ถือว่าชุดของค่า
ไพรมารี คียเ์ ข้ากับฟังก์ชนั ได้ดี แต่ถา้ กระจุกอยูใ่ นตาแหน่งใดตาแหน่งหนึ่งมากเกินไปก็
ต้องเปลี่ยนใช้แฮชชิงฟังก์ชนั อื่น
แฮชชิงฟั งก์ชนั แบบต่างๆ
 1. วิธีการใช้เศษเหลือจากการหาร (The Division – Remainder
Method) เป็ นวิธีการแปลงค่าคียข์ องระเบียนให้เป็ นเลขที่ตาแหน่งซึ่ งอยูใ่ น
home bucket ของแฟ้ มข้อมูลโดยใช้เฉพาะ (prime number) ที่มีค่า
ใกล้เคียงแต่ไม่เกินจานวน bucket ในแฟ้ มข้อมูลมาหารคียข์ องระเบียน เศษเหลือที่ได้
คือตาแหน่งของระเบียน โดยเขียนฟังก์ชนั ได้ดงั นี้
 F(KV)
Rem
KV
N
= Mod(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 จงหาตาแหน่งของระเบียน