Back to Home

DataBase System

Lesson123456791011121415

Lesson 13 : Distributed Database System



Lesson Plan
Section No.
Section 1
Section 2
Test
PDF file
PPT File


<<Prev pageCourse MapNext page>>

Print content of this page
Save content of this page

 

กระบวนการสืบค้นข้อมูลแบบกระจาย

ในระบบฐานข้อมูลแบบรวมศูนย์ ประสิทธิภาพของการสืบค้นข้อมูลจะวัดจากปริมาณของการเข้าถึงข้อมูลในดิสก์ แต่ในระบบฐานข้อมูลแบบกระจายจะต้องพิจารณาเพิ่มเติมอีกคือ

- ค่าใช้จ่ายในการส่งข้อมูลผ่านระบบเครือข่าย

- ประสิทธิภาพของไซต์ที่ประมวลผลแต่ละส่วนของคำสั่งแบบขนาน

ความสัมพันธ์ของค่าใช้จ่ายระหว่างการส่งข้อมูลผ่านระบบเครือข่ายและการส่งข้อมูลจากดิสก์ จะขึ้นอยู่กับประเภทของระบบเครือข่าย และความเร็วของดิสก์ ดังนั้นเราไม่สามารถที่จะระบุลงไปได้เลยว่าจะต้องเสียค่าใช้จ่ายไปกับดิสก์หรือระบบเครือข่ายมากกว่ากัน

1. Query Transformation

พิจารณาแบบสอบถามง่าย ๆ “จงแสดงข้อมูลทุกทูเปิลของรีเลชัน employee” จะเห็นว่าในระบบฐานข้อมูลแบบรวมศูนย์จะเป็นแบบสอบถามที่ง่าย แต่ในระบบฐานข้อมูลแบบกระจาย การประมวลผลแบบสอบถามนี้จะค่อนข้างยุ่งยากในการประมวลผล เนื่องจากรีเลชัน employee อาจจะถูกทำสำเนาไว้หลาย ๆ ไซต์ หรือถูกแบ่งออกเป็นหลายๆ รีเลชันย่อย หรือถูกทำทั้งสองอย่าง ถ้ารีเลชัน employee ถูกทำสำเนาและไม่ได้ถูกแบ่งออกเป็นรีเลชันย่อย เราก็จะเลือกสำเนาที่มีค่าใช้จ่ายในการส่งข้อมูลน้อยที่สุด อย่างไรก็ตามถ้าสำเนาของรีเลชันมีการแบ่งออกเป็นรีเลชันย่อยด้วย การเลือกก็จะมีความยุ่งยากเพิ่มขึ้น เนื่องจากเราต้องทำการ join หรือ union เพื่อสร้างรีเลชัน employee สำหรับกรณีนี้ ก็สามารถดำเนินการได้หลายวิธี

Fragmentation Transparency มีความหมายว่า ผู้ใช้อาจจะเขียนแบบสอบถามเป็น

s state=’New york’ (employee)

และเนื่องจาก employee ถูกกำหนดดังนี้

employee 1 U employee 2

สามารถเขียนได้ดังนี้

s state=’New york’ (employee 1 U employee 2)

ถ้าเราทำการอ๊อปติไมซ์นิพจน์นี้ เราสามารถเขียนเป็นนิพจน์ได้ดังนี้

s state=’New york’ (employee 1) U s state=’New york’ (employee 2)

ซึ่งทำการแบ่งออกเป็นนิพจน์ย่อย 2 นิพจน์ โดยนิพจน์แรกจะดำเนินการเฉพาะ employee 1 ที่ไซต์ New york และนิพจน์ที่สองจะดำเนินการเฉพาะ employee 2 ที่ไซต์ Texas

ถ้าเรามีการทำอ๊อฟติไมซ์ต่อไป โดยพิจารณาที่นิพจน์แรก

s state=’New york’ (employee 1)

เนื่องจาก employee 1 จะมีข้อมูลเฉพาะของ New york เท่านั้น ดังนี้เราสามารถที่จะขจัดการดำเนินการ Selection ออกไปได้ และในนิพจน์ที่สอง

