gpt4 book ai didi

nosql - 如何在NOSQL存储系统中实现架构更改

转载 作者:行者123 更新时间:2023-12-04 08:28:56 26 4
gpt4 key购买 nike

当您使用像SimpleDB这样的Nosql存储时,如何管理主要的模式更改?

我知道我仍在用SQL术语进行思考,但是在与SimpleDB一起工作了几周之后,我需要对正在运行的数据库进行更改。我想将其中一个对象类更改为具有唯一的ID(而不是业务名称),并且由于另一个对象引用了该ID,因此我还需要更新这些对象中的引用值。

使用SQL数据库,您将在客户端软件部署过程中运行一组sql语句。显然,这不适用于像SimpleDB这样的东西

  • 没有等效的SQL更新语句。
  • 由于SimpleDB的分布式特性,无法知道何时对数据库所做的更改已“过滤”到运行客户端软件的所有节点上。

  • 我想到的一些解决方案是
  • 每个域都有一个版本号。客户端软件知道应使用哪个版本的域。编写一些代码,以将数据从一个域版本复制到另一个域版本,并在进行过程中进行任何必需的更改。然后,您可以安装新的客户端软件,然后再访问新的域版本。除非您可以在更新过程中“卡住”所有写访问权限,否则该方法将不起作用。
  • 每个项目都有一个version属性,该属性指示存储时使用的格式。客户端在将对象加载到内存时使用此属性。然后,在将对象写回到SimpleDB时,可以将其转换为最新格式。这样做的问题是,必须先将新软件部署到所有服务器,然后再进行新格式的写入,否则运行旧软件的客户端将不知道如何读取新格式。

  • 这一切都相当复杂,我想知道我是否想念一些东西?

    谢谢

    理查德

    最佳答案

    我使用类似于您的第二个选项的东西,但是没有version属性。

    首先,尝试保持对易于向后兼容的更改-更改主键是最糟糕的情况。

    删除字段很容易-一旦所有服务器都运行不需要该字段的版本,就停止写该字段。

    添加字段要求您永远不要使用不会保存该字段的代码来编写该对象。如果无法一次到处部署新版本,请在部署需要此版本的中间版本之前,使用支持保存该字段的中间版本。

    更改字段只是这两个操作的组合。

    使用这种方法,可以根据需要应用更改-使用新版本进行写入,但允许读取具有新字段默认值或派生值的旧版本。

    您可以使用相同的代码一次更新所有记录,尽管这可能不适用于大型数据集。

    更改主键的方法可以相同,但是根据所使用的nosql系统的不同,它可能会变得非常复杂。在这种情况下,您可能不得不设计自定义迁移代码。

    关于nosql - 如何在NOSQL存储系统中实现架构更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7239117/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com