chun
1
要实现可以回到历史版本的功能,是不是还需要再Journal table中记录时间戳,修改的类型,和被修改了的blockID?
和这样的
- 存储相关的blockid的话才能回滚。 比如修改了一个文件的一部分,可能只有3个block变了,那我们得存储这3个block的新数据,而且我们得知道这3个block需要替换之前的哪些block才行。
不知道dropbox实际是怎么做的呢?
roger
2
我们设计的 Dropbox 的回滚的时候用之前version的所有blocks覆盖现在的就可以了,因为我们的journal存了所有的blocks的hash。修改以后,如果有些block没有变,可以那在我们的file system上可以先不改变。
logic
3
File Journal 存有所有更改的记录以及每次更改对应的 Block IDs。在上课讲的需求范围内,不需要存额外的信息。包括时间戳可以可以拿到的。
你的截图提出了一些新的需求,比如要区分 edit, add, delete,这个课上讲的设计处理不了,需要在 File Journal 额外记录一下这个修改类型。
chun
4
哦,好的。关于使用File Journal存 “每次更改对应的blockid” 这里我还有点疑问 - 文件局部被修改的情况,Journal里是不是需要存储 被修改的block ID,和对应的新block的ID呢?否则Dropbox怎么知道我修改的是原来的哪些block呢?
比如这种
Journal ID | Edited BlockID | New BlockID
10000000 | 123000000001 | 234000000001
logic
5
不需要知道修改的是哪个 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
chun
6
哦明白了,journal里存的并不是被修改的block id,而是存的是这个文件所有的block id啊