s state=’New york’ (employee 2)

เราสามารถปรับได้ดังนี้

s state=’New york’ (s state=’Texas’ (employee))

ผลลัพท์ที่จะเป็นเซตว่าง ดังนั้นเมื่อทำการอ๊อปติไมซ์แบบสอบถามแล้ว ผลลัพธ์จะได้จากการดำเนินการดึงข้อมูลจากไซต์ New york เพียงไซต์เดียว

1.1 Simple Join Processing

กลยุทธ์สำคัญในการทำ query-processing คือการเลือกวิธีการ join พิจารณานิพจน์ดังต่อไปนี้

employee department project

สมมุติว่าทั้งสามรีเลชันไม่ได้ถูกทำสำเนาและไม่ได้ถูกแบ่งเป็นรีเลชันย่อย และ employee ถูกเก็บไว้ที่ไซต์ S1 department เก็บไว้ที่ไซต์ S2 และ project เก็บไว้ที่ไซต์ S3 และกำหนด Si เป็นไซต์ที่จะส่งผลลัพธ์ของแบบสอบถามไปให้ ดังนั้นวิธีการที่เป็นไปได้สำหรับประมวลผลแบบสอบถามนี้คือ

1. ส่งสำเนาของทั้งสามรีเลชันไปที่ไซต์ Si และใช้เทคนิคต่าง ๆ ในการในการสืบค้นข้อมูลที่ไซต์ Si

2. ส่งสำเนาของรีเลชัน employee ไปที่ไซต์ S2 และทำการประมวลผล temp1= employee department ที่ไซต์ S2 จากนั้นส่ง temp1 จากไซต์ S2 ไปยังไซต์ S3 และประมวลผล temp2 = temp1 project และส่ง temp2 ไปยังไซต์ Si

3. ทำในลักษณะคล้าย ๆ กับวิธีการที่สอง แต่สลับไซต์ในการส่งข้อมูล

ไม่มีวิธีไหนที่ดีทีสุด เราต้องพิจารณาระหว่างปริมาณของข้อมูลที่จะต้องส่งระหว่างไซต์ ค่าใช้จ่ายในการส่งผ่านข้อมูลระหว่างสองไซต์ และความเร็วในการประมวลผลของแต่ละไซต์ ซึ่งในวิธีการแรก ถ้าเราส่งข้อมูลทั้งหมดไปที่ไซต์ Si โดยที่รีเลชันเหล่านั้นมีการสร้างอินเด็กซ์ ดังนั้นเราจำเป็นที่จะต้องสร้างอินเด็กซ์เหล่านั้นที่ไซต์ Si ด้วย ซึ่งการสร้างอินเด็กซ์ทำให้มีการประมวลผลเพิ่มขึ้นมา และยังมีการใช้ดิสก์เพิ่มขึ้นอีก อย่างไรก็ตามวิธีการที่สองก็มีข้อเสียคือรีเลชันที่ได้จากการทำประมวลผลมีขนาดใหญ่(employee department)ซึ่งต้องส่งข้อมูลจากไซต์ S2 ไปที่ไซต์ S3 ซึ่งวิธีการที่สองจะทำให้มีการส่งข้อมูลบนระบบเครือข่ายมากกว่า เมื่อเทียบกับวิธีการที่หนึ่ง

1.2 Semijoin Strategy

