如何在linux上实现写事务?要么全写,要么什么都不做
我需要将如何在linux上实现写事务?要么全写,要么什么都不做,linux,transactions,diskspace,Linux,Transactions,Diskspace,我需要将bytes1写入file1和bytes2写入file2,并确保在写入过程中不会捕获没有剩余空间的异常 或者可能有人知道sql数据库如何实现其文件的完整性?我找到了一种实现事务的方法,但不知道这种方法的缺陷。关键元素是syscall,它允许我们实现回滚逻辑。下面是一个伪代码: file1Pos = file1.tell() file2Pos = file2.tell() err = file1.write(bytes1) if err != nil { // rollback t
bytes1
写入file1
和bytes2
写入file2
,并确保在写入过程中不会捕获没有剩余空间的异常
或者可能有人知道sql数据库如何实现其文件的完整性?我找到了一种实现事务的方法,但不知道这种方法的缺陷。关键元素是syscall,它允许我们实现回滚逻辑。下面是一个伪代码:
file1Pos = file1.tell()
file2Pos = file2.tell()
err = file1.write(bytes1)
if err != nil {
// rollback to previous position
file1.truncate(file1Pos)
// The file offset is not changed after truncation
file1.seek(file1Pos, SEEK_SET)
}
err = file2.write(bytes2)
if err != nil {
file1.truncate(file1Pos)
file1.seek(file1Pos, SEEK_SET)
file2.truncate(file2Pos)
file2.seek(file2Pos, SEEK_SET)
}
据了解,如果文件是用O_DIRECT
打开的,那么linux上的单次写入是原子的。如果您搜索“原子写入”,可能会有更多的发展。这称为“原子写入”