我有一个 DocumentStore(网络共享的时髦术语)和一个数据库,其中包含与复制到存储中的文档相关的条目。我将使用数据库行的自动生成 (int) ID 作为文件名和分区目录结构(例如 ID=4433 最终将被放入 '\004\433\0000004433.xxx')
我显然不能在复制文件时对数据库保持任何形式的锁定,但我不确定哪种策略更好:
a) 向数据库添加一行以获取 ID(可能带有 InProgress 标志),将文件复制到目标位置,然后再次更新该行以在复制成功后清除该标志。
b) 将文件复制到共享根目录下的临时文件名;完成后,将新行插入数据库以获取 ID 并调用 File.Move 将临时文件移动到正确的目的地。如果插入/移动文件是在事务中完成的,那么任何失败都意味着插入被回滚并且其他人看不到
(b) 如果它真的是移动而不是复制/删除,应该没问题,但是这样做安全吗?