บริการแบ็กเอนด์มินิมอลใหม่ที่เรียกว่า Pennybase ได้จุดประกายการอฟองอย่างเร่าร้อนในชุมชนนักพัฒนา ไม่ใช่เพราะสิ่งที่มันรวมเอาไว้ แต่เพราะสิ่งที่มันตั้งใจทิ้งออกไป โปรเจกต์นี้ใช้งาน Backend-as-a-Service ที่สมบูรณ์ในโค้ด Go ไม่ถึง 1,000 บรรทัด แต่การตัดสินใจที่ถกเถียงกันมากที่สุดคือการใช้ไฟล์ CSV แทนฐานข้อมูลแบบดั้งเดิมสำหรับการจัดเก็บข้อมูล
คุณสมบัติหลักของ Pennybase :
- โค้ด Go น้อยกว่า 1,000 บรรทัด
- การจัดเก็บข้อมูลแบบ CSV พร้อมระบบเวอร์ชัน
- REST API ที่ตอบกลับด้วย JSON
- การยืนยันตัวตนผ่าน session cookies และ Basic Auth
- การควบคุมการเข้าถึงตามบทบาท (RBAC)
- การอัปเดตแบบเรียลไทม์ผ่าน Server-Sent Events
- การแสดงผลเทมเพลตด้วย Go templates
- ไม่มีการพึ่งพาภายนอก (ใช้เฉพาะ standard library )
ความขัดแย้งเรื่อง CSV แบ่งแยกความคิดเห็น
การเลือกใช้ไฟล์ CSV ที่มนุษย์อ่านได้ในการจัดเก็บข้อมูลกลายเป็นคุณลักษณะที่ขัดแย้งกันมากที่สุดของโปรเจกต์ นักวิจารณ์โต้แย้งว่าการใช้รูปแบบ CSV ในปี 2025 เป็นสิ่งที่ยอมรับไม่ได้อย่างสิ้นเชิงเมื่อมีตัวเลือกฐานข้อมูลขนาดเล็กอย่าง SQLite อยู่ พวกเขาชี้ให้เห็นถึงความผิดปกติในการแยกวิเคราะห์ CSV ที่มีชื่อเสียง การขาดการจัดทำดัชนีในตัว และความเสี่ยงต่อการเสียหายระหว่างที่ระบบขัดข้อง
อย่างไรก็ตาม ผู้สนับสนุนเน้นย้ำถึงข้อได้เปรียบในทางปฏิบัติที่ฐานข้อมูลแบบดั้งเดิมไม่สามารถเทียบได้ ไฟล์ CSV สามารถเปิดและแก้ไขในแอปพลิเคชันสเปรดชีตใดก็ได้ ทำให้การจัดการข้อมูลเข้าถึงได้สำหรับผู้ใช้ที่ไม่มีความรู้ทางเทคนิค รูปแบบนี้ยังผสานรวมได้อย่างไร้รอยต่อกับระบบควบคุมเวอร์ชันอย่าง Git ช่วยให้นักพัฒนาสามารถติดตามการเปลี่ยนแปลงข้อมูลด้วยเครื่องมือ diff มาตรฐานและขั้นตอนการสำรองข้อมูล
CSV (Comma-Separated Values): รูปแบบไฟล์ง่าย ๆ ที่ข้อมูลถูกจัดเก็บในข้อความธรรมดาโดยมีค่าที่คั่นด้วยเครื่องหมายจุลภาค ใช้กันทั่วไปในสเปรดชีต
การเปรียบเทียบ CSV กับ SQLite:
คุณสมบัติ | ไฟล์ CSV | SQLite |
---|---|---|
อ่านได้โดยมนุษย์ | ✅ ได้ | ❌ ไม่ได้ |
การจัดทำดัชนีในตัว | ❌ ไม่มี | ✅ มี |
การปฏิบัติตาม ACID | ❌ ไม่มี | ✅ มี |
ความต้านทานต่อการเสียหาย | ❌ ต่ำ | ✅ สูง |
การพึ่งพาภายนอก | ✅ ไม่มี | ❌ ต้องใช้ไดรเวอร์ |
การคอมไพล์ข้ามแพลตฟอร์ม | ✅ ง่าย | ❌ ต้องใช้ CGO |
คำถามเรื่องประสิทธิภาพและความสามารถในการขยายตัว
สมาชิกชุมชนได้ตั้งข้อกังวลเกี่ยวกับประสิทธิภาพของ Pennybase เมื่อเทียบกับโซลูชันฐานข้อมูลที่มีชื่อเสียง ระบบใช้แนวทางแบบ append-only ที่การอัปเดตข้อมูลแต่ละครั้งจะสร้างเวอร์ชันใหม่แทนที่จะแก้ไขบันทึกที่มีอยู่ แม้ว่าจะให้ความสามารถในการจัดการเวอร์ชันตามธรรมชาติ แต่อาจนำไปสู่การบวมของไฟล์เมื่อเวลาผ่านไป
โปรเจกต์รักษาดัชนีในหน่วยความจำเพื่อเพิ่มความเร็วในการค้นหาข้อมูล แต่นักพัฒนาตั้งคำถามว่าแนวทางนี้จะขยายตัวได้อย่างไรเกินแอปพลิเคชันขนาดเล็ก สมาชิกชุมชนบางคนรายงานความสำเร็จในการใช้ไฟล์ CSV สำหรับเว็บไซต์คงที่ที่มีบันทึกหลายหมื่นรายการ แม้ว่ากรณีการใช้งานเหล่านี้จะเกี่ยวข้องกับเนื้อหาที่สร้างไว้ล่วงหน้าแทนที่จะเป็นการดำเนินการฐานข้อมูลแบบไดนามิก
Append-only: วิธีการจัดเก็บที่ข้อมูลใหม่จะถูกเพิ่มที่ท้ายไฟล์เสมอ ไม่เคยแก้ไขรายการที่มีอยู่
ข้อกังวลด้านความปลอดภัยและตัวเลือกการใช้งาน
การใช้งานความปลอดภัยของโปรเจกต์ได้รับการวิจารณ์จากนักพัฒนาที่ใส่ใจเรื่องความปลอดภัย Pennybase ใช้การแฮช SHA-256 สำหรับรหัสผ่าน ซึ่งถือว่าไม่เพียงพอสำหรับการจัดเก็บรหัสผ่านสมัยใหม่เนื่องจากความเร็ว มาตรฐานอุตสาหกรรมแนะนำอัลกอริทึมการแฮชที่ช้ากว่าอย่าง bcrypt ที่ทำให้การโจมตีแบบ brute-force ยากขึ้น
ผู้เขียนยอมรับข้อจำกัดนี้ โดยอธิบายว่าการเลือกนี้เกิดจากเป้าหมายของโปรเจกต์ในการใช้เฉพาะไลบรารีมาตรฐานของ Go โดยไม่มีการพึ่งพาภายนอก ข้อจำกัดนี้ยังมีอิทธิพลต่อการตัดสินใจเรื่อง CSV เนื่องจากการรวม SQLite จะต้องมีการพึ่งพาเพิ่มเติมและทำให้การคอมไพล์ข้ามแพลตฟอร์มซับซ้อนขึ้น
ปรัชญามินิมอลิซึม
แม้จะมีการวิจารณ์ แต่ Pennybase แสดงให้เห็นการทดลองที่น่าสนใจในมินิมอลิซึมแบบสุดขั้ว ระบบทั้งหมดใช้โค้ดไม่ถึง 1,000 บรรทัดและสามารถจัดการได้โดยใช้เครื่องมือแก้ไขข้อความพื้นฐาน แนวทางนี้ดึงดูดนักพัฒนาที่ให้ความสำคัญกับความเรียบง่ายและต้องการเข้าใจทุกส่วนประกอบของสแต็กของพวกเขา
ผู้เขียนโปรเจกต์วางตำแหน่งให้เป็นการออกกำลังกายเพื่อการศึกษาแทนที่จะเป็นโซลูชันที่พร้อมใช้งานจริง ออกแบบมาเพื่อสำรวจว่าแบ็กเอนด์ที่ใช้งานได้จะมีขนาดเล็กที่สุดได้แค่ไหน บริบทนี้ช่วยอธิบายตัวเลือกที่ไม่เป็นไปตามแบบแผนบางอย่างที่ให้ความสำคัญกับความเรียบง่ายมากกว่าประสิทธิภาพหรือความปลอดภัย
การถกเถียงรอบ ๆ Pennybase สะท้อนให้เห็นความตึงเครียดที่กว้างขึ้นในการพัฒนาซอฟต์แวร์ระหว่างมินิมอลิซึมและความแข็งแกร่ง แม้ว่าการจัดเก็บ CSV อาจดูดั้งเดิมสำหรับนักพัฒนาบางคน แต่มันแสดงให้เห็นว่าข้อจำกัดเชิงสร้างสรรค์สามารถนำไปสู่การทดลองทางสถาปัตยกรรมที่น่าสนใจได้อย่างไร แม้ว่าจะไม่เหมาะสำหรับทุกกรณีการใช้งาน
อ้างอิง: Pennybase