Tôi có một máy ảo (Debian) đang chạy trên một máy chủ vật lý. Máy ảo hoạt động như một bộ đệm cho dữ liệu mà nó thường nhận được qua mạng cục bộ (khoảng thời gian cho dữ liệu này là 0,5 giây, do đó thông lượng khá cao). Mọi dữ liệu nhận được được lưu trữ trên máy ảo và liên tục được chuyển tiếp đến một máy chủ bên ngoài qua UDP. Khi máy chủ bên ngoài thừa nhận (qua UDP) rằng nó đã nhận được gói dữ liệu, dữ liệu gốc sẽ bị xóa khỏi máy ảo và không được gửi lại cho máy chủ bên ngoài. Kết nối internet kết nối VM và máy chủ bên ngoài là không đáng tin cậy, có nghĩa là nó có thể ngừng hoạt động trong nhiều ngày.
Máy vật lý lưu trữ VM bị cắt điện nhiều lần mỗi ngày một cách ngẫu nhiên. Không có cách nào để biết khi nào điều này sắp xảy ra và không thể thêm UPS, pin hoặc giải pháp tương tự cho hệ thống.
Ban đầu, dữ liệu được lưu trữ trên cơ sở dữ liệu HSQLDB dựa trên tệp trên máy ảo. Tuy nhiên, việc cắt điện thường xuyên cuối cùng khiến tệp tập lệnh cơ sở dữ liệu bị hỏng (không phải ở cấp hệ thống tệp, nghĩa là có thể đọc được, nhưng HSQLDB không thể hiểu ý nghĩa của nó), dẫn đến câu hỏi của tôi:
Làm thế nào dữ liệu nên được lưu trữ trong một môi trường nơi việc cắt điện có thể và xảy ra thường xuyên?
Một tùy chọn tôi có thể nghĩ đến là sử dụng các tệp phẳng, lưu từng gói dữ liệu dưới dạng tệp trên hệ thống tệp. Bằng cách này nếu một tệp bị hỏng do mất nguồn, nó có thể bị bỏ qua và phần còn lại của dữ liệu vẫn còn nguyên. Tuy nhiên, điều này đặt ra một số vấn đề, chủ yếu liên quan đến lượng dữ liệu có khả năng được lưu trữ trên máy ảo. Tại 0,5 giây giữa mỗi phần dữ liệu, 1.728.000 tệp sẽ được tạo trong 10 ngày. Điều này ít nhất có nghĩa là sử dụng một hệ thống tệp có số lượng nút tăng lên để lưu trữ dữ liệu này (thiết lập hệ thống tệp hiện tại đã hết các nút ở mức ~ 250.000 tin nhắn và 30% dung lượng đĩa được sử dụng). Ngoài ra, thật khó (không phải là không thể) để quản lý.
Có sự lựa chọn nào khác không? Có công cụ cơ sở dữ liệu nào chạy trên Debian mà không bị hỏng do cắt điện không? Ngoài ra, hệ thống tập tin nào nên được sử dụng cho việc này? ext3 là những gì được sử dụng tại thời điểm này.
Phần mềm chạy trên máy ảo được viết bằng Java 6, vì vậy hy vọng giải pháp sẽ không tương thích.