我正在编写一个模拟,它需要一个支持数据库来存储结果。模拟写入大量数据。出于明显的性能原因,我选择试用 NoSQL 数据库,特别是 MongoDB。但是,我对我的数据模型有点困惑。
在关系世界中,模式将转换为:
- Simulation 保存仿真配置、状态等。
- 场景描述了一个特定的模拟案例。
- 实现组 TestResults。
模拟工作如下。首先,我们创建配置(映射到模拟表)并指定场景以及要计算的实现数量。然后我们开始模拟。模拟在一个场景中创建实现(并行,这么多实现并同时计算并插入到模拟当前正在处理的场景中)。
然而,在 NoSQL,特别是 MongoDB 中,关系又差又慢,所以我应该尽可能地使用嵌入式文档。所以我想出了这个:
当首先计算所有实现然后将其作为单个插入(场景)保存到数据库时,这个模型应该给我最好的性能。
但是,出于性能原因,我想在计算后立即将实现插入到场景中。这将需要在每次完成实现时更新场景。这是一个坏主意吗 ?它在 MongoDB 参考上说,当将嵌入文档添加到父文档中时,父文档会更新,但无论如何都会有性能损失。
不将实现嵌入到场景中而是引用它会更快吗?稍后读取和聚合数据时会损失多少性能?我应该知道其他任何陷阱吗?
谢谢。