gpt4 book ai didi

java - 如何和平地裁剪现有的MongoDB?

转载 作者:行者123 更新时间:2023-12-01 11:33:59 25 4
gpt4 key购买 nike

假设我有一个正在运行的 mongodb 实例(也使用 mongo 分片),每秒有数百万个数据和数千个事务,并且我使用吗啡作为我的对象文档映射。因为我们希望通过错误修复、更新和......在某些时候改变数据模型来保持项目的活力将是不可避免的。考虑下面的例子:我有一个持久化的类(模型):

private EventAsset{
@Id
private String id;
@Constraints.Required
private String time;
private EventType eventType;
}

现在我们决定将 EventAsset.class 更改为:

private EventAsset{
@Id
private String id;
@Constraints.Required
private String time;
@Constraints.Required
private String assetName;
}

如您所见,eventType 已被删除,并添加了必需的 assetName,此更改将阻止应用程序启动。我能想到的唯一主要可能的解决方案是

  • 创建一个新数据库并将旧值插入其中以及一些如何管理以不会造成伤害的方式在新旧数据库之间切换每秒传入几千笔交易。
  • 使用或创建一个工具来分析您的类(class)并进行比较针对数据库并对现有数据库进行必要的更改并且不会对现有数据和传入数据流造成损害(很少每秒数千笔交易)

这种情况似乎是每个实时项目每天(或至少每隔几个月左右)都会遇到的问题。那么这个问题有公认的解决方案吗?你有什么建议?

最佳答案

删除@Constraints.Required应该不是问题,添加新属性也可以。您的应用因 @Constraints.Required 而无法启动 — 这是来自 Play 框架的注释吗?

我认为这个要求在关系数据库中也几乎相同 - 添加一个新列,将其设置为必需,然后它将不再起作用。

我看到的可能的解决方案:

  • 删除注释并仅对应用程序中的新写入强制执行该逻辑
  • 拥有一些清理应用程序,可以将值添加到现有数据中(如果可能的话)。一旦所有条目上都存在该值,就添加注释。
  • 如果必须的话,请使用多个数据存储 - 不确定这是否值得花费这些开销。并且至少使用 Morphia 1.0.0-rc0,因为以前在单个应用程序中使用多个数据存储时存在错误。

关于java - 如何和平地裁剪现有的MongoDB?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30185991/

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