在生产环境中使用Postgres进行数据挖掘 - 是否有更好的方法?

3
有一个网络应用程序已经运行了几年,在它的生命周期内,该应用程序已经收集了大量的用户数据。数据存储在关系数据库中(Postgres)。并非所有这些数据都需要运行应用程序(进行业务)。但是商业人士有时会要求我提供这些数据的报告。这就引起了一些问题:
  1. 有时这些SQL查询运行时间很长
  2. 对生产数据库执行查询(不好)
  3. 不容易按周或月交付报告
  4. 一些数据部分存储在不适合此类查询的方式中(查询效率低下)
我的想法(请注意,我是开发人员而不是数据挖掘专家),如何改善整个交付报告的过程是:
  1. 创建单独的数据库,定期更新生产数据
  2. 优化数据存储方式
  3. 创建仪表板来呈现报告
问题:但是否有更好的方法?是否有另一个更适合此类数据分析的数据库?还是应该研究现代数据挖掘工具?
谢谢!
4个回答

4

你是否真正从事数据挖掘(例如分类、聚类、异常检测),或者对于你而言,“数据挖掘”仅仅是对数据进行报告?如果是后者,所有“现代数据挖掘工具”都会让你失望,因为它们服务的目的不同。

你是否充分利用了Postgres的索引功能?你的情境听起来好像以选择和聚合为主要工作,而SQL数据库在此方面非常出色——如果设计得当。

例如,可以使用物化视图和触发器将数据处理成一个更适合你报告的方案。


关于你的问题“你是否充分使用了Postgres的索引功能?”是的,索引也确实缺失。这个问题也将在第二个数据库中得到解决。 - robert

3
如果你真的想使用PostgreSQL进行数据挖掘,有一些可以使用的工具。
  1. 非常简单的方式是使用KNIME。它易于安装,提供了完整的数据挖掘工具。你可以直接从数据库访问数据,处理并将其保存回数据库。

  2. 另一种方法是使用MADLib。它在Python和C中安装了数据挖掘函数,直接在Postgres中使用SQL查询进行挖掘。

这两个项目都足够稳定,可以尝试使用。

3
有许多方法可以解决这个问题,但我认为对于你来说最容易的方法是使用Postgres复制。请查看这个Postgres复制教程进行快速概念验证。(当你在谷歌搜索“postgres复制”时会有很多结果,这只是其中之一。)这里有一个链接记录了流式复制从PostgreSQL网站维基上的说明。
我建议这样做是因为它符合你的所有标准,并且也符合你已经熟悉的技术范围。唯一需要学习的是复制部分。
复制解决了你的问题,因为它将创建第二个数据库,该数据库将通过复制过程得到更新,从而有效地成为你的“只读”数据库。你将保持相同的模式,但索引可以更改,报告/仪表板可以自定义。这是你将查询的数据库。你的主要数据库将是事务性数据库,为用户服务,而复制的数据库将为利益相关者服务。
这是一个广泛的话题,请做好尽职调查和研究。但它也是适合你的东西,可以快速解决问题。

谢谢您的意见!我相信我会使用第二个数据库进行数据分析。 - robert

1
我们使用非事务性(只读)数据库进行报告。我们不关心规范化。如果我是你,我会为报告使用另一个数据库。我将按照OLAP原则设计表格(星型模式,雪花模式),并使用ETL工具定期转储数据(可能是每周)到只读数据库以开始创建报告。
报告用于决策支持,因此它们不必实时,并且通常不必当前。换句话说,可以创建最近一周或最近一个月的报告是可以接受的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接