โครงสร้างของแฟ้มสุ่ม

Download Report

Transcript โครงสร้างของแฟ้มสุ่ม

บทที่ 3 การจัดเรี ยงแบบสุ่ ม
(Random File organization)
นิยามและการประยุกต์ ใช้ งาน
 วิธีการจัดระเบียบข้ อมูล ที่สามารถเข้ าถึงระเบียนหนึ่งระเบียน
ใดโดยตรง โดยไม่ต้องอ่านข้ อมูลตังแต่
้ ต้นอย่างแฟ้มลาดับ
เรี ยกว่า การจัดระเบียบสุม่ (Random file organization)
 ระเบียนต่างๆ ในแฟ้มสุม
่ ไม่จาเป็ นต้ องเรี ยงตามไพมารี่ คีย์ ซึง่
บางครัง้ ยังมีพื ้นที่วา่ ง ปะปนกันเป็ นระยะ ด้ วยดังภาพ
2
3
 การคานวณหาตาแหน่ งระเบียนทาได้โดยสร้างความสาพันธ์
ระหว่างค่าของคียก์ บั ตาแหน่งกายภาพจากฟงั ก์ชนดั
ั ่ งนี้
R(key value) ----- address
 บันทึก-นาค่าไพรมารีค
่ ยี ม์ าแปลงเป็ นตาแหน่งเรียกใช้ขอ้ มูล-
นาค่าไพรมารียม์ าแปลงเป็ นตาแหน่งเพือ่ ดึงข้อมูลมาใช้งาน
4
เทคนิคที่ใช้ในการแปลงส่งฟังก์ชนั ่ R
R(key value) ----- address
 การแปลงส่งโดยตรง(Direct Mapping)
 การค้ นหาในพจนานุกรม(Dictionary Lookup)
 การคานวณตาแหน่ง(Address Calculation)
5
การแปลงส่งโดยตรง

ทาได้งา่ ยและรวดเร็วเนื่องจากให้ตาแหน่งของระเบียนมีคา่ เท่ากับไพรมารีค่ ยี จ์ งึ
ไม่ตอ้ งคานวณ
R(key value) ----- relative address

Relative address คือลาดับทีข่ องระเบียนในแฟ้มข้อมูล เช่น ถ้าแฟ้มข้อมูล
เตรียมเนื้อทีข่ นาด N ระเบียนแล้ว relative address คือ 1,2,3,… N-1,N หรือ
0,1,2,N-2, N-1
6
การแปลงส่งโดยตรง(Direct Mapping)

การให้ตาแหน่งของระเบียนไม่ซ้ากัน(uniquely) คือ หนึ่งระเบียนต่อ
หนึ่งตาแหน่ง primary key จะต้องเป็ นตัวเลขเรียงจากน้อยไปมาก
และระเบียนมีขนาดคงทีต่ วั อย่าง ระเบียนในแฟ้มสุม่ มี primary key
อยูใ่ นช่วง 0-9999 ดังนัน้ เราต้องสารองพืน้ ทีว่ า่ งไว้ 10000 ทีต่ ่อ
10000 ระเบียน โดยค่าของ primary key ต้องอยูใ่ นช่วง 0-9999
7
คีย์ที่ไม่ เหมาะสมสาหรับการทา Relative Addressing



ชื่อพนักงาน แปลงเป็ นตัวเลขได้แต่กไ็ ม่อยูใ่ นรูป Relative Address
คียท์ เ่ี ป็ นตัวเลขบางตัว เช่นเลขทีบ่ ตั รผูเ้ สียภาษีเนื่องจากมี 10 ต่าแหน่ง ค่าที่
เป็ นไปได้ 0-9999999999 หรือประมาณ หนึ่งพันล้าน
การใช้ Relative address จะมีประโยชน์มากถ้าจานวนค่าทีม่ อี ยูจ่ ริงใกล้เคียงกับ
จานวนคียจ์ ริง
8
ข้อดี
 การแปลงฟงั ก์ชน
ั ่ R ทาได้งา่ ย
 ประมวลผลได้ดท
ี งั ้ แบบลาดับและแบบสุม่
ข้อเสีย
 ไม่สามารถใช้เขตหลักเป็ นตัวอักษรได้
 ไม่เหมาะสมสาหรับช่วงคียก
์ ว้างๆ แต่มรี ะเบียนจริงๆ เพียงเล็กน้อย สิน้ เปลือง
พืน้ ทีม่ าก
9
การค้นหาในพจนานุกรม(Dictionary lookup)



