事务

事务#

fsspec 支持事务(Transactions),在事务期间,对远程存储中的文件的写入被推迟(通常放入临时位置),直到事务结束,此时整个事务以半原子方式完成,所有文件都被移动/提交到它们的最终目的地。具体实现是文件系统特定的(并非所有都支持),但核心思想是,要么所有文件都写入,要么都不写入,以减轻数据损坏的风险。这个功能可以像下面这样使用:

fs = fsspec.filesystem(...)
with fs.transaction:
    with fs.open('file1', 'wb') as f:
        f.write(b'some data')
    with fs.open('file2', 'wb') as f:
        f.write(b'more data')

在这里,file1file2 在事务上下文完成之前不会被移动到目标位置。如果上下文由于(未捕获的)异常而结束,那么这些文件将被丢弃,并且文件的目标位置保持未被触碰。

fsspec.spec.Transaction 类允许对操作进行微调,每个 fsspec 实例都有一个此类的实例作为属性 .transaction 来提供访问。

请注意,同步多个实例之间的事务,可能是跨集群的,是一个更难解决的问题,这里描述的实现只是解决方案的一部分。