我有一个DocumentStore(一个网络共享的时间期限)和一个数据库,其中包含与复制到商店中的文档相关的条目。 我将要使用的数据库行的文件名的自动生成(INT)ID和分区的目录结构(如ID = 4433最终将被投入到“\ 004 \ 433 \ 0000004433.xxx”)通过网络共享使用File.Move安全/高效吗?
我显然不能在复制文件时对数据库进行任何锁定,但我不确定哪个策略可以采取更好的策略:
a)向数据库添加一行以获取ID(推测使用InProgress标志),将文件复制到目标位置,然后再次更新行以清除复制成功后的标志。
b)将文件复制到共享根目录下的临时文件名;完成后,将新行插入数据库以获取ID并调用File.Move将临时文件移动到正确的目的地。如果插入/移动文件在交易中完成,则任何失败都将意味着插入被回滚并且其他任何人都看不到
(b)如果确实是移动而不是复制/删除,这是安全的吗?
Tilak/Zdravko:复制/删除不适用于场景b,因为数据库事务处于打开状态 - 它需要(几乎)瞬间完成。我需要确定的是,Move功能(即只是改变目录指针)仍然适用,即使从不持有共享的机器调用。 –