บางตาราเรียกว่า Indexed file
แนวคิดเริม่ แรกคือเป็ นการสร้างตารางหรือแฟ้มพจนานุ กรม(แฟ้มดรรชนีชนิด
หนึ่ง) โดยจัดเก็บในรูปของคีย/์ ตาแหน่ง(key value/relative address)
การเรียกใช้จะใช้คา่ คียข์ องระเบียนไปหา Address ทีค่ กู่ บั คียใ์ นแฟ้มพจนานุกรม
และใช้ address ทีค่ กู่ บั คียใ์ นแฟ้มพจนานุ กรมและเข้าถึง Address เพือ่ เข้าถึง
ระเบียนต่อไป
10
โครงสร้างแฟ้ มพจนานุกรม

ประกอบด้วย 2 entries คือ key กับ address โดยแบ่งได้ดงั นี้
1. แบบตาราง (Linear/Table)
ข้อมูลเรียงตามลาดับของ key ดังภาพ
- ค้นหาข้อมูลได้รวดเร็วเพราะสามารถใช้วธิ คี น
้ หาข้อมูลแบบไบนารี (Binary
search) ได้
- การแทรกหรือการลบข้อมูลในพจนานุ กรมทีเ่ รียงแล้วเสียเวลามาก
11

ข้อมูลทีไ่ ม่ได้เรียงลาดับของคีย์
 ใช้วธิ คี น
้ หาแบบลาดับหาได้ชา้
 หรือใช้ hashing function หาตาแหน่ งข้อมูล
 การแทรกหรือการลบข้อมูลในพจนานุ กรมไม่ยงุ่ ยาก
12
DICTIONARY
KEY
ADDRESS
RANDOM FILE
Relative Address
13
2 Nonlinear แฟ้ มพจนานุกรมอาจมีโครงสร้างแบบอื่น เช่น
Binary search tree ดังภาพ
 M-way search tree
 B-tree
 โครงสร้างเหล่านี้คน
้ หาข้อมูลได้เร็ว แต่ซบั ซ้อนกว่า
 การแทรกหรือลบข้อมูลในพจนานุ กรมทาได้งา่ ย

14
15
โครงสร้างของแฟ้ มสุ่ม

การเรียกใช้ระเบียนโดยใช้วธิ นี ้ีสามารถกระทาได้โดยตรง ซึง่ ปญั หาอยูท่ ว่ี า่
เราจะจัดเก็บระเบียนในแฟ้มสุม่ อย่างไร คือสามารถกาหนดเลขทีต่ าแหน่ง
ให้กบั ทุกๆ คียท์ เ่ี ป็ นไปได้ โดยสร้างพจนานุกรมให้สมบูรณ์ในช่วงแรก

ข้อดี ระเบียนใหม่จะสามารถพิจารณาตาแหน่งทีเ่ ก็บได้งา่ ย
ข้อเสีย ถ้าแฟ้มพจนานุ กรมเต็มตัง้ แต่แรก จะไม่สามารถเก็บข้อมูลได้ต่อไป

16
โครงสร้างของแฟ้ มสุ่ม



มีอกี วิธคี อื การพิจารณาพืน้ ทีว่ า่ ง(free space) เมือ่ ต้องการเก็บระเบียนควร
เก็บในตาแหน่งว่างจากบนก่อน หรือเก็บในกลุ่มระเบียนทีม่ คี ล้ายๆกัน
ขณะเดียวกันต้องเพิม่ ข้อมูล key value :address เข้าไปในแฟ้ม
พจนานุกรมด้วย
ถ้าเป็ น sort table การแทรกข้อมูลใหม่ในตาแหน่งทีถ่ ูกต้องอาจต้องขยับ
ข้อมูลอื่นๆ ด้วย
ถ้าเป็ นแบบ link list การแทรกข้อมูลใหม่ทาได้งา่ ย แต่ไม่สามารถค้นหา
แบบไบนารีได้
17
โครงสร้างของแฟ้ มสุ่ม
ข้อดีของวิธกี ารค้นหาในพจนานุกรม
1. ตาแหน่ งของระเบียนหาได้โดยไม่ตอ
้ งผ่านการคานวณเพราะระบุชดั ในแฟ้ม
พจนานุกรม
2. ไพรมารีคย
ี ท์ ใ่ี ช้สามารถ เป็ นไปตามความต้องการของผูใ้ ช้
3. เมือ
่ ทา Reoranization เลขทีต่ าแหน่งอาจเปลีย่ นแปลงแต่ค่าของคียไ์ ม่ตอ้ ง
เปลีย่ นตาม
เทคนิคการค้นหาในพจนานุ กรมเหมาะสาหรับแฟ้มข้อมูลขนาดเล็ก
เช่นเดียวกับการแปลงส่งโดยตรง มีขอ้ ดีทส่ี ามารถสร้างเลขทีต่ าแหน่งทีไ่ ม่ซ้า
กันได้ในแต่ละระเบียน แฟ้ม index sequencial file เป็ นรูปแบบหนึ่งของวิธนี ้ี
18

