‹

08 · ฐานข้อมูล

08 · ​ฐานข้อมูล

​ชั้นนี้​เปลี่ยน​พื้นที่​เก็บ​ข้อมูล (storage) ​ให้​กลายเป็น​ความจำ — ​คั่น​ระหว่าง​ความคงอยู่​ของ​ข้อมูล (persistence) ​แบบ​ดิบ​ด้านล่าง ​กับ​ทุก​แอปพลิเคชัน​ด้านบน​ที่​ต้อง​ได้รับ​ความจริง

​อารยธรรม​จดจำ​สิ่ง​ต่างๆ ​ได้​อย่าง​น่าเชื่อถือ​ได้​อย่างไร

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

​นัก​คณิตศาสตร์​ของ IBM ​ที่ San Jose Research Laboratory ​ตีพิมพ์​เปเปอร์​ที่​ประโยค​แรก​คือ​คำประกาศ​อิสรภาพ: "​ผู้ใช้​ธนาคาร​ข้อมูลขนาดใหญ่​ในอนาคต​ต้อง​ได้รับ​การปกป้อง​จาก​การต้อง​รู้​ว่า​ข้อมูล​ถูก​จัดระเบียบ​อย่างไร​ใน​เครื่อง (internal representation)" ("Future users of large data banks must be protected from having to know how the data is organized in the machine (the internal representation)") (Codd, CACM 13(6), 1970) Edgar Codd ​เสนอ​ให้​มอง​ข้อมูล​เป็น relations — ​เซต​ทาง​คณิตศาสตร์​ของ tuple ​ไม่​มี​ลำดับ ​ไม่​มี pointer ​ไม่​มี​ร่องรอย​ทางกายภาพ​ของ​ดิสก์​เหลืออยู่​เลย ​ผู้ใช้​เห็น​ตาราง ​ส่วน​ตาราง​ประกอบ​ขึ้น​จาก​อะไร​ไม่​ใช่​เรื่อง​ของ​ใคร​นอกจาก​ระบบ​เอง

​นามธรรม (abstraction) ​ที่​ชั้นนี้​ขาย​คือ​สิ่ง​นั้น ​และ​ชื่อ​ของ​มัน​คือ data independence ​ทุกอย่าง​ที่​เหลือ​ใน​บท​นี้​มี​อยู่​เพื่อ​ทำให้​มัน​มี​ต้นทุน​ที่​จ่าย​ไหว

​ราคา​ของ​มัน​สูง ​เพราะ​คำถาม​ที่​เขียน​เทียบ​กับ​ตาราง​ใน​อุดมคติ​ไม่​ได้​บอก​แผนการ​ทำงาน​อะไร​กับ​เครื่อง​เลย Codd ​เห็นผล​ที่​ตามมา​และ​พูด​ไว้​ชัด​ว่า ​พลัง​ของ​ภาษา​คิว​รี (query) ​แบบนี้ "​อยู่​ที่​ความสามารถ​ใน​การบรรยาย (​ไม่​ใช่​ความสามารถ​ใน​การคำนวณ)" — ​คุณ​บรรยาย​คำตอบ​ที่​ต้องการ ​ไม่​ใช่​เส้นทาง​ไปหา​มัน ​เส้นทาง​นั้น​ยัง​ต้อง​มี​ใคร​สัก​คน​จัดหา​ให้​อยู่ดี ​คน​นั้น​กลายเป็น query optimizer ​เทคนิค​ที่​ทำให้​มัน​ทำงาน​ได้​ตีพิมพ์​โดย​กลุ่ม​ของ Pat Selinger ​ใน​ปี 1979 ​จาก​ต้นแบบ System R ​ของ IBM: ​ไล่​ดู​เส้นทาง​การเข้าถึง​ข้อมูล​ที่​เป็นไปได้ ​ประเมิน​ต้นทุน​ของ​แต่ละ​เส้นทาง​จาก​สถิติ​ของ​ข้อมูล ​เลือก​เส้นทาง​ที่​ถูกที่​สุด (Selinger et al., SIGMOD 1979) ​ไอเดีย​ที่​ดู​ไม่​หวือหวา ​แต่​ผล​ของ​มัน​ใหญ่ — ​นักวิเคราะห์​ยุค​นี้​เขียน SQL ​เก้า​บรรทัด​บน​ข้อมูล​พัน​ล้าน​แถว​แล้ว​ได้​คำตอบ ​ในขณะที่​การไล่​ค้น​ด้วยมือ​แบบ​เทียบเท่า​กัน​กินเวลา​เป็น​สัปดาห์​และ​ยัง​ผิด System R ​ให้กำเนิด​ภาษา​ด้วย: SEQUEL ​ของ Donald Chamberlin ​กับ Raymond Boyce ​ใน​ปี 1974 (SIGFIDET workshop) ​ภายหลัง​เปลี่ยน​ชื่อ​เป็น SQL ​เพราะ​บริษัท​อื่น​ถือ​เครื่องหมายการค้า​ของ​คำ​นั้น​ไป​ก่อน

