การจัดระเบียบแฟ้มแบบสุ่ม 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 จงหาตาแหน่งของระเบียน