ตัวอย่างเช่น บริษทั หนึ่งมีพนักงาน 2,000 คน และใช้เลขทีบ่ ตั รผูเ้ สียภาษี
เป็ นคีย์ ซึง่ คียท์ ใ่ี ช้มชี ว่ งกว้าง 1 หมืน่ ล้าน แต่ขอ้ มูลจริงมีเพียง 2,000 เท่านัน้
ซึง่ เราต้องหา ฟงั ก์ชนมาท
ั่
าการเปลีย่ นค่าไพรมารีคยี ใ์ ห้เป็ น relative address
ประมาณ 2,000 ที่

ในการคานวณหาตาแหน่งนัน้ แตกต่างจาก 2 วิธแี รกทีใ่ ห้ตาแหน่งไม่ซ้ากัน แต่
วิธกี ารคานวณนัน้ อาจได้ตาแหน่งทีเ่ ดียวกันกับไพรมารีคยี ข์ องระเบียนอื่นๆ
ได้
19


โดยถ้า R(K1) = R(K2) แต่ K1 # K2 เมือ่ K1, K2 เป็ นไพรมารีคยี ข์ อง 2
ระเบียน เราจะเรียกว่า Collision และเรียก K1, K2 ว่า Synonyms และเรียก
ระเบียนทีไ่ ม่สามารถเก็บในตาแหน่งทีค่ านวณได้ (Home address) ว่าระเบียน
ส่วนล้น (Overflow record)
วิธกี ารคานวณมีช่อื เรียกต่างกันดังเช่น




Randomizing Technique
Key to address Transform
Hashing Function
Scatter Storage
20
ปัจจัยที่มีอิทธิพลต่อประสิทธิภาพของแฟ้ มสุ่มที่ใช้วิธีการ
คานวณตาแหน่ ง
ขนาดของ Bucket
 Loading Factor
 ชุดของค่าไพรมารีคย
ี ์
 แฮชชิง่ ฟงั ก์ชนที
ั ่ ใ่ ช้
 วิธก
ี ารจัดการเกีย่ วกับระเบียนส่วนล้น

21
คือที่เก็บข้อมูลของแฟ้มสุ่มสาหรับการคานวณ
ตาแหน่ งนัน้ ถูกแบ่งเป็ นส่วนๆ ที่เรียกว่า Bucket
แต่ละ
Bucket เก็บระเบียนได้ 1 หรือมากกว่า โดยความยาวของ
ระเบียนแปรผันได้ ผูอ้ อกแบบแฟ้มข้อมูลเป็ นผูก้ าหนดความจุ
ของ Bucket
 Bucket ขนาดเล็กจะมีอต
ั ราส่วนในการเกิด Overflow ค่อนข้าง
สูง ทาให้เสียเวลาในการอ่าน Bucket เพิม่ เติมและอาจต้องเพิม่
เวลา seek time ถ้า Bucket ต้องอ่านเข้าไปในหน่วยความจา
แล้วจึงค้นหาระเบียนทีต่ อ้ งการได้
 Bucket
22
 Bucket capacity มักขึน
้ อยูก่ บั ฮาร์ดแวร์ทแ่ี ฟ้มนัน้ เก็บอยูเ่ ช่น
อาจเป็ น 1 Sector 1 track หรือ 1 page โดยขนาดของ
Bucket ควรเท่ากับขนาดของบล็อก
23
แฟ้มข้ อมูลหนึ่งประกอบไปด้ วย Bucket 2 ประเภทคือ Home bucket
และ overflow bucket
โดยที่ตำแหน่งของระเบียนที่คำนวณได้ เรี ยกว่ำ Home Address จะเก็บไว้
ใน Home Bucket
แต่ละ Bucket ที่แยกไว้ ต่ำงหำกสำหรับเก็บระเบียนส่วนล้ น เรี ยกว่ำ
Overflow Bucket
24
Loading Factor

