[Dropbox] File Journal Table - 回复历史版本

要实现可以回到历史版本的功能,是不是还需要再Journal table中记录时间戳,修改的类型,和被修改了的blockID?

  • 时间戳需要显示给用户,方便选择回滚版本。

  • 修改的类型需要显示是新文件,替换了,还是编辑了,比如我的dropdown就能显示这样的

和这样的

  • 存储相关的blockid的话才能回滚。 比如修改了一个文件的一部分,可能只有3个block变了,那我们得存储这3个block的新数据,而且我们得知道这3个block需要替换之前的哪些block才行。

不知道dropbox实际是怎么做的呢?

我们设计的 Dropbox 的回滚的时候用之前version的所有blocks覆盖现在的就可以了,因为我们的journal存了所有的blocks的hash。修改以后,如果有些block没有变,可以那在我们的file system上可以先不改变。

File Journal 存有所有更改的记录以及每次更改对应的 Block IDs。在上课讲的需求范围内,不需要存额外的信息。包括时间戳可以可以拿到的。
你的截图提出了一些新的需求,比如要区分 edit, add, delete,这个课上讲的设计处理不了,需要在 File Journal 额外记录一下这个修改类型。

哦,好的。关于使用File Journal存 “每次更改对应的blockid” 这里我还有点疑问 - 文件局部被修改的情况,Journal里是不是需要存储 被修改的block ID,和对应的新block的ID呢?否则Dropbox怎么知道我修改的是原来的哪些block呢?

比如这种

Journal ID | Edited BlockID | New BlockID
10000000 | 123000000001 | 234000000001

不需要知道修改的是哪个 block。
Namespace ID | Relative Path | Journal ID | Blocklist | Change Type
123 | folder/a.mp4 | 50 | [124,125,126,127] | new
123 | folder/a.mp4 | 51 | [124,125,128,127] | edit
读取的时候直接读这个 blocklist 就可以了,可以 infer 知道是 126->128

哦明白了,journal里存的并不是被修改的block id,而是存的是这个文件所有的block id啊

对的,Journal 存的是状态,不是过程。