ฉันมีเครื่องเสมือน (Debian) ทำงานบนโฮสต์เครื่องจริง เครื่องเสมือนทำหน้าที่เป็นบัฟเฟอร์สำหรับข้อมูลที่ได้รับบ่อยผ่านเครือข่ายท้องถิ่น (ระยะเวลาสำหรับข้อมูลนี้คือ 0.5 วินาทีดังนั้นปริมาณงานที่ค่อนข้างสูง) ข้อมูลใด ๆ ที่ได้รับจะถูกเก็บไว้ในเครื่องเสมือนและส่งต่อไปยังเซิร์ฟเวอร์ภายนอกผ่าน UDP ซ้ำ ๆ เมื่อเซิร์ฟเวอร์ภายนอกยอมรับ (เกิน UDP) ว่าได้รับแพ็กเก็ตข้อมูลข้อมูลดั้งเดิมจะถูกลบออกจากเครื่องเสมือนและไม่ได้ส่งไปยังเซิร์ฟเวอร์ภายนอกอีกครั้ง การเชื่อมต่ออินเทอร์เน็ตที่เชื่อมต่อ VM และเซิร์ฟเวอร์ภายนอกไม่น่าเชื่อถือซึ่งหมายความว่าอาจหยุดให้บริการหลายครั้งต่อวัน
เครื่องทางกายภาพที่โฮสต์ VM ได้รับการตัดไฟหลายครั้งต่อวันโดยการสุ่ม ไม่มีวิธีที่จะบอกได้ว่าเกิดเหตุการณ์นี้ขึ้นเมื่อใดและไม่สามารถเพิ่ม UPS แบตเตอรี่หรือโซลูชันที่คล้ายกันในระบบ
เริ่มแรกข้อมูลถูกจัดเก็บในฐานข้อมูล HSQLDB แบบอิงไฟล์บนเครื่องเสมือน อย่างไรก็ตามการตัดไฟบ่อยครั้งในที่สุดทำให้ไฟล์สคริปต์ฐานข้อมูลเสียหาย (ไม่ใช่ระดับระบบไฟล์นั่นคือสามารถอ่านได้ แต่ HSQLDB ไม่สามารถเข้าใจได้) ซึ่งนำไปสู่คำถามของฉัน:
ข้อมูลควรถูกจัดเก็บในสภาพแวดล้อมที่การตัดกระแสไฟฟ้าสามารถเกิดขึ้นบ่อยครั้งได้อย่างไร?
ทางเลือกหนึ่งที่ฉันนึกได้คือการใช้ไฟล์แฟล็ตบันทึกแต่ละแพ็คเก็ตของข้อมูลเป็นไฟล์ในระบบไฟล์ วิธีนี้หากไฟล์เสียหายเนื่องจากการสูญเสียพลังงานก็สามารถถูกละเว้นและส่วนที่เหลือของข้อมูลยังคงเหมือนเดิม สิ่งนี้ทำให้เกิดปัญหาเล็กน้อย แต่ส่วนใหญ่เกี่ยวข้องกับปริมาณข้อมูลที่น่าจะถูกเก็บไว้ในเครื่องเสมือน ที่ 0.5s ระหว่างข้อมูลแต่ละส่วนจะมีการสร้างไฟล์ 1,728,000 ไฟล์ใน 10 วัน อย่างน้อยนี่หมายถึงการใช้ระบบไฟล์ที่มีจำนวน inodes เพิ่มขึ้นเพื่อจัดเก็บข้อมูลนี้ (การตั้งค่าระบบไฟล์ปัจจุบันหมด inodes ที่ ~ 250,000 ข้อความและใช้พื้นที่ดิสก์ 30%) นอกจากนี้ยังเป็นเรื่องยากที่จะจัดการ
มีตัวเลือกอื่น ๆ อีกไหม? มีเอ็นจิ้นฐานข้อมูลที่ทำงานบน Debian ที่ไม่ได้รับความเสียหายจากการตัดไฟหรือไม่? นอกจากนี้ควรใช้ระบบไฟล์ใดสำหรับเรื่องนี้ ext3 คือสิ่งที่ใช้ในขณะนี้
ซอฟต์แวร์ที่ทำงานบนเครื่องเสมือนเขียนด้วย Java 6 ดังนั้นหวังว่าโซลูชันจะไม่เข้ากัน