​สิ่ง​ที่สอง​ที่​ชั้นนี้​ซ่อน​ไว้​คือ ​ความล้มเหลว (failure) ​ไฟ​ดับ​กลางคัน​ขณะ​เขียน​ข้อมูล ​เสมียน​สอง​คน​ขาย​ที่นั่ง​เดียวกัน ​ดิสก์​คืน​หน้า​ข้อมูล​ของ​วัน​อังคาร​ที่แล้ว​กลับมา ​สิ่ง​ที่​ยื่น​ให้​แทน​คือ ​ทรานแซกชัน (transaction): ​กลุ่ม​ของ​การปฏิบัติ​การที่เกิด​ขึ้น​ทั้งหมด​หรือไม่​เกิด​เลย ​ทำงาน​ราวกับ​ไม่​มี​ใคร​อื่น​ทำงาน​อยู่​พร้อมกัน ​และ​เมื่อ​ยืนยัน​แล้ว​ไม่​มี​วัน​สูญหาย Jim Gray ​วาง​การรับประกัน​เหล่านี้​ไว้​ใน​ปี 1981 (The Transaction Concept, VLDB) ​ส่วน Theo Härder ​กับ Andreas Reuter ​ตั้งชื่อ​ย่อ​ที่​ทุกคน​ท่อง​กัน​จนถึง​วันนี้ — atomicity, consistency, isolation, durability — ​ใน​งาน​สำรวจ​ปี 1983 ​ที่​ยก​เครดิต​เนื้อหา​ให้ Gray (ACM Computing Surveys 15(4)) ​ทรานแซกชัน​คือ​อะไร​กัน​แน่: ​ไม่​ใช่​กลไก​หลีกเลี่ยง​ความล้มเหลว ​แต่​เป็น ​สัญญา​ว่าความ​ล้มเหลว​ได้รับอนุญาต​ให้​มีหน้า​ตา​แบบ​ไหน​เมื่อ​มอง​จาก​ด้านบน ​กลไก​ด้านล่าง​พัง​อยู่​ตลอดเวลา ​ผิว (surface) ​ที่​มัน​ยื่น​ให้​ยอมรับ​ผลลัพธ์​แค่​สอง​แบบ

