我正在为我们的数据库创建数据版本控制。它将具有存储修订版本、回滚和回滚回滚的功能。我使用需要进行版本控制的数据库表如下:
objects object_chunks object_attributes
Objects是主要对象,chunks是对象的分组部分,attributes是块内数据的属性。Attributes存储对象ID以及块ID,这样容易选择一个对象的所有属性,而不必再次加入到chunks表中。
唯一真正会更改的是attributes,但当一个attribute发生变化时,受影响的chunk(s)将被更新,每当chunk更新时,对象也会更新。现在,我已经想到了两种解决这个问题的方法。
1. 创建三个新表,并附加后缀_rev,这些表将简单地存储对象的旧版本。实际对象也将存储rev编号。所以假设我更改了三个不同的属性,这些属性跨越了三个chunks,因此需要在chunks中创建三个新行,在attributes中创建三个新行,在对象中创建一个新行用于版本控制。由于这是第一次更改,所以rev ID将为1,在实际表中,它们的rev将为2。
2. 我只需执行上述操作,但不是使用单独的表格,我只需将其存储在相同的表格中。
需要注意的一件事是,将始终存在修订版本,块的数量可以从1到100+不等。尽管平均值约为1-15,属性可以从0变化到100+。平均值可能约为30。每个属性都将更改。这些对象通过“阶段”进行,所有属性必须由用户填写。填写后,对象被归档并永远不会再次修改。所有对象都有相应的文件。因此,对象还将存储文件的当前哈希(sha256)。此哈希用于去重目的。
objects object_chunks object_attributes
Objects是主要对象,chunks是对象的分组部分,attributes是块内数据的属性。Attributes存储对象ID以及块ID,这样容易选择一个对象的所有属性,而不必再次加入到chunks表中。
唯一真正会更改的是attributes,但当一个attribute发生变化时,受影响的chunk(s)将被更新,每当chunk更新时,对象也会更新。现在,我已经想到了两种解决这个问题的方法。
1. 创建三个新表,并附加后缀_rev,这些表将简单地存储对象的旧版本。实际对象也将存储rev编号。所以假设我更改了三个不同的属性,这些属性跨越了三个chunks,因此需要在chunks中创建三个新行,在attributes中创建三个新行,在对象中创建一个新行用于版本控制。由于这是第一次更改,所以rev ID将为1,在实际表中,它们的rev将为2。
2. 我只需执行上述操作,但不是使用单独的表格,我只需将其存储在相同的表格中。
需要注意的一件事是,将始终存在修订版本,块的数量可以从1到100+不等。尽管平均值约为1-15,属性可以从0变化到100+。平均值可能约为30。每个属性都将更改。这些对象通过“阶段”进行,所有属性必须由用户填写。填写后,对象被归档并永远不会再次修改。所有对象都有相应的文件。因此,对象还将存储文件的当前哈希(sha256)。此哈希用于去重目的。