ช่วงนี้เศรษฐกิจสหรัฐกำลังระส่ำระสายหนัก จะเห็นบทความ ข้อเขียนเรื่องเกี่ยวกับการปรับตัวในช่วงวิกฤตเศรษฐกิจมากเป็นพิเศษ ในวงการไอทียังไม่เห็นผลกระทบมากนัก ส่วนหนึ่งอาจจะเป็นเพราะ สภาพการใช้จ่ายทางด้านงาน IT จะสะท้อนสภาพเศรษฐกิจตามหลังอยู่ประมาณ 1 ไตรมาส แต่ต้นปีหน้าท่าจะแย่เหมือนกัน

แน่นอนที่สภาพเศรษฐกิจโดยรวม และสภาพตลาดหุ้น จะส่งผลต่อตลาดและการเติบโตของอุตสาหกรรมด้าน Business Intelligence และ Data Warehouse แต่ส่งผลอย่างไร มากน้อยเพียงใด นาย Rick Sherman แห่ง Athena IT Solutions ก็เลยได้จัดทำ ดัชนีอุตสาหกรรมด้าน Business Intelligence/Data Warehouse (BI/DW) ขึ้น โดยอาศัยข้อมูลราคาหุ้นของบริษัทที่มีรายได้จากอุตสาหกรรม BI/DW จำนวนหนึ่งมาคำนวณเป็นดัชนี  ใครสนใจว่าดัชนีที่ว่านี้คำนวณอย่างไร เอาบริษัทไหนบ้างมาเป็นฐานการคำนวณ ก็ตามไปอ่านได้จากบล็อกของเขานะครับ

Introducing the Business Intelligence (BI) & Data Warehousing (DW) Index

BI/DW Index นี่ใช้ข้อมูลจาก Google Finance มาคำนวณไว้บน Google Spreadsheet  อัพเดตอัตโนมัติทุก 20 นาที ถึงแม้ว่าคงไม่อาจอ้างได้ว่า เป็นดัชนีที่สามารถสะท้อนสภาพอุตสหากรรม BI/DW ได้อย่างถูกต้องสมบูรณ์ แต่อย่างน้อยก็พอทำให้เห็นทิศทางได้เหมือนกัน

Bitmap Index เป็นอินเด็กซ์แบบหนึ่งซึ่งเริ่มมีใช้ตั้งแต่ Oracle 7.3 เป็นต้นมา โดยมีลักษณะสำคัญคือมีอัตราการบีบอัดข้อมูลที่สูงมาก ทำให้เหมาะต่อการใช้งานด้านดาต้าแวร์เฮาส์ และ OLAP มากกว่าอินเด็กซ์แบบ B-Tree ที่รู้จักกันโดยทั่วไป

ลักษณะของ Bitmap Index

Bitmap index ถูกออกแบบมาให้ใช้สำหรับคอลัมน์ที่มีลักษณะ low cardinality หรือมีค่าที่เป็นไปได้สำหรับคอลัมน์นั้นจำนวนน้อยๆ เมื่อเทียบกับจำนวนเรคอร์ดในตารางนั้น สัดส่วนจำนวนค่าที่เป็นไปได้ของคอลัมน์เทียบกับจำนวนเรคอร์ด เรียกว่า cardinality คอลัมน์ที่มี cardinality = 0.4% หมายความว่า ในตารางขนาด 1000 เรคอร์ด คอลัมน์นั้นมีค่าที่แตกต่างกัน 4 ค่า
Bitmap Index เหมาะอย่างยิ่งกับการใช้ร่วมกันคอลัมน์ที่ มี caridnality ต่ำๆ เช่น 0.2% - 1% เป็นต้น อินเด็กซ์ที่ถูกสร้างขึ้นจะประกอบด้วยบิทต่างๆ เพื่อให้แทนค่าในคอลัมน์ที่ถูกทำอินเด็กซ์ของแต่ละแถว ตัวอย่างเช่น คำสั่ง

create bitmap index person_region on person (region);

จะสร้างอินเด็กซ์ในลักษณะเช่นนี้

        Row     Region   North   East   West   South
        1       North        1      0      0       0
        2       East         0      1      0       0
        3       West         0      0      1       0
        4       West         0      0      1       0
        5       South        0      0      0       1
        6       North        1      0      0       0

