Dưới đây là một lời giải thích về cách làm fdatasync()
việc so với cách làm fsync()
việc
fdatasync()
tuôn ra tất cả các bộ đệm dữ liệu của một tệp vào đĩa (trước khi cuộc gọi hệ thống trở lại). Nó giống fsync()
nhưng không bắt buộc phải cập nhật siêu dữ liệu, chẳng hạn như thời gian truy cập. Các ứng dụng truy cập cơ sở dữ liệu hoặc tệp nhật ký thường ghi một đoạn dữ liệu nhỏ (ví dụ: một dòng trong tệp nhật ký) và sau đó gọi fsync()
ngay để đảm bảo dữ liệu bằng văn bản được lưu trữ trên ổ cứng. Thật không may, fsync()
sẽ luôn luôn bắt đầu hai hoạt động viết
- một thao tác ghi cho dữ liệu mới được viết
- một thao tác ghi để cập nhật thời gian sửa đổi được lưu trong inode
Nếu thời gian sửa đổi không phải là một phần của khái niệm giao dịch, thì fdatasync()
có thể được sử dụng để tránh các hoạt động ghi đĩa inode không cần thiết.
Trong tiếng Anh, O_DSYNC
nhanh hơn O_DIRECT
kể từ khi O_DIRECT
gọi fsync()
hai lần (một cho nhật ký và một cho dữ liệu) và fsync()
xác minh ghi dữ liệu thông qua hai thao tác ghi. Sử dụng O_DSYNC
cuộc gọi fdatsync()
và fsync()
. Bạn có thể nghĩ về fdatasync()
việc thực hiện một fsync()
dữ liệu không đồng bộ (không xác minh dữ liệu).
Nhìn vào các con số, O_DSYNC
có bốn thao tác ghi, hai trong số đó được xác minh, trong khi fsync()
bốn thao tác ghi, tất cả đều được xác minh sau đó.
PHẦN KẾT LUẬN
O_DSYNC
- nhanh hơn so với
O_DIRECT
- Dữ liệu có thể / có thể không nhất quán do độ trễ hoặc sự cố hoàn toàn
O_DIRECT
- ổn định hơn
- dữ liệu phù hợp
- tự nhiên chậm hơn
Tôi hy vọng câu trả lời này có ích, và tôi hy vọng tôi đã không làm mọi thứ tồi tệ hơn với bạn.