Loading Factor ของแฟ้มข้ อมูลคือ อัตราส่วนของจานวนระเบียนที่มีอยู่ในแฟ้ม
ขณะที่เก็บ ต่อจานวนเนื ้อที่ที่มีให้ ใช้ (available) ในแฟ้ม
Loading factor =
#record in file
Max# of Record file can contain

การกาหนดค่าของ loading factor เป็ นการเผื่อพื ้นที่ให้ แฟ้มข้ อมูลถ้ าเผื่อไว้ มาก
โอกาสที่จะเกิดระเบียนส่วนล้ นจะ ลดลงด้ วย
25


โดยปกติ Loading Factor ของแฟ้มสุม่ จะอยูท่ ี่ 0.70 -0.80 ถ้ ามากกว่านี ้ควร
Reorganization เช่น
แฟ้มข้ อมูลมีระเบียนประมาณ 4,000 ระเบียน จะต้ องเผื่อพื ้นที่อย่างน้ อย
กว่า 5,000 ซึง่ ก็คือ loading factor =0.8 หรื อ 80% นัน่ เอง
26
แฮชชิงฟังก์ชนั ่ (Hashing function)
เป็ นวิธกี ารทีใ่ ช้เปลีย่ นคียใ์ ห้เป็ นเลขตาแหน่ง โดยมีวธิ หี ลากหลาย
โดยพิจารณาดังนี้
1. ให้พจิ ารณาทีค่ า่ ของ synonym น้อยทีส่ ดุ
2. เป็ นฟงั ชันที
่ ไ่ ม่ซบั ซ้อนนัก
3. ระเบียนทีผ่ า่ นฟงั ก์ชนแล้
ั ่ วกระจายอย่างสม่าเสมอ ถือว่าชุดของค่า
primary key เข้ากับ ฟงั ก์ชนได้
ั ่ ดี ถ้ากระจุกตัวแน่นก็ถอื ว่าต้องหา
ฟงั ก์ชนแฮชชิ
ั่
ง่ ใหม่

27
แฮชชิงฟังก์ชนั ่ แบบต่างๆ





วิธกี ารใช้เศษเหลือจากการหาร
วิธกี ารวิเคราะห์ตวั เลข
Mid square method
Folding
Different Radix
28
การใช้เศษเหลือจากการหาร
เป็ นวิธกี ารแปลงค่าคียข์ องระเบียนให้อยูใ่ นรูปของตาแหน่งทีอ่ ยูช่ ว่ ง
Home bucket ของแฟ้มข้อมูล คือการใช้จานวนเฉพาะ(Prime
number) ทีม่ คี า่ ใกล้เคียงแต่ไม่เกินจานวน Bucket ในแฟ้มข้อมูลหาร
คียข์ องระเบียนเศษทีเ่ หลือจากการหารคือ ตาแหน่งของระเบียน
 F(KV) = Mod(KV/N)
 Rem = ฟงั ก์ชนที
ั ่ ใ่ ช้ในการหาเศษเหลือ
 KV = ค่าคียข
์ องระเบียน
 K = largest prime number ทีม
่ คี า่ ไม่เกิน largest ของ number

29
การใช้เศษเหลือจากการหาร
การเปลีย่ นวิธนี ้ีไม่เพียงแต่ให้ผลดีสาหรับแฟ้มขนาดใหญ่ใช้เวลาใน
การคานวณน้อย ตัวอย่างเช่น
 กาหนดให้ Bucket capacity = 1 แฟ้มข้อมูลทีร่ ะเบียนอยู่ 10,000
ระเบียน ค่าของคียอ์ ยูใ่ นช่วง 0000000-9999999 เตรียมเนื้อทีไ่ ว้
12,000 สาหรับเก็บข้อมูลนี้เพือ่ ลดโอกาสการเกิด Overflow ตาแหน่ง
ของระเบียนมีหลายเลขในช่วง 00000-11999 ตัวหารเป็ น prime
number ต้องไม่เกิน 11999 นัน้ คือ 11987 ต่อไปนี้คอื คานวณ
ตาแหน่ง Home Bucket ของระเบียนทีม่ คี ยี ์ 0235671

30
การใช้เศษเหลือจากการหาร
 การคานวณตาแหน่ ง Home
bucket ของคีย์ 0235671
เอาค่าคีย์ 0235671 หารด้วย 11987 จะได้ผลหาร 19 เศษ
7918 ซึง่ เศษทีเ่ หลือคือ ตาแหน่งของ Home Bucket ของ
ระเบียน 0235671 ซึง่ เป็ น Relative address ซึง่ OS จะเป็ น
ส่วนทีท่ าหน้าทีค่ านวณตาแหน่งทีแ่ ท้จริงต่อไป
31
การวิเคราะห์เชิงตัวเลข
 เป็ นการวิเคราะห์ตวั เลขของคียใ์ นแต่ละตาแหน่ ง