​กลไก​ที่​ส่งมอบ​สัญญา​นั้น​คือ log ​และ​เป็น​ไอเดีย​ที่​เข้าใจยาก​ที่สุด​ใน​ชั้นนี้ ​ความทนทาน (durability) ​ไม่​ได้มา​จาก​การเขียน​ข้อมูล​อย่าง​ระมัดระวัง ​แต่​มาจาก​การเขียน ​เจตนา ​ก่อน ​เรียง​เป็นลำดับ ​ลง​ไฟล์​ที่​มี​แต่​การต่อท้าย (append) ​เท่านั้น ​ค่อย​ไป​แตะ​หน้า​ข้อมูลจริง​เมื่อไหร่​ก็ได้​ที่​สะดวก ​ถ้า​เครื่อง​ตาย ​การกู้​คืน​อ่าน log ​แล้ว​เล่น​ประวัติศาสตร์​ซ้ำ: ​ทำ​สิ่ง​ที่ commit ​แล้ว​ซ้ำ​อีกครั้ง (redo) ​ย้อน​สิ่ง​ที่​ยัง​ไม่ commit ​กลับ (undo) ​แนวทาง​มาตรฐาน​คือ ARIES (Mohan et al., ACM TODS 17(1), 1992) ​และ​แพตเทิร์น​นี้​หลุด​ออกจาก​ฐานข้อมูล​ไป​นาน​แล้ว — filesystem ​ทำ journal, message queue ​ก็​คือ log ​ที่​สวมหน้ากาก​คนละ​แบบ ​และ​การทำสำเนา (replication) ​ใน​บท​ที่ 10 ​ก็​คือ​เครื่อง​หนึ่ง​อ่าน log ​ของ​อีก​เครื่อง​หนึ่ง ​หัวใจ​จริง​ของ​ฐานข้อมูล​ไม่​ใช่​ตาราง ​แต่​คือ​บันทึก​แบบ​ต่อท้าย​อย่าง​เดียว (append-only) ​ของ​สิ่ง​ที่​มัน​ถูก​สั่ง​ให้​ทำ

​จุด​เดียว​ที่​โลก​ทางกายภาพ​ได้รับอนุญาต​ให้​โผล่​ผ่าน​มา​คือ ​ดัชนี (index) ​และ​ฮาร์ดแวร์​ที่อยู่​สองชั้น​ด้านล่าง​เป็นตัว​กำหนด​รูปทรง​ของ​มัน B-tree ​ของ Rudolf Bayer ​กับ Edward McCreight ​จาก​รายงาน​ของ Boeing ​ปี 1970 ​และ Acta Informatica ​ปี 1972 (Bayer & McCreight) ​กว้าง​และ​ตื้น​โดยตั้งใจ — ​แต่ละ​โหนด​มีลูก​ได้​เป็น​ร้อย ​หนึ่ง​โหนด​เต็ม​พอดี​หนึ่ง​หน้า​ดิสก์ ​การค้นหา​ท่ามกลาง​ข้อมูล​นับ​พัน​ล้าน​แถว​จึง​เสีย​แค่​สาม​หรือ​สี่​ครั้ง​ใน​การดึง​ข้อมูล ​แทนที่จะ​เป็น​สามสิบ​ครั้ง ​นี่​คือ​ข้อแลกเปลี่ยน (trade-off) ​ของ​บท​ที่ 02 ​ที่​จ่าย​กัน​ใน​ระดับ​อุตสาหกรรม: ​สร้าง​โครงสร้าง​ไว้​ตอนนี้ ​ทั้ง​พื้นที่​และ​ต้นทุน​การเขียน ​เพื่อให้​คำถาม​ในอนาคต​ถูก​ลง ​และ​นี่​คือ​จุด​ที่ abstraction ​รั่ว ​คิว​รี (query) ​สอง​ตัว​ที่​เหมือนกัน​ทุกอย่าง​ใน​เชิง​ตรรกะ ​ใช้เวลา​ต่างกัน​ได้​ถึง​สี่​ระดับ​ขนาด (order of magnitude) ​เพราะ​ตัว​หนึ่ง​มี index ​อีก​ตัว​ไม่​มี — ​ผิว (surface) ​บอก​แค่ ​อะไร ​แต่​บิล​คิด​เป็น ​อย่างไร

​คนใน​เรื่อง​นี้​คุ้มค่า​ที่จะ​แวะ​ดู​สักครู่ ​นายจ้าง​ของ Codd ​เอง​ช้า​ที่จะ​สร้าง​สิ่ง​ที่​เขา​บรรยาย​ไว้ ​เพราะ​มีเงิน​ลงทุน​ก้อน​ใหญ่​ที่​ยัง​ทำกำไร​อยู่​ใน​ระบบ hierarchical ​รุ่นเก่า​ที่​มัน​จะ​เข้ามา​แทนที่ (Wade & Chamberlin, IEEE Annals, 2012) ​แบบจำลอง​เชิง​สัมพันธ์ (relational model) ​ไป​ถึง​มือ​ลูกค้า​ส่วนหนึ่ง​ผ่าน​คนอื่น ​และ Codd ​ได้รับ​รางวัล Turing Award ​ใน​ปี 1981 ​จาก​เปเปอร์​ที่​บริษัท​ของ​เขา​เอง​เถียง​ค้าน​มา​นาน​นับ​สิบ​ปี (ACM)

