我正在为我们数据库中的数据创建修订控制。它将能够存储修订、回滚和回滚回滚。我正在使用的需要修改的数据库表如下:
对象
object_chunks
object_attributes
对象是主要对象,块是对象的一部分,属性是块内数据的属性。属性以这种方式将对象 ID 与块 ID 一起存储 选择对象的所有属性很容易,而无需对块表进行另一次 JOIN。
唯一真正改变的是属性,但是当属性改变时,受影响的块将被更新,并且每当块被更新时,对象也会被更新。现在我想到了两种不同的方法来解决这个问题。
- 创建三个后缀为 _rev 的新表,这些表将仅存储旧版本的对象。真实的对象也会存储一个转速。因此,假设我更改了三个不同的属性,这些属性跨越三个块,因此块中的三个新行,属性中的三个,以及对象中的一个用于修订。由于这是第一次更改,rev ID 将为 1,在实际表中,它们的 rev 将为 2。
- 我只是简单地做上面的事情,但不是有一个单独的表,我只是将它存储在同一个表中。
需要注意的一件事是,总会有修订,块的数量可以从 1 到 100+ 不等。虽然平均值在1-15左右。属性可以从 0 到 100+ 不等。平均值可能在 30 左右。每个属性都会改变。这些对象经过一个“阶段”,所有属性都必须由用户填写。一旦它们被填满,对象就会被归档并且不再被修改。所有对象都有一个对应的文件。所以对象也将存储文件的当前哈希(sha256)。此哈希用于重复数据删除目的。