【问题标题】:Which is better approach between holding object in memory or storing data in some file/database将对象保存在内存中或将数据存储在某些文件/数据库中哪个更好
【发布时间】:2017-06-09 16:54:33
【问题描述】:

我正在开发一个仪表板项目,该项目与两个或三个错误跟踪系统(如 jira、mantis 等)连接,并在 Web 应用程序中显示数据的图形表示。

我在做什么:

当添加任何新项目时,我会从这些系统连接并获取数据,并将数据存储在数据库的一个表中。之后有一个网络应用程序,然后在表格中处理这些数据并显示图表和表格。

为了更新,我创建了一个 Windows 服务,它会不断连接错误跟踪系统并更新数据库中的表(项目配置数据也存储在另一个表中)

问题:

  1. 如果我不将错误跟踪系统数据存储到数据库中并将该数据存储到对象中会怎样。将创建一个 Web 服务,该服务将在更新时触发更新事件,然后刷新视图?

  2. 什么是正确的方法?将整个项目数据存储到内存而不是数据库中是否正确。如果有大量的项目比如 300 或 600 怎么办?

  3. 我应该如何决定何时将数据存储在内存中以及何时存储在数据库中?

  4. 两种方式的优缺点?

【问题讨论】:

  • 项目数据有多大?我们猜不到。
  • 相当大。对于 20 个项目,现在有大约 10000 行 12 列,然后是不同表中的其他元数据和配置数据。
  • 多少 KB(或 MB 或 GB)?
  • 目前数据库大小为 32 MB
  • 那么 RAM 应该足够了(600 个项目需要 1 GB)。但是让所有这些数据保持不稳定是非常冒险的。

标签: algorithm design-patterns memory-management data-structures architecture


【解决方案1】:

如果我不将错误跟踪系统数据存储到数据库中并存储怎么办? 将该数据转换为对象。将创建一个将触发的 Web 服务 更新时更新事件,然后刷新视图?

您失去了“数据库”的两个好处:一致性(数据在崩溃后仍然存在),并且您需要更多 RAM,这比磁盘/闪存更昂贵且稀缺。
数据库还使用标准库提供更轻松的版本控制(因此您可以在需要时回滚到以前的版本)。


无论哪种方式,您都应该使用支持所需操作的库,并且不要尝试重新发明轮子。

什么是正确的方法?将整个项目数据存储到 内存而不是数据库。如果会有大量的怎么办 项目说 300 还是 600?

如果您不关心在服务器崩溃/重新加载以进行更新时丢失数据,并且您可以负担得起 RAM - 您可以让它工作。否则,使用数据库可能是一个更好的主意。

我应该如何决定何时将数据存储在内存中以及何时存储在数据库中?

您希望对故障有多大的容忍度,以及您能负担得起多少 RAM。

两种方式的优缺点?

数据库的优点:更好的一致性,更便宜
对象的优点:更快(磁盘读取比 RAM 慢),对系统状态的依赖性更小。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-05
    • 1970-01-01
    • 1970-01-01
    • 2019-01-17
    • 2014-08-12
    • 1970-01-01
    • 2012-01-01
    相关资源
    最近更新 更多