​เรื่อง​เดิน​มาถึง​ช่วง​ที่​สัญญา​นั้น​คลายตัว ​ราว​ปี 2006–2007 ​ระบบ​สอง​ตัว​ที่​สร้าง​มา​เพื่อ​สเกล​ที่​สัญญา​เชิง​สัมพันธ์​ไป​ไม่​ถึง​ถูก​ตีพิมพ์ — Bigtable ​ของ Google (OSDI 2006) ​กับ Dynamo ​ของ Amazon (SOSP 2007) — ​และ​ใน​เดือน​มิถุนายน 2009 ​งาน meetup ​ที่ San Francisco ​ตั้งชื่อ​ให้​ขบวนการ​นี้ ​ชื่อ​ที่​มัน​จะ​ต้อง​มา​นั่ง​เสียใจ​ไป​อีก​สิบ​ปี: NoSQL ​ข้อแลกเปลี่ยน​ถูก​พูด​ออกมา​ตรงๆ: ​ยอม​ไม่​มี join ​ยอม​ไม่​มี​ทรานแซกชัน (transaction) ​ที่​แข็งแรง​ข้าม​เครื่อง ​แล้ว​เอา​สิ่ง​ที่​ยอม​แลก​ไป​ซื้อ​สเกล​แนวนอน ​สิ่ง​ที่เกิด​ขึ้น​ต่อมา​คือ​ส่วน​ที่​น่าสนใจ ​พอ​ขาย​การรับประกัน​เหล่านั้น​ไป​แล้ว ​วงการ​ก็​ค้นพบ​ว่า​ต้อง​เขียน​โค้ด​ใน​แอปพลิเคชัน​มาก​แค่​ไหน​ถึง​จะ​ปลอม​มัน​ขึ้น​มา​ใหม่​ได้ ​และ​ระบบ​พวก​นี้​ส่วนใหญ่​ก็​งอก​ทรานแซกชัน​กับ​ภาษา​คิว​รี​กลับคืน​มา​ตั้งแต่​นั้น ​บท​ที่ 10 ​อธิบาย​ว่า​ทำไม​การรับประกัน​เหล่านี้​ถึง​แพง​ตั้งแต่แรก — ​และ​ทำไม​มัน​จะ​ไม่​มี​วัน​ฟรี ​เมื่อ​ข้อมูล​อยู่​บน​เครื่อง​มากกว่า​หนึ่ง​เครื่อง

​เชื่อมโยง

​ด้านล่าง: ​บท​ที่ 04 ​ให้​ลำดับชั้น​หน่วยความจำ (memory hierarchy) ​ที่​กำหนด​รูปทรง​ของ B-tree ​ส่วน​บท​ที่ 05 ​ให้​ไฟล์ ​โพรเซส (process) ​และ​ปัญหา crash consistency ​มา​ใน​รูป​ดิบๆ — ​ฐานข้อมูล​คือ​สิ่ง​ที่เกิด​ขึ้น​เมื่อ​โปรแกรม​หนึ่ง​รับหน้าที่​เหล่านั้น​มาจาก​ระบบปฏิบัติการ​แล้ว​ทำ​มัน​อย่าง​ถูกต้อง​จริงจัง ​บท​ที่ 02 ​เป็นเจ้าของ​โครงสร้าง​ข้อมูล ​บท​ที่ 03 ​อธิบาย​ว่า​ทำไม​คอลัมน์​ที่​บีบ​อัด​แล้ว​กับ​หน้า​ข้อมูล​ที่​เข้ารหัส​แล้ว​ถึง​ทำงาน​ได้​ตั้งแต่แรก ​ด้านบน: ​บท​ที่ 07 ​อยู่​ที่นี่​ถาวร ​เพราะสคี​มา (schema) ​คือ​สิ่ง​ที่​แก้​ยาก​ที่สุด​ใน​ระบบ​ใดๆ ​ก็ตาม ​บท​ที่ 09 ​พา client ​ข้าม​เครือข่าย​ไป ​บท​ที่ 10 ​ถาม​ว่าการ​รับประกัน​เหล่านี้​เหลือ​อะไร​อยู่​บ้าง ​เมื่อ​เครื่อง​จริงๆ ​แล้ว​คือ​เครื่อง​หลาย​เครื่อง

