![]() |
|
![]() |
|
![]() |
ในระบบฐานข้อมูลแบบรวมศูนย์ ประสิทธิภาพของการสืบค้นข้อมูลจะวัดจากปริมาณของการเข้าถึงข้อมูลในดิสก์ แต่ในระบบฐานข้อมูลแบบกระจายจะต้องพิจารณาเพิ่มเติมอีกคือ - ค่าใช้จ่ายในการส่งข้อมูลผ่านระบบเครือข่าย - ประสิทธิภาพของไซต์ที่ประมวลผลแต่ละส่วนของคำสั่งแบบขนาน ความสัมพันธ์ของค่าใช้จ่ายระหว่างการส่งข้อมูลผ่านระบบเครือข่ายและการส่งข้อมูลจากดิสก์ จะขึ้นอยู่กับประเภทของระบบเครือข่าย และความเร็วของดิสก์ ดังนั้นเราไม่สามารถที่จะระบุลงไปได้เลยว่าจะต้องเสียค่าใช้จ่ายไปกับดิสก์หรือระบบเครือข่ายมากกว่ากัน
พิจารณาแบบสอบถามง่าย ๆ จงแสดงข้อมูลทุกทูเปิลของรีเลชัน 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 เพียงไซต์เดียว
กลยุทธ์สำคัญในการทำ query-processing คือการเลือกวิธีการ join พิจารณานิพจน์ดังต่อไปนี้ employee สมมุติว่าทั้งสามรีเลชันไม่ได้ถูกทำสำเนาและไม่ได้ถูกแบ่งเป็นรีเลชันย่อย และ employee ถูกเก็บไว้ที่ไซต์ S1 department เก็บไว้ที่ไซต์ S2 และ project เก็บไว้ที่ไซต์ S3 และกำหนด Si เป็นไซต์ที่จะส่งผลลัพธ์ของแบบสอบถามไปให้ ดังนั้นวิธีการที่เป็นไปได้สำหรับประมวลผลแบบสอบถามนี้คือ
ไม่มีวิธีไหนที่ดีทีสุด
เราต้องพิจารณาระหว่างปริมาณของข้อมูลที่จะต้องส่งระหว่างไซต์
ค่าใช้จ่ายในการส่งผ่านข้อมูลระหว่างสองไซต์
และความเร็วในการประมวลผลของแต่ละไซต์
ซึ่งในวิธีการแรก
ถ้าเราส่งข้อมูลทั้งหมดไปที่ไซต์
Si
โดยที่รีเลชันเหล่านั้นมีการสร้างอินเด็กซ์
ดังนั้นเราจำเป็นที่จะต้องสร้างอินเด็กซ์เหล่านั้นที่ไซต์
Si ด้วย
ซึ่งการสร้างอินเด็กซ์ทำให้มีการประมวลผลเพิ่มขึ้นมา
และยังมีการใช้ดิสก์เพิ่มขึ้นอีก
อย่างไรก็ตามวิธีการที่สองก็มีข้อเสียคือรีเลชันที่ได้จากการทำประมวลผลมีขนาดใหญ่(employee
แนวคิดการทำแบบสอบถามแบบกระจายโดยใช้วิธีการทำ
semijoin
มีจุดประสงค์เพื่อลดจำนวนของทูเปิลใน
รีเลชันก่อนที่จะทำการส่งให้ไซต์อื่น
สมมุติว่าเราต้องการประมวลผลนิพจน์
r1 เราสามารถดำเนินการดังกล่าวได้ดังนี้
ในขั้นตอนที่
3 temp2 สามารถหาได้จาก r2 ในขั้นตอนที่
5 ทำ r1 (r1 เนื่องจาก
r1 วิธีการนี้จะมีความเหมาะสมในกรณีที่จำนวนของทูเปิลของ
r2 มีจำนวนน้อย
วิธีการดำเนินการแบบ semijoin
แทนด้วยสัญลักษณ์ P R1(r1![]() ดังนั้น
r1 temp2 = r2
พิจารณาการ join ของรีเลชัน 4 รีเลชัน r1 ซึ่งรีเลชัน
ri จะถูกเก็บไว้ที่ไซต์ Si สมมุติว่าเราต้องการผลลัพธ์ที่ไซต์
S1
ซึ่งก็มีอยู่หลายวิธีการที่จะดำเนินการแบบขนาน
ยกตัวอย่างเช่น r1
ถูกส่งไปที่ไซต์ S2 และทำ r1
|
|
|