ข้อดีของ Bitmap Index

  • เรียกใช้งานได้รวดเร็วกว่า ทั้งนี้เนื่องจากการทำงานจะใช้ bitwise operator หรือการจัดการข้อมูลเป็นบิท ซึ่งจะทำงานได้เร็วกว่าการเปรียบเทียบทางคณิตศาสตร์โดยทั่วไป
  • ขนาดของอินเด็กซ์เล็กกว่า B-Tree index มาก เนื่องจาก Bitmap มีลักษณะการบีบอัดที่สูงมาก ดังนั้นจึงใช้เนื้อที่ในการเก็บอินเด็กซ์เล็กด้วย bitmap index อาจจะมีขนาดเพียงแค่ 1% (1 ใน 100) เทียบกับขนาดของ B-Tree index ก็ได้ แต่อย่างไรก็ตาม การประหยัดเนื้อที่ดิสก์ไม่ควรจะเป็นเหตุผลหลักในการเลือกใช้ bitmap index เพราะยังมีผลกระทบหรือข้อควรพิจารณาอย่างอื่นด้วย

ข้อเสียของ Bitmap Index

  • Bitmap Index จะต้องใช้กำลังการประมวลผลจาก CPU สูงมากหากต้องมีการ insert หรือ update ข้อมูลในตาราง เพราะจะต้องทำการอ่านอินเด็กซ์ นำมา decompress เปลี่ยนแปลงค่าอินเด็กซ์แล้ว compress กลับไปเก็บไว้ในดิสก์อีกครั้ง ดังนั้นจึงไม่เหมาะอย่างยิ่งสำหรับตารางที่มีการเปลี่ยนแปลงข้อมูลบ่อยๆ แต่จะเหมาะสำหรับตารางที่เป็น read-only

เมื่อไหร่ควรจะใช้ Bitmap Index

แนวทางในการพิจารณาว่าควรจะใช้ Bitmap Index แทนที่ B-Tree Index หรือไม่ ประกอบด้วย

  • ตารางนั้นมีการ insert/update ข้อมูลบ่อยเพียงใด หากมีการเปลี่ยนแปลงข้อมูลบ่อยมากๆ อย่างเช่นในระบบที่ทำงานแบบ online real time ที่มีการเปลี่ยนแปลงสถานะของข้อมูลบ่อยๆ การใช้ bitmap index จะส่งผลให้เกิดภาระต่อ CPU ในการ update index สูงกว่า B-Tree Index แต่สำหรับในระบบดาต้าแวร์เฮ้าส์ที่ข้อมูลไม่มีการเปลี่ยนแปลงเลย หรือเปลี่ยนน้อยมากๆ จะเหมาะกับใช้ bitmap index มากกว่า
  • ตารางนั้นมีค่า cardinality มากน้อยเพียงใด ดังที่ได้อธิบายไว้ก่อนหน้านี้แล้ว cardinality ของตารางยิ่งต่ำ ยิ่งเหมาะที่จะทำ bitmap index หาก cardinality ของตารางมีค่าสูงกว่า 1% ก็ไม่ควรทำ bitmap index บนตารางนั้น หากคุณเคยมีประสบการณ์ในการสร้างอินเด็กซ์บน OLTP (Online-Transactional Processing) มาก่อน คงอาจจะสงสัย เพราะหลักเกณฑ์ในการสร้างอินเด็กซ์แตกต่างกัน  ในระบบ OLTP คอลัมน์ที่ควรจะสร้างอินเด็กซ์ ควรจะมี high cardinality อาทิเช่น order id, หรือ row id เป็นต้น เพราะระบบ OLTP สนับสนุนการ insert/update และ delete ข้อมูลเป็นหลัก  ในขณะที่ระบบสนับสนุนการตัดสินใจเช่นดาต้าแวร์เฮ้าส์ ซึ่งเหมาะจะใช้ bitmap index มากกว่า จะเน้นไปที่ความรวดเร็วในการเข้าถึงและเรียกค้นข้อมูล และไม่มีการเปลี่ยนแปลงข้อมูลมากนัก

หวังว่าความรู้เบื้องต้นเกี่ยวกับ bitmap index คงเป็นจุดเริ่มต้นให้ทำความเข้าใจฟีเจอร์ที่มีประโยชน์นี้ได้บ้าง  ใครเคยมีประสบการณ์ในการทำงานกับ bitmap index ก็มาเล่าสู่กันฟังบ้างนะครับ


© 2007 BzInsight | iKon Wordpress Theme by Windows Vista Administration | Powered by Wordpress