相关疑难解决方法(0)

在MongoDB中实现数据版本控制的方法

您能否分享一下您如何在MongoDB中实现数据版本控制?(我问过关于Cassandra的类似问题.如果你有任何想法,哪个数据库更好,请分享)

假设我需要在简单的地址簿中对记录进行版本控制.(地址簿记录存储为平面json对象).我期待历史:

  • 将很少使用
  • 将一次性使用以"时间机器"的方式呈现它
  • 单个记录的版本不会超过几百个.历史不会过期.

我正在考虑以下方法:

  • 创建新的对象集合以存储记录的历史记录或对记录的更改.它将为每个版本存储一个对象,并引用地址簿条目.这些记录如下:

    {
     '_id': 'new id',
     'user': user_id,
     'timestamp': timestamp,
     'address_book_id': 'id of the address book record' 
     'old_record': {'first_name': 'Jon', 'last_name':'Doe' ...}
    }
    

    可以修改此方法以存储每个文档的版本数组.但这似乎是没有任何优势的较慢的方法.

  • 将版本存储为附加到通讯簿条目的序列化(JSON)对象.我不确定如何将这些对象附加到MongoDB文档.也许是一个字符串数组.(使用CouchDB进行简单文档版本控制后建模)

database-versioning mongodb

289
推荐指数
6
解决办法
11万
查看次数

在Cassandra中实现数据版本控制的方法

您能否分享一下您如何在Cassandra中实现数据版本控制的想法?

假设我需要在简单的地址簿中对记录进行版本控制.(地址簿记录存储为ColumnFamily中的行).我期待历史:

  • 将很少使用
  • 将一次性使用以"时间机器"的方式呈现它
  • 单个记录的版本不会超过几百个.
  • 历史不会过期.

我正在考虑以下方法:

  • 将地址簿转换为超级列族并将多个版本的地址簿记录存储在一行(按时间戳)键为超级列.

  • 创建新的超级列族以存储旧记录或更改记录.这种结构如下:

    {'地址簿行键':{'时间戳1':{'名字':'新名称','由'修改':'用户ID',},

    'time stamp2': {
            'first name': 'new name',
            'modified by': 'user id',
        },
    },
    
    Run Code Online (Sandbox Code Playgroud)

    '另一个地址簿行键':{'时间戳':{....

  • 将版本存储为新ColumnFamilly中附加的序列化(JSON)对象.将版本集表示为行,将版本表示为列.(使用CouchDB进行简单文档版本控制后建模)

database-versioning cassandra

20
推荐指数
1
解决办法
1万
查看次数

基本的mysql版本控制?

我们有一个购物车,如下图所示,设置运行良好,除了一个致命的缺陷.如果您下订单该订单与产品相关联,那么如果我在您购买产品后更新产品,我就无法向您展示您希望产品在购买时的样子(包括价格).这意味着我们需要版本控制.

当前架构

我目前的计划是,在创建新产品或变体或编辑现有产品或变体时,在数据库中创建产品或变体的副本.购买时,将订单链接到版本,而不是产品.

这似乎相当简单,除了我可以看到的,我们不需要版本的唯一事情是类别(因为没有人关心它的类别).所以我们需要版本:

  • 制品
  • 变种
  • 每个版本的键 - >值对属性
  • 图像

我目前的想法是,

注意: 创建产品时,也会创建默认变体,但无法删除.

  • 创建产品时
    • 将产品插入产品表中.
    • 创建默认变体
    • 将产品复制到products_versions表中
      • 使用product_id列替换当前id列
      • 添加id列
    • 将变体复制到variants_versions表中
      • 用variant_id列替换当前id列
      • 添加id列
      • 将product_id列替换为product_version_id列

  • 编辑产品时
    • 将产品更新到产品表中.
    • 将产品复制到products_versions表中
      • 使用product_id列替换当前id列
      • 添加id列
    • 将所有产品变体复制到variants_versions表中
      • 用variant_id列替换当前id列
      • 添加id列
      • 将product_id列替换为product_version_id列
    • 将所有variant_image_links复制到variant_Image_link_version表中
      • 将当前variant_id列替换为variant_version_id列

  • 添加变体时
    • 将变体添加到变体表中.
    • 将产品复制到products_versions表中
      • 使用product_id列替换当前id列
      • 添加id列
    • 将所有产品变体复制到variants_versions表中
      • 用variant_id列替换当前id列
      • 添加id列
      • 将product_id列替换为product_version_id列

  • 编辑变体时
    • 更新变体表中的变体.
    • 将产品复制到products_versions表中
      • 使用product_id列替换当前id列
      • 添加id列
    • 将所有产品变体复制到variants_versions表中
      • 用variant_id列替换当前id列
      • 添加id列
      • 将product_id列替换为product_version_id列
    • 将所有variant_image_links复制到variant_Image_link_version表中
      • 将当前variant_id列替换为variant_version_id列

所以最终结构看起来像全尺寸

现在这一切看起来都很棒,除非它看起来像是一堆重复数据,例如,如果我们更新产品,我们会复制变体,即使它们插入后也不会更新.此外,这似乎很多工作.

有没有更好的方法呢?

mysql database versioning database-design database-versioning

7
推荐指数
1
解决办法
4418
查看次数