ฉันมีแอปพลิเคชั่นที่สร้างการสนทนาที่ค่อนข้างร้อนแรงระหว่างนักพัฒนาสองคน
โดยทั่วไปจะแบ่งเป็นเลเยอร์เว็บและเลเยอร์แบ็กเอนด์ เลเยอร์เว็บรวบรวมข้อมูลโดยแบบฟอร์มเว็บอย่างง่ายหยุดข้อมูลนี้เป็นเอกสาร JSON (แท้จริงไฟล์. json) ลงในโฟลเดอร์เฝ้าดูที่ใช้โดยส่วนหลัง ส่วนหลังทำการสำรวจโฟลเดอร์นี้ทุกสองสามวินาทีหยิบไฟล์ขึ้นมาและทำหน้าที่ของมัน
ตัวไฟล์เองนั้นง่ายมาก (เช่นข้อมูลสตริงทั้งหมด, ไม่มีการซ้อน), และประมาณ 1-2k ที่ใหญ่ที่สุด, โดยระบบใช้เวลาส่วนใหญ่ในการใช้งาน (แต่การกระจายข้อความสูงสุด 100 ข้อความในเวลาใดก็ตาม) ขั้นตอนการประมวลผลส่วนหลังใช้เวลาประมาณ 10 นาทีต่อข้อความ
ข้อโต้แย้งเกิดขึ้นเมื่อผู้พัฒนารายหนึ่งแนะนำว่าการใช้ระบบไฟล์เป็นเลเยอร์การส่งข้อความเป็นวิธีแก้ปัญหาที่ไม่ดีเมื่อบางสิ่งเช่นฐานข้อมูลเชิงสัมพันธ์ (MySQL), ฐานข้อมูล noSQL (Redis) หรือแม้แต่การเรียก REST API ธรรมดาควรใช้แทน
ควรสังเกตว่า Redis ถูกใช้ที่อื่นในองค์กรสำหรับการจัดการข้อความที่อยู่ในคิว
ข้อโต้แย้งที่ฉันได้ยินแตกออกเป็นดังนี้
ในความโปรดปรานของไฟล์แบน:
ไฟล์แบบเรียบมีความน่าเชื่อถือมากกว่าโซลูชันอื่น ๆ เนื่องจากไฟล์จะถูกย้ายจากโฟลเดอร์ "เฝ้าดู" ไปยังโฟลเดอร์ "กำลังดำเนินการ" หลังจากที่รับแล้วและท้ายที่สุดไปยังโฟลเดอร์ "เสร็จสิ้น" เมื่อเสร็จสิ้น ไม่มีความเสี่ยงของข้อความที่จะหายไปยกเว้นข้อผิดพลาดในระดับต่ำมากซึ่งจะทำลายสิ่งอื่น ๆ อย่างไรก็ตาม
ไฟล์แบบแฟลตต้องการความซับซ้อนทางเทคนิคที่น้อยกว่าในการทำความเข้าใจ - เพียงแค่
cat
มัน ไม่มีข้อสงสัยในการเขียนไม่มีความเสี่ยงในการเปิดข้อความโดยไม่ตั้งใจและทำให้ข้อความหายไปตลอดกาลรหัสการจัดการไฟล์นั้นง่ายกว่า API ฐานข้อมูลจากมุมมองการเขียนโปรแกรมเนื่องจากเป็นส่วนหนึ่งของไลบรารีมาตรฐานของทุกภาษา สิ่งนี้จะช่วยลดความซับซ้อนโดยรวมของฐานรหัสและจำนวนรหัสบุคคลที่สามที่ต้องนำเข้ามา
หลักการ YAGNIรัฐว่าไฟล์แบนทำงานได้ดีในขณะนี้มีไม่แสดงให้เห็นถึงความจำเป็นในการเปลี่ยนไปเป็นวิธีการแก้ปัญหาที่มีความซับซ้อนมากขึ้นดังนั้นปล่อยให้มัน
ในความโปรดปรานของฐานข้อมูล:
ง่ายต่อการปรับขนาดฐานข้อมูลมากกว่าไดเรกทอรีที่เต็มไปด้วยไฟล์
ไฟล์แบบแฟลตมีความเสี่ยงที่จะมีคนคัดลอกไฟล์ "เสร็จสิ้น" กลับไปยังไดเรกทอรี "ดู" เนื่องจากลักษณะของแอปพลิเคชั่นนี้ (การจัดการเครื่องเสมือน) อาจทำให้ข้อมูลสูญหายอย่างรุนแรง
ต้องการความซับซ้อนทางเทคนิคเพิ่มเติมสำหรับ T / S แอปหมายความว่าพนักงานที่ไม่มีการศึกษามีโอกาสน้อยที่จะพลาดอะไรบางอย่าง
รหัสการเชื่อมต่อฐานข้อมูลโดยเฉพาะอย่างยิ่งสำหรับ Redis อย่างน้อยก็มีความทนทานเท่ากับฟังก์ชั่นการจัดการไฟล์ไลบรารีมาตรฐาน
รหัสการเชื่อมต่อฐานข้อมูลมองเห็นได้ชัดเจน (ถ้าไม่สามารถใช้งานได้) ง่ายกว่าจากจุดยืนของนักพัฒนาเนื่องจากระดับที่สูงกว่าการจัดการไฟล์
จากสิ่งที่ฉันเห็นนักพัฒนาทั้งสองมีคะแนนที่ถูกต้องมากมาย
ดังนั้นในสองคนนี้คือ pro-files dev หรือ pro-database dev ซึ่งเป็นหนึ่งในแนวปฏิบัติที่ดีที่สุดสำหรับวิศวกรรมซอฟต์แวร์และทำไม?