/dev/null ทิ้งข้อมูลนำเข้าทั้งหมดทันที แต่ถูกอธิบายเชิงเสียดสีว่าเป็นระบบที่สอดคล้องกับ คุณสมบัติ ACID ของทรานแซกชัน อย่างสมบูรณ์
- ในแง่ของ Atomicity ข้อมูลจะไม่ถูกเขียนเพียงบางส่วน แต่จะหายไปทั้งหมดหรือไม่ถูกเขียนเลย
- ในด้าน Consistency มันคงสถานะว่างเปล่าไว้เสมอ จึงไม่ทำให้เงื่อนไขคงตัวของระบบเสียหาย
- สำหรับ Isolation แม้หลายโปรเซสจะเข้าถึงพร้อมกันก็ไม่รบกวนกัน และเนื่องจากไม่มีการจัดเก็บจริงจึงไม่เกิดคอนฟลิกต์
- ส่วน Durability ก็สมบูรณ์แบบในแง่ที่หลังรีบูตแล้วก็ยังคงเป็น ‘ไม่มีอะไรเลย’ เหมือนเดิม โดยมีข้อจำกัดเดียวที่ถูกกล่าวแบบขำ ๆ คือ พื้นที่จัดเก็บ 0 ไบต์
วิเคราะห์คุณสมบัติ ACID ของ /dev/null
/dev/null คือ ไฟล์พิเศษที่รับข้อมูลเข้าทั้งหมดแล้วทิ้งทันที ซึ่งมักใช้เป็น data sink ในระบบ Linux และตระกูล Unix
- ผู้เขียนเปรียบมันแบบขำ ๆ ว่าเป็นฐานข้อมูลระดับ “Web Scale” และนำคุณสมบัติหลักของฐานข้อมูลอย่าง ACID มาประยุกต์เชิงเสียดสี
- ผลลัพธ์คือ
/dev/null มีเสถียรภาพอย่างสมบูรณ์ แต่ก็แสดงให้เห็นถึง ความเรียบง่ายสุดขั้ว เพราะมันไม่เก็บข้อมูลใด ๆ เลย
Atomicity — ความเป็นอะตอม
- เมื่อเขียนข้อมูลลง
/dev/null ข้อมูลจะ หายไปทั้งหมดหรือไม่ถูกเขียนเลย โดยไม่มีการเขียนบางส่วน
- สิ่งนี้ทำงานเหมือนหลัก “ทั้งหมดหรือไม่มีเลย (all or nothing)” ของทรานแซกชัน
- ดังนั้น
/dev/null จึงรับประกันความเป็นอะตอมได้อย่างสมบูรณ์ โดยไม่มี ความล้มเหลวบางส่วนหรือการเปลี่ยนสถานะที่ไม่สมบูรณ์
Consistency — ความสอดคล้อง
/dev/null คงสถานะ ว่างเปล่าอยู่เสมอ และไม่มีข้อมูลนำเข้าใดทำลายเงื่อนไขคงตัวนี้ได้
- แม้จะมีการเขียนข้อมูล ข้อมูลนั้นก็ถูกทิ้งทันที ทำให้ระบบเปลี่ยนผ่านไปสู่สถานะที่ถูกต้องเสมอ
- ผลลัพธ์คือ invariant ที่ว่า “ในไฟล์ไม่มีอะไรอยู่เลย” ยังคงเป็นจริงตลอดเวลา
Isolation — การแยกจากกัน
- แม้หลายโปรเซสจะเขียนข้อมูลลง
/dev/null พร้อมกัน ก็ ไม่เกิดการชนกันหรือการรบกวนกัน
- เพราะไม่มีการจัดเก็บจริง จึงไม่มีผลกระทบระหว่างทรานแซกชันเลย
- นี่คือการทำ Isolation ในอุดมคติที่รับประกันผลลัพธ์สม่ำเสมอได้แม้ใน สภาพแวดล้อมแบบประมวลผลขนานอย่างสมบูรณ์
Durability — ความคงทนถาวร
/dev/null ทำการ commit ข้อมูลในรูปแบบ “ไม่มีอะไรเลยอย่างถาวร”
- แม้ระบบจะล่มหรือรีบูต สถานะของ
/dev/null ก็ไม่เปลี่ยนแปลง
- กล่าวคือ มันรับประกัน ความคงทนถาวรของ ‘ความว่างเปล่า’ ได้อย่างสมบูรณ์
ข้อจำกัดและบทสรุปเชิงขำขัน
- ผู้เขียนชี้ว่าปัญหาเดียวของ
/dev/null คือ “พื้นที่จัดเก็บ 0 ไบต์”
- ถ้าต้องการพื้นที่มากกว่านี้ ให้ติดต่อ “ทีมขายองค์กร (ซึ่งจริง ๆ ก็คือตัวผู้เขียนเอง)” เป็นมุกปิดท้าย
- นี่เป็นการเสียดสี แนวปฏิบัติการตลาดเกินจริงของวงการ IT ที่มักรายล้อมเรื่องความจุและประสิทธิภาพของฐานข้อมูล
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
ดูกระทู้ HN เก่าได้ที่นี่
fastjsonไว้ด้วย (ลิงก์ GitHub)/dev/nullเป็น DB แบบที่ไม่มีใครรู้ และใช้ nocode เป็นแบ็กเอนด์/dev/nullก็ไม่เคยมีปัญหาเกี่ยวกับผู้ใช้อีกเลยแม้แต่ครั้งเดียวการที่
/dev/nullตรงตาม ACID ก็เหมือนคำตอบเชิงปริยายของฐานข้อมูลถึงอย่างนั้นก็เป็นบทความที่ดีในการเตือนว่าแนวคิดอย่าง ACID ไม่ได้ดำรงอยู่ในสุญญากาศ (ลิงก์อ้างอิง)
/dev/null/dev/nullเพื่อจุดประสงค์แบบนี้จริง ๆใช้ตอนที่เอาต์พุตต้องถูกส่งไปที่ไหนสักแห่ง แต่ไม่อยากสนใจว่าที่นั่นจะรับไหวไหม
พอถึงขั้นดีพลอยก็แค่สลับไปใช้สโตร์ที่ผ่านการตรวจสอบแล้ว
/dev/nullก็เหมือน คำสั่งtrueของโลกแห่งสโตเรจ/dev/nullกับtrueนี่ติดอันดับต้น ๆ ของความปลอดบั๊กเลย/dev/nullมีทั้ง ความสอดคล้องแบบทันทีทันใด พร้อมใช้งานเสมอ และมี partition tolerance อย่างสมบูรณ์เป็น DB เดียวที่ยังคง CAP ได้ครบถ้วนแม้จะขยายไปเป็นจำนวนโหนดไม่สิ้นสุด
/dev/null0กับ/dev/null1ตามนโยบายเวลาเสียก็อัปเดต symbolic link ด้วยมือ และถ้าไม่ผ่านการตรวจสอบ sarbox ก็ห้ามใช้ในโปรดักชัน
/devไม่ได้ถูก mount/dev/nullนั้น serializable ตามนิยามเชิงวิชาการหลายแบบ แต่ไม่ใช่ strict serializableคุณสามารถทำให้การอ่านทั้งหมดเกิดขึ้นที่เวลา 0 วินาทีแล้วคืนผลลัพธ์ว่าง ส่วนการเขียนก็ทิ้งไปทันทีเมื่อเกิดขึ้น
ประเด็นคือคุณต้องบังคับใช้ การรับประกันแบบ real-time
ระบบ
/dev/nullมี สถานะเดียวเท่านั้น/dev/nullจะเป็น web scale หรือเปล่า/dev/nullสามารถรันเว็บอย่าง zombo.com ได้ด้วยดูได้ที่ supersimplestorageservice.com และ
บน HN เมื่อก่อนก็มีการคุยกันหลายรอบเหมือนกัน (ลิงก์ค้นหา)
/dev/nullว่างเปล่าเสมอ แต่จริง ๆ แล้ว **