ถ้าความถี่
ของเลขตาแหน่งใดมีการกระจายของตัวเลข 0-9 อย่าง
สม่าเสมอ และใช้ตาแหน่งเหล่านัน้ มาพิจารณาตาแหน่งทีเ่ ก็บ
ข้อมูลดังตัวอย่าง
32
ตารางความถี่
33
การวิเคราะห์เชิงตัวเลข


จากตารางพบว่า ตาแหน่งที่ 2,3, 5 มีการการะจายตัวเลข 0-9 อย่าง
สม่าเสมอ ดังนัน้ ถ้าคียร์ ะเบียน = 16258 แล้วเลขทีข่ องตาแหน่งนี้คอื 628
สมมุตวิ า่ แฟ้มข้อมูลนี้ม ี 500 ระเบียน(0-499) ดังนัน้ อยูน่ อกช่วงของ
ตาแหน่งทีเ่ ก็บข้อมูล ให้เราเอา 500 มาลบออก ได้ตาแหน่งของระเบียนเป็ น
128 วิธดี งั กล่าวจะดีหรือไม่ขน้ึ อยูก่ บั ไพรมารียใ์ นตาแหน่งต่างๆ กระจาย
ตัวอย่างสม่าเสมอเพียงใด
34
Mid Square Method

ทาโดยเอาค่าคียข์ องระเบียนมายกกาลังสอง และเลือกตัวเลขในช่วงกลางมาเป็ น
Relative address โดยเลือกให้เท่ากับจานวนหลักของ address
ทีต่ อ้ งการ
35
36
Folding
 โดยการแบ่งค่าคียอ
์ อกส่วนๆ
ให้แต่ละส่วนเท่ากับจานวนหลัก
ของ address ทีต่ ้องการ เอาแต่ละส่วนพับเข้าหากันแล้วจึง
บวกกัน ผลบวกคือ ต าแหน่ ง ที่ต้ อ งการเช่ น ถ้ า ระเบีย บที่
ต้องการหามีคยี ์ 123456789 ต้องการ 4 digit address
37
38
Different Radix
โดยการเปลีย่ นค่าคียข์ องระเบียน จากเลขฐานสิบเป็ นเลขฐานอื่นๆ เช่นคีย์ =
123456 เป็ นเป็ นฐานสิบเอ็ด เพือ่ หาตาแหน่ง 4 หลัก ได้ดงั นี้
=
โดยเราอาจจะเลือ 4871 เป็ นตาแหน่งทีอ่ ยูข่ องระเบียนนี้กไ็ ด้
39
ข้อดีของการใช้วธิ กี ารคานวณตาแหน่งสาหรับทา
R(Key value) -- address
1.
2.
3.
4.
5.
ไพรมารีคยี ท์ ใ่ี ช้เป็ นไปตามความต้องการผูใ้ ช้
ถ้ามีการทา reorganization แฟ้มสุม่ อาจต้องเปลีย่ นแฮชชิง
ฟงั ก์ชนั ่ แต่คา่ ของคียไ์ ม่ตอ้ งเปลีย่ นตาม
เวลาทีใ่ ช้สาหรับวิธกี ารคานวณตาแหน่ง
เวลาประมวลผลสาหรับคานวณแฮชชิงฟงั ก์ชนั ่
เวลาประมวลผลและ I/O access สาหรับแก้ปญั หา Collision
40
การจัดการแก้ปัญหาระเบียนส่ วนล้น
Handing Overflow

Open address คือ ภายในเนื้อทีอ่ ขงแฟ้มสุม่ มีเฉพาะ Home
bucket อย่างเดียวเก็บทัง้ ระเบียนปกติและส่วนระเบียน ส่วนล้นปะปนกัน

Separate Overflows แบ่งเนื้อทีแ่ ฟ้มข้อมูลออกเป็ น 2 ส่วน คือ
Home bucket และ overflow bucket โดยให้ overflow
bucket เป็ นทีเ่ ก็บระเบียนส่วนล้นโดยเฉพาะ
41
เทคนิคที่ใช้ในการจัดการปัญหา collision



Linear probing
Double Hazing
Synonym Chaining
42
Linear probing
33
Key
hash
43
Double Hazing
44
Synonym Chaining
45