gpt4 book ai didi

database - 文档数据库中模式更改的模式

转载 作者:太空狗 更新时间:2023-10-30 01:51:45 25 4
gpt4 key购买 nike

在我开始之前,我想为我的问题的一般类型 - 我确定整本书可以写在那个特定的主题上。

假设您有一个包含多个文档模式的大型文档数据库以及每个模式的数百万文档。在应用程序的生命周期中,需要更改模式已存储文档的(和内容)频繁。

这样的改变可能是

  • 添加新字段
  • 重新计算字段值(将 Gross 拆分为 Net 和 VAT)
  • 删除字段
  • 将字段移动到嵌入文档中

在我的上一个项目中,我们使用了 SQL 数据库,我们遇到了一些非常相似的挑战当更改变得非常剧烈,因为 SQL DB 通常在表上执行 LOCK变化发生。我想避免这种情况。

另一个相关的问题是如何在使用的编程语言环境。通常模式更改发生在更改类定义(我将使用 Mongoid OR-Mapper 来MongoDB 和 Ruby)。我如何处理不支持的旧版本文档符合我最新的类定义。

最佳答案

这是个很好的问题。

像 MongoDB 这样的面向文档的数据库的好处在于来自同一集合的文档不需要具有相同的字段。具有不同的字段本身不会引发错误。这叫做灵 active 。出于同样的原因,它也是一个不好的部分。

所以问题和解决方案都来自您的应用程序的逻辑。

假设我们有一个模型 Person 并且我们想要添加一个字段。目前在数据库中我们保存了 5.000.000 人。问题是:我们如何添加该字段并减少停机时间?

可能的解决方案:

  1. 更改应用程序的逻辑,使其既可以处理有该字段的人,也可以处理没有该字段的人。

  2. 编写一个任务,将该字段添加到数据库中的每个人。

  3. 使用新逻辑更新生产部署。

  4. 运行脚本。

因此唯一的停机时间是重新部署所需的几秒钟。尽管如此,我们还是需要花时间研究逻辑。

所以基本上我们需要选择正常运行时间和我们的时间哪个更有值(value)。

现在假设我们要重新计算一个字段,例如增值税值。我们不能像以前那样做,因为让一些产品使用增值税 A 而另一些使用增值税 B 没有意义。

因此,一个可能的解决方案是:

  1. 更改应用程序的逻辑,使其显示增值税值正在更新,并禁用可以使用它的操作,例如购买。

  2. 编写脚本来更新所有增值税值。

  3. 使用新代码重新部署。

  4. 运行脚本。完成时:

  5. 使用完整的操作代码重新部署。

所以没有绝对的停机时间,只是某些特定部分的部分停机。用户可以继续查看产品描述并使用应用程序的其他部分。

现在假设我们要删除一个字段。该过程与第一个过程几乎相同。

现在,将字段移动到嵌入文档中;这是一个很好的!该过程类似于第一个过程。但是我们不需要检查字段是否存在,而是检查它是嵌入文档还是字段。

结论是,使用面向文档的数据库,您将拥有很大的灵 active 。因此,您手头有优雅的选择。您是否使用它取决于您是否更重视您的开发时间或您客户的时间。

关于database - 文档数据库中模式更改的模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5029580/

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