1

我需要编写一个脚本来管理本地存储中文档的冲突版本。我目前正在考虑两种替代方案,但无法确定哪一种更具可扩展性。

我的文档将存储为 JSON,并且将具有一个id和一个revision来标识版本。

目前我正在本地存储中创建一个路径,如下所示:

PATH/TO/DOCUMENT/id

在此路径中,文档存储为 JSON

{"id":"abc","version":"1-a","content":"foo"}

我正在使用 POST、PUT(更新)、GET 和 REMOVE。POST/PUT 需要idversion而 GET/REMOVE 只需要id.

为了允许本地存储中存在冲突版本,我不确定是否

a) 存储在现有路径中并将版本添加为第二个 JSON字符串,如下所示:

PATH/TO/DOCUMENT/id   {"id":"abc","version":"1-a","content":"foo"},
                      {"id":"abc","version":"2-b","content":"foodforthought"}

b)存储在path.id并保留“单个文件

PATH/TO/DOCUMENT/id.1-a   {"id":"abc","version":"1-a","content":"foo"}
PATH/TO/DOCUMENT/id.2-b   {"id":"abc","version":"2-b","content":"foodforthought"}

问题
就可扩展性和存在的许多不同版本而言,哪一个更有意义?

4

3 回答 3

1

就可扩展性和存在的许多不同版本而言,哪一个更有意义?

选项 B。在这里,您可以读取/写入单个文档版本,而无需将整个 JSON 字符串(然后是对象,当涉及到操作时)加载到内存中。特别是当涉及到许多巨大的文档时,这将为您节省一些时间。

但是,如果您有一个巨大文档的许多版本,它们彼此之间没有太大差异,那么在性能和内存使用方面,使用增量差异版本控制存储它们可能会更好,这在一个单独的版本中会更有意义“JSON 文件”。

于 2012-12-13T10:48:34.203 回答
1

选择选项 A:如果每个 JSON 条目都很小,只有 id,而不是整个文档。这很容易管理和清理。

选择选项 B:如果每个 JSON 条目都很大。我同意@Bergi

于 2012-12-13T10:51:29.860 回答
0

如果我理解正确,这是一个关于最佳架构的问题。

由于您可能有“很多不同的版本”,因此您需要快速查找,localStorage因此选项 b 更好。因为在选项 a 中,每当您想查找文档的特定版本时,您必须遍历其 id 所在的所有项目,abc然后遍历它们(最坏的情况:线性搜索)以尝试找到您正在寻找的版本。

但是,使用.(dot) 作为分隔符可能不是最好的主意。分隔符应该是版本号和文件名中未使用的字符。我会建议类似的东西/。所以键将如下所示:

PATH/TO/DOCUMENT/id/1-a   {"id":"abc","version":"1-a","content":"foo"}
PATH/TO/DOCUMENT/id/2-b   {"id":"abc","version":"2-b","content":"foodforthought"}
于 2012-12-13T11:01:32.603 回答