​คำถาม​ที่​ยัง​เปิด​อยู่

​แบบจำลอง​เชิง​สัมพันธ์ (relational model) ​เป็น​ชั้น​ถาวร ​หรือ​เป็น​แค่​จุดสูงสุด​เฉพาะที่ (local maximum) ​ที่อยู่​มา​ได้​ห้าสิบ​ปี ​ผู้วิจารณ์​ประกาศ​ว่า​มัน​ล้าสมัย​มา​แล้ว​สอง​ครั้ง — ​เรื่อง object ​ใน​ทศวรรษ 1990 ​เรื่อง​สเกล​ใน​ทศวรรษ 2000 — ​และ​มัน​กลืน​คู่แข่ง​เข้าไป​ได้​ทั้งสอง​ครั้ง ​ข้อ​สอง: query optimizer ​ตอนนี้​เป็น​ส่วนประกอบ​ที่​คาดเดา​ไม่​ได้มาก​ที่สุด​ใน​ระบบ​ส่วนใหญ่ ​เลือก​ผิดพลาด​ร้ายแรง​ได้​จาก​สถิติ​ที่​ล้าสมัย optimizer ​ที่​เรียนรู้​ได้ (learned optimizer) ​เป็นแนว​รบ​วิจัย​ที่​กำลัง​คึกคัก ​แต่​โมเดล​ที่​ประเมิน​ผิด​ดีบั๊ก​ยาก​กว่า​สูตร​ที่​ประเมิน​ผิด ​ข้อ​สาม ​และ​ยัง​ไม่​ลงตัว​ที่สุด: log ​คือ​ส่วนประกอบ​เดียว​ที่​ระบบข้อมูล​สมัยใหม่​ทุก​ตัว​มา​บรรจบ​กัน ​ถ้า storage, queue, replication ​และ stream processing ​ล้วน​เป็น log ​อยู่​ข้างใต้ "​ฐานข้อมูล" ​ยัง​เป็น​หน่วย​คิด​ที่​ถูกต้อง​อยู่​หรือเปล่า ​หรือว่า log ​ต่างหาก​ที่​เป็น​ชั้น ​ส่วน​ฐานข้อมูล​เป็น​แค่​มุมมอง​หนึ่ง​ที่​สร้าง​ซ้อน​อยู่​ข้างบน

​อ่าน​ต่อ

บทถัดไป · 10 / 1609 · เครือข่าย
Size
Page
Font

The Tower of Abstractions — An Encyclopedia of the Computing Disciplines

❦
100 · แผนที่201 · ทฤษฎีการคำนวณ302 · อัลกอริทึมและโครงสร้างข้อมูล403 · สารสนเทศและการเข้ารหัส504 · สถาปัตยกรรมคอมพิวเตอร์605 · ระบบปฏิบัติการ706 · ภาษาและคอมไพเลอร์807 · วิศวกรรมซอฟต์แวร์908 · ฐานข้อมูล1009 · เครือข่าย1110 · ระบบกระจาย1211 · ความปลอดภัยและวิทยาการรหัสลับ1312 · ปัญญาประดิษฐ์และการเรียนรู้ของเครื่อง1413 · ปฏิสัมพันธ์มนุษย์–คอมพิวเตอร์ และกราฟิกส์1514 · พรมแดน1699 · ปิดเล่ม — หอคอยเมื่อมองทั้งหลัง