开源改变世界

数据版本控制机制 #51

推推 grbl 2年前 (2023-02-03) 170次浏览
关闭
jorgerobles 打开了这个问题 2016 年 12 月 5 日 · 10 条评论
关闭

数据版本控制机制#51

jorgerobles 打开了这个问题 2016 年 12 月 5 日 · 10 条评论

评论

数据版本控制机制 #51
合作者

引用#49

我们需要一些数据版本控制机制(数据作为设置、机器、材料、操作),因为我遇到过本地存储的数据无效,因为我们对代码进行了改进。

它可以像每个数据存储上的版本标志一样简单,也可以像使用 JSON Schema 一样复杂,以检查存储数据的有效性并在需要时修剪/迁移。

这是因为新的 pxperinch 破坏了本地存储的设置。现在并不重要,因为我们处于早期开发阶段,但在未来“黄金构建”中引入新功能时可能是一个真正的问题

数据版本控制机制 #51
成员
纠结 评论了 2016 年 12 月 5 日  

这是我们可以尝试的事情:在用加载的数据替换状态后分派一个 LOAD 操作。Reducers 会将加载状态合并到默认状态,以确保没有遗漏任何内容。例如

export function objectNoId(objectType, initialState) {
        ...
        else if (action.type === 'LOAD')
            return Object.assign({}, initialState, state);
        ...
};
数据版本控制机制 #51
合作者作者

这可能行得通,但您可能会以跨版本的垃圾/冲突状态结束。
我在考虑某种哈希算法。可能在不同的数据集上有所不同。
在设置上,字典键的校验和 (md5)。这很容易,因为设置状态是一个单级字典,所有键都将存在于文件/本地存储中。但是对于另一个……我不太确定。多级字典需要所有的键都存在才能用校验和算法进行检查,否则将会失败,除非我们有一个更健壮的模式。

数据版本控制机制 #51
成员

密钥散列的一个问题是随着时间的推移会积累大量的散列。Reducers 必须知道如何处理每一个曾经存在的旧散列。当我们添加新字段时,它们会快速堆积,很容易忘记添加它们,从而导致损坏。

Reducers 可以这样做来响应 LOAD:

  • 将缺失字段设置为默认值
  • 删除他们不认识的字段;当我们删除旧字段时会发生这种情况。
  • 如果字段更改为不兼容的格式(例如 {} 而不是 []),则它需要一个新名称。Reducers 会检测到旧字段,将其删除,并将其数据转换为新字段。
数据版本控制机制 #51
合作者作者
jorgerobles 评论了 2016 年 12 月 6 日 通过电子邮件
数据版本控制机制 #51
成员

object() 和 objectNoId() 现在响应 LOADED 执行此操作:

Set missing fields to defaults
Delete unrecognized fields

新的加载按钮和自动设置加载调度加载。

数据版本控制机制 #51
合作者作者
jorgerobles 评论了 2016 年 12 月 31 日  

@tbfleming我发现了一个与此补丁相关的错误。转储工作区不会使用操作 ID (UUID) 重新加载,因此所有操作都与新加载状态相同(所有操作都在单击时展开,它们的所有属性同时更改,等等)

escaleras_300-01.json.zip

找到更新修复。谢谢

数据版本控制机制 #51
成员

固定的。

数据版本控制机制 #51
合作者作者

我认为到目前为止效果很好。