แนวคิดการทำแบบสอบถามแบบกระจายโดยใช้วิธีการทำ semijoin มีจุดประสงค์เพื่อลดจำนวนของทูเปิลใน รีเลชันก่อนที่จะทำการส่งให้ไซต์อื่น สมมุติว่าเราต้องการประมวลผลนิพจน์ r1 r2 ซึ่ง r1 และ r2 เก็บอยู่ที่ไซต์ S1 และ S2 ตามลำดับ กำหนดให้ R1 และ R2 แทนสกีมาของ r1 และ r2 ตามลำดับ สมมุติว่าเราต้องการผลลัพธ์ที่ S1 ถ้ามีทูเปิลหลาย ๆ ทูเปิลใน r2 ที่ไม่ได้ join กับทูเปิลใด ๆ ใน r1 ดังนั้นการส่งรีเลชัน r2 ทั้งหมดไปที่ไซต์ S1 ก็จะเป็นการส่งทูเปิลที่ทำให้เกิดการ join เกิดผลลัพธ์ที่เกินมาได้ ดังนั้น ก่อนที่เราจะส่งข้อมูลจาก r2 ไปที่ไซต์ S1 ก็น่าจะส่งเฉพาะทูเปิลสามารถ join กับ รีเลชัน r1 ที่ไซต์ S1 เท่านั้น

เราสามารถดำเนินการดังกล่าวได้ดังนี้

1. หา temp1 ß P R1 Ç R2 ( r1 ) ที่ไซต์ S1

2. ส่ง temp1 จากไซต์ S1 ไป S2

3. หา temp2 ß r2 temp1 ที่ไซต์ S1

4. ส่ง temp2 จากไซต์ S2 ไป S1

5. ประมวลผล r1 temp2 ที่ไซต์ S2

ในขั้นตอนที่ 3 temp2 สามารถหาได้จาก r2 P R1 Ç R2 ( r1 ) และ

ในขั้นตอนที่ 5 ทำ r1 r2 P R1 Ç R2 ( r1 ) เราสามารถเขียนนิพจน์ใหม่ได้ดังนี้

(r1 P R1 Ç R2 ( r1 )) r2

เนื่องจาก r1 P R1 Ç R2 ( r1 ) = r1 ดังนั้นนิพจน์นี้จะเท่ากับ r1 r2

วิธีการนี้จะมีความเหมาะสมในกรณีที่จำนวนของทูเปิลของ r2 มีจำนวนน้อย วิธีการดำเนินการแบบ semijoin แทนด้วยสัญลักษณ์ ดังนั้น semijoin ของ r1 และ r2 เขียนแทนด้วย r1 r2 คือ

P R1(r1 r2)

ดังนั้น r1 r2 จะเป็นการเลือกทูเปิลของ r1 ที่ เพื่อการทำ r1 r2 ซึ่งในขั้นตอนที่ 3 จะสามารถเขียนได้ใหม่ดังนี้

temp2 = r2 r1

1.3 Join Strategies that Exploit Parallelism

พิจารณาการ join ของรีเลชัน 4 รีเลชัน

r1 r2 r3 r4

ซึ่งรีเลชัน ri จะถูกเก็บไว้ที่ไซต์ Si สมมุติว่าเราต้องการผลลัพธ์ที่ไซต์ S1 ซึ่งก็มีอยู่หลายวิธีการที่จะดำเนินการแบบขนาน ยกตัวอย่างเช่น r1 ถูกส่งไปที่ไซต์ S2 และทำ r1 r2 ที่ไซต์ S2 ในขณะเดียวกัน r3 ก็ถูกส่งไปที่ไซต์ r4 และทำ r3 r4 ที่ไซต์ S4 ไซต์ S2 จะส่งผลลัพธ์ (r1 r2) กลับไปที่ไซต์ S1 และไซต์ S3 จะส่งผลลัพธ์ (r3 r4) กลับไปที่ไซต์ S1 เมื่อ S1 ได้รับผลลัพธ์กลับจาก S2 และ S4 แล้ว ก็จะทำการ join อีกครั้ง (r3 r4) (r1 r2) ดังนั้นจะเห็นว่าการประมวลผลการ join ที่ S1 สามารถดำเนินการแบบขนานโดยมีการประมวลผลที่ไซต์ S2 และไซต์ S4 ไปพร้อมๆ กัน

 

 

Last Updated: 12/13/2001 11:29:25 AM
© โครงการเครือข่ายสารสนเทศเพื่อพัฒนาการศึกษา ทบวงมหาวิทยาลัย