【发布时间】:2021-06-16 14:32:00
【问题描述】:
我将快速解释上面的数据流图。
左下角的主进程和旁边的mongodb数据存储是我系统的两个主要组件。简而言之,主要过程是从 MySQL 系统收集数据,该系统用作我们公司其他后端系统的数据存储。我系统外部的其他系统不断更改各自 MySQL 数据库中的数据。主要过程是从这些系统转换数据,实际上并未更改原始模式,而是向其中添加更多信息,有时更新其值,而不是 SCHEMA。转换后的数据由我们的移动应用程序使用,即 DFD 中 mongodb 数据存储旁边的外部实体。现在,当我使用该系统创建转换数据的新副本时,一切正常,此时它在数据方面与所有其他系统同步。
问题是,
当我稍后尝试进一步转换数据时,我希望能够将更改通知用户并将其与原始数据同步(如果用户愿意),因为其他外部系统甚至我自己的进程可能有更新了数据。
{
"data_gathered_by_process": [
{
"id": "DB1",
"original data field 1": "original value 1"
},
{
"id": "DB2",
"original data field 2": "original value 2"
},
{
"id": "DB3",
"original data field 3": "original value 3"
}
]
}
这可以转化为
{
"transformed data": [
{
"id": "DB1",
"original data field 1": "transformed value 1",
"additional field added by process": "value"
},
{
"id": "DB2",
"original data field 2": "original value 2",
"additional values": ["one", "two"]
},
{
"id": "DB3",
"original data field 3": "original value 3"
}
]
}
现在可以再次以这种方式更改原始数据
{
"data_gathered_by_process": [
{
"id": "DB1",
"original data field 1": "changed to some other value"
},
{
"id": "DB2",
"original data field 2": "original value 2"
},
{
"id": "DB3",
"original data field 3": "original value 3"
}
]
}
我正在考虑实现这样的东西:
在 DB1、DB2、DB3 的实体上添加 last_updated 时间戳,并将其存储在转换后的数据副本中。在处理已经转换的数据时,一一检查所有实体的时间戳,如果不匹配则更新。我将首先通知用户原始数据已更改,如果他想进行更改,请使用相同的逻辑。但这将是一个处理开销,因为有十多个实体,每个实体都有不同的属性集。
我认为有更好的方法来做到这一点,只要有人能指出我正确的方向。
【问题讨论】:
标签: mysql mongoose database-design sequelize.js