【问题标题】:Storing Visualizations and Analysis in Database在数据库中存储可视化和分析
【发布时间】:2016-06-27 12:33:27
【问题描述】:

我目前正在开发一个允许用户分析和可视化数据的网络应用程序。例如,其中一个用例是用户将执行主成分分析并存储它。可以有其他类似的分析,如火山图、热图等。

我想将这些分析和可视化存储在后端的数据库中。我面临的挑战是如何设计一个可以有效地做到这一点的关系数据库模式。以下是我的一些担忧:

  • 与项目关联的数据已经以标准化方式存储,以便可以调用。我不想再将它与可视化一起存储。
  • 同时,用户应该能够看到可视化背后的原始数据。例如。将哪些数据输入 PCA 算法?用户可能不会将与项目关联的所有数据用于 PCA。他/她可能只是对项目中的数据子集执行此操作。
  • 与 web 应用程序关联的可视化数量将随着时间的推移而增长。如果每次添加新的可视化时我都需要设计一个涉及的架构,这可能会使整体开发速度变慢。

考虑到这些,我想知道是否应该尝试使用像 MySQL 这样的关系数据库来解决这个问题。还是我应该看看 MongoDB?更一般地说,我如何看待这个问题?我尝试在网上寻找一些博客/教程,但找不到很多有用的东西。

【问题讨论】:

标签: mysql mongodb database-design relational-database visualization


【解决方案1】:

在考虑技术设计(包括关系或非 SQL 平台)之前,您应该做的第一步是建立一个数据模型,该模型以独立于平台的方式清楚地描述数据之间的结构和关系。我看到以下有趣的问题需要解决:

  • 可视化与其可视化的数据对象有何关联?当可视化只显示一种对象类型的数据(比如每月的销售数量)时,这是微不足道的。但是,如果它涵盖了多个对象类型(每月销售额、产品类别和国家/地区),您将必须决定将其链接到其中的哪一个。对此没有唯一正确的解决方案,但这取决于用户的需求:他们将从哪些来源找到这种可视化?如果它们总是来自同一个来源(比如说国家),那么将视觉效果链接到该对象类型就足够了。

  • 自生成可视化的时间点以来,您将如何处理基本数据的插入、删除和更新?如果无法进行与视觉相关的此类操作,那么很简单:只需将选择标准(国家=“奥地利”,产品类别=“玩具”)存储在视觉中,每个人都会知道它的含义。但是,如果可以更改基本数据,您应该实现一个数据模型,涵盖对这些数据进行历史记录,即能够重建原始视觉所基于的数据值。当然,在做出决定之前,您需要明确要求:在基础数据发生变化的情况下,原始视觉是否仍然具有吸引力,还是需要重新生成以反映变化?

使用 NOSQL 数据库既不简化也不复杂。

无论这些要求和数据建模工作的结果如何,我都会坚持以下原则:

  • 将视觉对象与基本数据分开,即使视觉对象仅与一组基本数据密切相关。原因:视觉效果只是基本数据的结果,可以在丢失时重新计算。所以要求例如数据备份对基础数据比视觉数据更严格。

  • 不要冗余地存储基本数据以显示每个视觉对象的基础。包含每条基本数据记录的时间戳逻辑以及生成的视觉对象的时间戳将用于相同的目的,而且工作量和存储量更少。

【讨论】:

  • 什么是“历史化”数据的好日子?假设用于存储数据的基础对象是一个项目。项目实体是否应该有不同的时间戳?如果您能提出一种方法来提出模型(或示例),那将非常有帮助。
  • 对于大多数情况,每条记录的 validFromvalidTo 属性就足够了。 validTo 是一个小的冗余,因为它将与下一个时间段的记录的validFrom 相同,但它会使查询特定时间点的状态更容易。因此,要查找所有在去年圣诞节有效的项目(如果它们已经存在),您只需查询where 2014-12-25 between dateFrom and dateTo or dateTo is null and dateFrom <= 2014-12-25,就完成了。
猜你喜欢
  • 2012-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多